rsanchez
2017-03-01 f81088473cbc7cd9a348768e3ac300e973ce3583
#3527 feature - Basic boilerplate for Angular2 and Covalent
58 files deleted
20 files added
1 files modified
changed files
securis/src/main/webapp/.gitignore patch | view | blame | history
securis/src/main/webapp/admin.html patch | view | blame | history
securis/src/main/webapp/bs-config.json patch | view | blame | history
securis/src/main/webapp/css/bootstrap-dialog.css patch | view | blame | history
securis/src/main/webapp/css/bootstrap-theme.css patch | view | blame | history
securis/src/main/webapp/css/bootstrap-theme.css.map patch | view | blame | history
securis/src/main/webapp/css/bootstrap-theme.min.css patch | view | blame | history
securis/src/main/webapp/css/bootstrap.css patch | view | blame | history
securis/src/main/webapp/css/bootstrap.css.map patch | view | blame | history
securis/src/main/webapp/css/bootstrap.min.css patch | view | blame | history
securis/src/main/webapp/css/chosen-spinner.css patch | view | blame | history
securis/src/main/webapp/css/chosen-sprite.png patch | view | blame | history
securis/src/main/webapp/css/chosen-sprite@2x.png patch | view | blame | history
securis/src/main/webapp/css/chosen.css patch | view | blame | history
securis/src/main/webapp/css/font-awesome.min.css patch | view | blame | history
securis/src/main/webapp/css/securis.css patch | view | blame | history
securis/src/main/webapp/css/spinner.gif patch | view | blame | history
securis/src/main/webapp/css/toaster.css patch | view | blame | history
securis/src/main/webapp/fonts/glyphicons-halflings-regular.eot patch | view | blame | history
securis/src/main/webapp/fonts/glyphicons-halflings-regular.svg patch | view | blame | history
securis/src/main/webapp/fonts/glyphicons-halflings-regular.ttf patch | view | blame | history
securis/src/main/webapp/fonts/glyphicons-halflings-regular.woff patch | view | blame | history
securis/src/main/webapp/header.html patch | view | blame | history
securis/src/main/webapp/images/securis_100.png patch | view | blame | history
securis/src/main/webapp/images/securis_40.png patch | view | blame | history
securis/src/main/webapp/index.html patch | view | blame | history
securis/src/main/webapp/index.jsp patch | view | blame | history
securis/src/main/webapp/js/admin.js patch | view | blame | history
securis/src/main/webapp/js/angular/angular-animate.min.js patch | view | blame | history
securis/src/main/webapp/js/angular/angular-animate.min.js.map patch | view | blame | history
securis/src/main/webapp/js/angular/angular-resource.min.js patch | view | blame | history
securis/src/main/webapp/js/angular/angular-resource.min.js.map patch | view | blame | history
securis/src/main/webapp/js/angular/angular-route.min.js patch | view | blame | history
securis/src/main/webapp/js/angular/angular-route.min.js.map patch | view | blame | history
securis/src/main/webapp/js/angular/angular.js patch | view | blame | history
securis/src/main/webapp/js/angular/angular.min.js patch | view | blame | history
securis/src/main/webapp/js/angular/angular.min.js.map patch | view | blame | history
securis/src/main/webapp/js/angular/chosen.js patch | view | blame | history
securis/src/main/webapp/js/angular/toaster.js patch | view | blame | history
securis/src/main/webapp/js/catalogs.js patch | view | blame | history
securis/src/main/webapp/js/catalogs.json patch | view | blame | history
securis/src/main/webapp/js/commons.js patch | view | blame | history
securis/src/main/webapp/js/i18n.js patch | view | blame | history
securis/src/main/webapp/js/lang/messages_es.json patch | view | blame | history
securis/src/main/webapp/js/lang/messages_fr.json patch | view | blame | history
securis/src/main/webapp/js/licenses.js patch | view | blame | history
securis/src/main/webapp/js/login.js patch | view | blame | history
securis/src/main/webapp/js/main.js patch | view | blame | history
securis/src/main/webapp/js/vendor/FileSaver.js patch | view | blame | history
securis/src/main/webapp/js/vendor/bootstrap-dialog.js patch | view | blame | history
securis/src/main/webapp/js/vendor/bootstrap.js patch | view | blame | history
securis/src/main/webapp/js/vendor/bootstrap.min.js patch | view | blame | history
securis/src/main/webapp/js/vendor/chosen.jquery.js patch | view | blame | history
securis/src/main/webapp/js/vendor/jquery.min.js patch | view | blame | history
securis/src/main/webapp/js/vendor/jquery.min.map patch | view | blame | history
securis/src/main/webapp/js/vendor/modernizr-2.6.2.min.js patch | view | blame | history
securis/src/main/webapp/js/vendor/store.js patch | view | blame | history
securis/src/main/webapp/js/vendor/store.min.js patch | view | blame | history
securis/src/main/webapp/licenses.html patch | view | blame | history
securis/src/main/webapp/login.html patch | view | blame | history
securis/src/main/webapp/package.json patch | view | blame | history
securis/src/main/webapp/server.js patch | view | blame | history
securis/src/main/webapp/src/app/app.component.ts patch | view | blame | history
securis/src/main/webapp/src/app/app.module.ts patch | view | blame | history
securis/src/main/webapp/src/app/app.routes.ts patch | view | blame | history
securis/src/main/webapp/src/app/detail.component.ts patch | view | blame | history
securis/src/main/webapp/src/app/hero.ts patch | view | blame | history
securis/src/main/webapp/src/app/pack.list.component.html patch | view | blame | history
securis/src/main/webapp/src/app/pack.list.component.ts patch | view | blame | history
securis/src/main/webapp/src/environments/environment.ts patch | view | blame | history
securis/src/main/webapp/src/favicon.ico patch | view | blame | history
securis/src/main/webapp/src/main.ts patch | view | blame | history
securis/src/main/webapp/src/polifills.ts patch | view | blame | history
securis/src/main/webapp/src/tsconfig.json patch | view | blame | history
securis/src/main/webapp/styles.css patch | view | blame | history
securis/src/main/webapp/systemjs.config.extras.js patch | view | blame | history
securis/src/main/webapp/systemjs.config.js patch | view | blame | history
securis/src/main/webapp/tsconfig.json patch | view | blame | history
securis/src/main/webapp/tslint.json patch | view | blame | history
securis/src/main/webapp/.gitignore
....@@ -0,0 +1,5 @@
1
+node_modules
2
+old
3
+old_ng2
4
+src/**/*.js
5
+src/**/*.js.map
securis/src/main/webapp/admin.html
deleted file mode 100644
....@@ -1,143 +0,0 @@
1
-
2
- <div ng-include="'header.html'" ></div>
3
-
4
- <div class="container">
5
- <div class="col-md-12">&nbsp;</div>
6
- <div class="col-md-2">
7
-
8
- <ul class="nav nav-pills nav-stacked">
9
- <li ng-repeat="catalog in catalogsList" ng-class="{active: $index === catalogIndex}"><a ng-click="selectCatalog($index)" ng-bind="catalog.name"></a></li>
10
- </ul>
11
-
12
- </div>
13
- <div class="col-md-10">
14
- <div id="toolbarAndForm" ng-controller="CatalogFormCtrl">
15
- <nav class="navbar navbar-default navbar-static-top">
16
- <!-- Brand and toggle get grouped for better mobile display -->
17
- <div class="navbar-header">
18
- <a class="navbar-brand" ng-bind="catalogMetadata.name"></a>
19
- </div>
20
-
21
- <!-- Collect the nav links, forms, and other content for toggling -->
22
- <div class="collapse navbar-collapse"
23
- id="bs-example-navbar-collapse-1">
24
- <ul class="nav navbar-nav">
25
- <li><a i18n ng-click="editNew()"><span class="glyphicon glyphicon-plus"></span>
26
- New</a></li>
27
- <li><a i18n ng-click="cancel()"> <span
28
- class="glyphicon glyphicon-ban-circle"></span> Cancel
29
- </a></li>
30
- </ul>
31
- <div class="navbar-form navbar-right">
32
- <div class="input-group input-group-sm">
33
- <span class="input-group-addon glyphicon glyphicon-search" style="top: 0px;"></span>
34
- <input type="text" class="form-control" placeholder="Search" ng-model="$parent.searchText" >
35
- <span class="btn input-group-addon glyphicon glyphicon-remove" ng-click="$parent.searchText = ''" style="top: 0px;"></span>
36
- </div>
37
- </div>
38
- </div>
39
- </nav>
40
-
41
- <div class="panel panel-default animate-show ng-hide" ng-show="showForm">
42
- <form role="form" class="form-horizontal " name="catalogForm" id="catalogForm" ng-submit="saveCatalog()" >
43
-<!-- <pre>formu: {{formu | json}}</pre>-->
44
- <div class="form-group" ng-repeat="field in catalogMetadata.fields" ng-if="(!isNew || !field.autogenerate) && !field.listingOnly">
45
- <label class="col-md-3 control-label" for="{{field.name}}">{{field.display}}</label>
46
- <div class="col-md-5">
47
- <div ng-switch on="inputType(field)">
48
- <input catalog-field ng-switch-when="normal" type="{{field.type}}" id="{{field.name}}" name="{{field.name}}" placeholder=""
49
- class="form-control" ng-model="formu[field.name]" ng-required="field.mandatory" ng-maxlength="{{field.maxlength}}" />
50
- <input catalog-field ng-switch-when="password" type="{{field.type}}" id="{{field.name}}" name="{{field.name}}" placeholder=""
51
- class="form-control" ng-model="formu[field.name]" ng-required="field.mandatory" ng-maxlength="{{field.maxlength}}" />
52
- <textarea catalog-field ng-switch-when="textarea" type="{{field.type}}" id="{{field.name}}" name="{{field.name}}" placeholder=""
53
- class="form-control" ng-model="formu[field.name]" rows="{{field.multiline}}" ng-required="field.mandatory" ng-maxlength="{{field.maxlength}}"></textarea>
54
- <p ng-switch-when="readonly" class="form-control-static">{{formu[field.name]}}</p>
55
- <p ng-switch-when="readonly_date" class="form-control-static">{{formu[field.name] | date:'medium'}}</p>
56
- <select ng-switch-when="select" class="form-control" ng-required="field.mandatory" ng-model="formu[field.name]"
57
- ng-options="o.id as o.label for o in refs[field.name]" ng-change="selectFieldChanged(field.onchange)">
58
- <option value="" ></option>
59
- </select>
60
- <select chosen multiple ng-switch-when="multiselect" class="form-control" ng-required="field.mandatory" ng-model="formu[field.name]"
61
- ng-options="o.id as o.label for o in refs[field.name]" data-placeholder="...">
62
- </select>
63
- <div ng-switch-when="metadata" >
64
- <table class="table table-hover table-condensed">
65
- <thead>
66
- <tr>
67
- <th i18n >Key</th>
68
- <th i18n >Value</th>
69
- <th i18n >Mandatory</th>
70
- <th ng-if="field.allow_creation"><span ng-click="createMetadataRow()" id="md_add" class="btn btn-success btn-xs glyphicon glyphicon-plus"></span></th>
71
- </tr>
72
- </thead>
73
- <tbody>
74
- <tr ng-repeat="row_md in formu['metadata']" >
75
- <td><input type="text" id="md_key" name="md_key" placeholder="" ng-readonly="!field.allow_creation"
76
- class="form-control" ng-model="row_md['key']" ng-required="true" ng-maxlength="100" />
77
- </td>
78
- <td>
79
- <input type="text" id="md_value" name="md_value" placeholder=""
80
- class="form-control" ng-model="row_md['value']" ng-required="false" ng-maxlength="500" />
81
- </td>
82
- <td>
83
- <input type="checkbox" id="md_mandatory" name="md_mandatory" ng-disabled="!field.allow_creation"
84
- class="form-control" ng-model="row_md['mandatory']" />
85
- </td>
86
- <td ng-if="field.allow_creation">
87
- <span ng-click="removeMetadataKey(row_md)" id="md_delete" class="btn btn-danger btn-xs glyphicon glyphicon-trash"></span>
88
- </td>
89
- </tr>
90
- </tbody>
91
- </table>
92
- </div>
93
-
94
- </div>
95
- <div class="alert inline-alert alert-warning" ng-show="catalogForm[field.name].$invalid">
96
- <span class="glyphicon glyphicon-warning-sign"></span>
97
- <span ng-show="catalogForm[field.name].$error.maxlength">{{field.display}} length is too long (max: {{field.maxlength}}).<br/></span>
98
- <span ng-show="catalogForm[field.name].$error.required">{{field.display}} is required.</span>
99
- </div>
100
- </div>
101
- </div>
102
- <div class="form-group">
103
- <div class="col-md-offset-3 col-md-10" id="saveContainer">
104
- <button id="save" type="submit" class="btn btn-primary" >
105
- <span i18n class="glyphicon glyphicon-floppy-disk"></span> Save
106
- </button>
107
- </div>
108
- </div>
109
- </form>
110
- </div>
111
-
112
- </div>
113
-
114
- <div class="panel panel-default" ng-controller="CatalogListCtrl">
115
- <div class="panel-heading">
116
- {{catalog.name}} <span class="badge pull-right" ng-bind="list.length || 0"></span>
117
- </div>
118
-
119
- <table class="table table-hover table-condensed">
120
- <thead>
121
- <tr>
122
- <th ng-repeat="field in catalogMetadata.list_fields" ng-bind="display(field)"></th>
123
- <th></th>
124
- </tr>
125
- </thead>
126
- <tbody>
127
- <tr ng-repeat="row in list | filter:searchText" ng-dblclick="edit(row)">
128
- <td ng-repeat="field in catalogMetadata.list_fields" ng-bind="print(field, row)"></td>
129
-
130
- <td><span ng-click="edit(row)"
131
- class="glyphicon glyphicon-pencil"></span>
132
- <span ng-click="delete(row)"
133
- class="glyphicon glyphicon-remove"></span>
134
- </td>
135
- </tr>
136
- </tbody>
137
- <tfoot>
138
- </tfoot>
139
- </table>
140
- </div>
141
- </div>
142
-
143
- </div>
securis/src/main/webapp/bs-config.json
....@@ -0,0 +1,8 @@
1
+{
2
+ "server": {
3
+ "baseDir": "",
4
+ "routes": {
5
+ "/node_modules": "node_modules"
6
+ }
7
+ }
8
+}
securis/src/main/webapp/css/bootstrap-dialog.css
deleted file mode 100644
....@@ -1,120 +0,0 @@
1
-.bootstrap-dialog {
2
-
3
-}
4
-.bootstrap-dialog .modal-header {
5
- border-top-left-radius: 4px;
6
- border-top-right-radius: 4px;
7
-}
8
-.bootstrap-dialog .bootstrap-dialog-title {
9
- color: #fff;
10
- display: inline-block;
11
-}
12
-.bootstrap-dialog.type-default .bootstrap-dialog-title {
13
- color: #333;
14
-}
15
-.bootstrap-dialog.size-normal .bootstrap-dialog-title {
16
- font-size: 16px;
17
-}
18
-.bootstrap-dialog.size-large .bootstrap-dialog-title {
19
- font-size: 24px;
20
-}
21
-.bootstrap-dialog .bootstrap-dialog-close-button {
22
- float: right;
23
- filter:alpha(opacity=90);
24
- -moz-opacity:0.9;
25
- -khtml-opacity: 0.9;
26
- opacity: 0.9;
27
-}
28
-.bootstrap-dialog.size-normal .bootstrap-dialog-close-button {
29
- font-size: 20px;
30
-}
31
-.bootstrap-dialog.size-large .bootstrap-dialog-close-button {
32
- font-size: 30px;
33
-}
34
-.bootstrap-dialog .bootstrap-dialog-close-button:hover {
35
- cursor: pointer;
36
- filter: alpha(opacity=100);
37
- -moz-opacity: 1;
38
- -khtml-opacity: 1;
39
- opacity: 1;
40
-}
41
-.bootstrap-dialog.size-normal .bootstrap-dialog-message {
42
- font-size: 14px;
43
-}
44
-.bootstrap-dialog.size-large .bootstrap-dialog-message {
45
- font-size: 18px;
46
-}
47
-.bootstrap-dialog.type-default .modal-header {
48
- background-color: #fff;
49
-}
50
-.bootstrap-dialog.type-info .modal-header {
51
- background-color: #5bc0de;
52
-}
53
-.bootstrap-dialog.type-primary .modal-header {
54
- background-color: #428bca;
55
-}
56
-.bootstrap-dialog.type-success .modal-header {
57
- background-color: #5cb85c;
58
-}
59
-.bootstrap-dialog.type-warning .modal-header {
60
- background-color: #f0ad4e;
61
-}
62
-.bootstrap-dialog.type-danger .modal-header {
63
- background-color: #d9534f;
64
-}
65
-.bootstrap-dialog .bootstrap-dialog-button-icon {
66
- margin-right: 3px;
67
-}
68
-
69
-/**
70
- * Icon animation
71
- * Copied from font-awesome: http://fontawesome.io/
72
- **/
73
-.icon-spin {
74
- display: inline-block;
75
- -moz-animation: spin 2s infinite linear;
76
- -o-animation: spin 2s infinite linear;
77
- -webkit-animation: spin 2s infinite linear;
78
- animation: spin 2s infinite linear;
79
-}
80
-@-moz-keyframes spin {
81
- 0% {
82
- -moz-transform: rotate(0deg);
83
-}
84
-100% {
85
- -moz-transform: rotate(359deg);
86
-}
87
-}
88
-@-webkit-keyframes spin {
89
- 0% {
90
- -webkit-transform: rotate(0deg);
91
-}
92
-100% {
93
- -webkit-transform: rotate(359deg);
94
-}
95
-}
96
-@-o-keyframes spin {
97
- 0% {
98
- -o-transform: rotate(0deg);
99
-}
100
-100% {
101
- -o-transform: rotate(359deg);
102
-}
103
-}
104
-@-ms-keyframes spin {
105
- 0% {
106
- -ms-transform: rotate(0deg);
107
-}
108
-100% {
109
- -ms-transform: rotate(359deg);
110
-}
111
-}
112
-@keyframes spin {
113
- 0% {
114
- transform: rotate(0deg);
115
-}
116
-100% {
117
- transform: rotate(359deg);
118
-}
119
-}
120
-/** End of icon animation **/
securis/src/main/webapp/css/bootstrap-theme.css
deleted file mode 100644
....@@ -1,442 +0,0 @@
1
-/*!
2
- * Bootstrap v3.2.0 (http://getbootstrap.com)
3
- * Copyright 2011-2014 Twitter, Inc.
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */
6
-
7
-.btn-default,
8
-.btn-primary,
9
-.btn-success,
10
-.btn-info,
11
-.btn-warning,
12
-.btn-danger {
13
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
14
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
16
-}
17
-.btn-default:active,
18
-.btn-primary:active,
19
-.btn-success:active,
20
-.btn-info:active,
21
-.btn-warning:active,
22
-.btn-danger:active,
23
-.btn-default.active,
24
-.btn-primary.active,
25
-.btn-success.active,
26
-.btn-info.active,
27
-.btn-warning.active,
28
-.btn-danger.active {
29
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
31
-}
32
-.btn:active,
33
-.btn.active {
34
- background-image: none;
35
-}
36
-.btn-default {
37
- text-shadow: 0 1px 0 #fff;
38
- background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
39
- background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
40
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
41
- background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
42
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
43
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
44
- background-repeat: repeat-x;
45
- border-color: #dbdbdb;
46
- border-color: #ccc;
47
-}
48
-.btn-default:hover,
49
-.btn-default:focus {
50
- background-color: #e0e0e0;
51
- background-position: 0 -15px;
52
-}
53
-.btn-default:active,
54
-.btn-default.active {
55
- background-color: #e0e0e0;
56
- border-color: #dbdbdb;
57
-}
58
-.btn-default:disabled,
59
-.btn-default[disabled] {
60
- background-color: #e0e0e0;
61
- background-image: none;
62
-}
63
-.btn-primary {
64
- background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
65
- background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
66
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));
67
- background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
68
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
69
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
70
- background-repeat: repeat-x;
71
- border-color: #2b669a;
72
-}
73
-.btn-primary:hover,
74
-.btn-primary:focus {
75
- background-color: #2d6ca2;
76
- background-position: 0 -15px;
77
-}
78
-.btn-primary:active,
79
-.btn-primary.active {
80
- background-color: #2d6ca2;
81
- border-color: #2b669a;
82
-}
83
-.btn-primary:disabled,
84
-.btn-primary[disabled] {
85
- background-color: #2d6ca2;
86
- background-image: none;
87
-}
88
-.btn-success {
89
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
90
- background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
91
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
92
- background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
93
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
94
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
95
- background-repeat: repeat-x;
96
- border-color: #3e8f3e;
97
-}
98
-.btn-success:hover,
99
-.btn-success:focus {
100
- background-color: #419641;
101
- background-position: 0 -15px;
102
-}
103
-.btn-success:active,
104
-.btn-success.active {
105
- background-color: #419641;
106
- border-color: #3e8f3e;
107
-}
108
-.btn-success:disabled,
109
-.btn-success[disabled] {
110
- background-color: #419641;
111
- background-image: none;
112
-}
113
-.btn-info {
114
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
115
- background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
116
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
117
- background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
118
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
119
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
120
- background-repeat: repeat-x;
121
- border-color: #28a4c9;
122
-}
123
-.btn-info:hover,
124
-.btn-info:focus {
125
- background-color: #2aabd2;
126
- background-position: 0 -15px;
127
-}
128
-.btn-info:active,
129
-.btn-info.active {
130
- background-color: #2aabd2;
131
- border-color: #28a4c9;
132
-}
133
-.btn-info:disabled,
134
-.btn-info[disabled] {
135
- background-color: #2aabd2;
136
- background-image: none;
137
-}
138
-.btn-warning {
139
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
140
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
141
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
142
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
143
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
144
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
145
- background-repeat: repeat-x;
146
- border-color: #e38d13;
147
-}
148
-.btn-warning:hover,
149
-.btn-warning:focus {
150
- background-color: #eb9316;
151
- background-position: 0 -15px;
152
-}
153
-.btn-warning:active,
154
-.btn-warning.active {
155
- background-color: #eb9316;
156
- border-color: #e38d13;
157
-}
158
-.btn-warning:disabled,
159
-.btn-warning[disabled] {
160
- background-color: #eb9316;
161
- background-image: none;
162
-}
163
-.btn-danger {
164
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
165
- background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
166
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
167
- background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
168
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
169
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
170
- background-repeat: repeat-x;
171
- border-color: #b92c28;
172
-}
173
-.btn-danger:hover,
174
-.btn-danger:focus {
175
- background-color: #c12e2a;
176
- background-position: 0 -15px;
177
-}
178
-.btn-danger:active,
179
-.btn-danger.active {
180
- background-color: #c12e2a;
181
- border-color: #b92c28;
182
-}
183
-.btn-danger:disabled,
184
-.btn-danger[disabled] {
185
- background-color: #c12e2a;
186
- background-image: none;
187
-}
188
-.thumbnail,
189
-.img-thumbnail {
190
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
191
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
192
-}
193
-.dropdown-menu > li > a:hover,
194
-.dropdown-menu > li > a:focus {
195
- background-color: #e8e8e8;
196
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
197
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
198
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
199
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
200
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
201
- background-repeat: repeat-x;
202
-}
203
-.dropdown-menu > .active > a,
204
-.dropdown-menu > .active > a:hover,
205
-.dropdown-menu > .active > a:focus {
206
- background-color: #357ebd;
207
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
208
- background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
209
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
210
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
211
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
212
- background-repeat: repeat-x;
213
-}
214
-.navbar-default {
215
- background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
216
- background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
217
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
218
- background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
219
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
220
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
221
- background-repeat: repeat-x;
222
- border-radius: 4px;
223
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
224
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
225
-}
226
-.navbar-default .navbar-nav > .active > a {
227
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
228
- background-image: -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
229
- background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3));
230
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
231
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
232
- background-repeat: repeat-x;
233
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
234
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
235
-}
236
-.navbar-brand,
237
-.navbar-nav > li > a {
238
- text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
239
-}
240
-.navbar-inverse {
241
- background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
242
- background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
243
- background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
244
- background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
245
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
246
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
247
- background-repeat: repeat-x;
248
-}
249
-.navbar-inverse .navbar-nav > .active > a {
250
- background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
251
- background-image: -o-linear-gradient(top, #222 0%, #282828 100%);
252
- background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828));
253
- background-image: linear-gradient(to bottom, #222 0%, #282828 100%);
254
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
255
- background-repeat: repeat-x;
256
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
257
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
258
-}
259
-.navbar-inverse .navbar-brand,
260
-.navbar-inverse .navbar-nav > li > a {
261
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
262
-}
263
-.navbar-static-top,
264
-.navbar-fixed-top,
265
-.navbar-fixed-bottom {
266
- border-radius: 0;
267
-}
268
-.alert {
269
- text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
270
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
271
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
272
-}
273
-.alert-success {
274
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
275
- background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
276
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
277
- background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
278
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
279
- background-repeat: repeat-x;
280
- border-color: #b2dba1;
281
-}
282
-.alert-info {
283
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
284
- background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
285
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
286
- background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
287
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
288
- background-repeat: repeat-x;
289
- border-color: #9acfea;
290
-}
291
-.alert-warning {
292
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
293
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
294
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
295
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
296
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
297
- background-repeat: repeat-x;
298
- border-color: #f5e79e;
299
-}
300
-.alert-danger {
301
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
302
- background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
303
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
304
- background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
305
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
306
- background-repeat: repeat-x;
307
- border-color: #dca7a7;
308
-}
309
-.progress {
310
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
311
- background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
312
- background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
313
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
314
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
315
- background-repeat: repeat-x;
316
-}
317
-.progress-bar {
318
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
319
- background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%);
320
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));
321
- background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
322
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
323
- background-repeat: repeat-x;
324
-}
325
-.progress-bar-success {
326
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
327
- background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
328
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
329
- background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
330
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
331
- background-repeat: repeat-x;
332
-}
333
-.progress-bar-info {
334
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
335
- background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
336
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
337
- background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
338
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
339
- background-repeat: repeat-x;
340
-}
341
-.progress-bar-warning {
342
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
343
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
344
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
345
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
346
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
347
- background-repeat: repeat-x;
348
-}
349
-.progress-bar-danger {
350
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
351
- background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
352
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
353
- background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
354
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
355
- background-repeat: repeat-x;
356
-}
357
-.progress-bar-striped {
358
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
359
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
360
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
361
-}
362
-.list-group {
363
- border-radius: 4px;
364
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
365
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
366
-}
367
-.list-group-item.active,
368
-.list-group-item.active:hover,
369
-.list-group-item.active:focus {
370
- text-shadow: 0 -1px 0 #3071a9;
371
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
372
- background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%);
373
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));
374
- background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
375
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
376
- background-repeat: repeat-x;
377
- border-color: #3278b3;
378
-}
379
-.panel {
380
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
381
- box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
382
-}
383
-.panel-default > .panel-heading {
384
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
385
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
386
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
387
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
388
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
389
- background-repeat: repeat-x;
390
-}
391
-.panel-primary > .panel-heading {
392
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
393
- background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
394
- background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
395
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
396
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
397
- background-repeat: repeat-x;
398
-}
399
-.panel-success > .panel-heading {
400
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
401
- background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
402
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
403
- background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
404
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
405
- background-repeat: repeat-x;
406
-}
407
-.panel-info > .panel-heading {
408
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
409
- background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
410
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
411
- background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
412
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
413
- background-repeat: repeat-x;
414
-}
415
-.panel-warning > .panel-heading {
416
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
417
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
418
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
419
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
420
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
421
- background-repeat: repeat-x;
422
-}
423
-.panel-danger > .panel-heading {
424
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
425
- background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
426
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
427
- background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
428
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
429
- background-repeat: repeat-x;
430
-}
431
-.well {
432
- background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
433
- background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
434
- background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
435
- background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
436
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
437
- background-repeat: repeat-x;
438
- border-color: #dcdcdc;
439
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
440
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
441
-}
442
-/*# sourceMappingURL=bootstrap-theme.css.map */
securis/src/main/webapp/css/bootstrap-theme.css.map
deleted file mode 100644
....@@ -1 +0,0 @@
1
-{"version":3,"file":"bootstrap-theme.css","sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",null,"// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
securis/src/main/webapp/css/bootstrap-theme.min.css
deleted file mode 100644
....@@ -1,5 +0,0 @@
1
-/*!
2
- * Bootstrap v3.2.0 (http://getbootstrap.com)
3
- * Copyright 2011-2014 Twitter, Inc.
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f3f3f3));background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:-o-linear-gradient(top,#222 0,#282828 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#282828));background-image:linear-gradient(to bottom,#222 0,#282828 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
securis/src/main/webapp/css/bootstrap.css
deleted file mode 100644
....@@ -1,6203 +0,0 @@
1
-/*!
2
- * Bootstrap v3.2.0 (http://getbootstrap.com)
3
- * Copyright 2011-2014 Twitter, Inc.
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */
6
-
7
-/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
8
-html {
9
- font-family: sans-serif;
10
- -webkit-text-size-adjust: 100%;
11
- -ms-text-size-adjust: 100%;
12
-}
13
-body {
14
- margin: 0;
15
-}
16
-article,
17
-aside,
18
-details,
19
-figcaption,
20
-figure,
21
-footer,
22
-header,
23
-hgroup,
24
-main,
25
-nav,
26
-section,
27
-summary {
28
- display: block;
29
-}
30
-audio,
31
-canvas,
32
-progress,
33
-video {
34
- display: inline-block;
35
- vertical-align: baseline;
36
-}
37
-audio:not([controls]) {
38
- display: none;
39
- height: 0;
40
-}
41
-[hidden],
42
-template {
43
- display: none;
44
-}
45
-a {
46
- background: transparent;
47
-}
48
-a:active,
49
-a:hover {
50
- outline: 0;
51
-}
52
-abbr[title] {
53
- border-bottom: 1px dotted;
54
-}
55
-b,
56
-strong {
57
- font-weight: bold;
58
-}
59
-dfn {
60
- font-style: italic;
61
-}
62
-h1 {
63
- margin: .67em 0;
64
- font-size: 2em;
65
-}
66
-mark {
67
- color: #000;
68
- background: #ff0;
69
-}
70
-small {
71
- font-size: 80%;
72
-}
73
-sub,
74
-sup {
75
- position: relative;
76
- font-size: 75%;
77
- line-height: 0;
78
- vertical-align: baseline;
79
-}
80
-sup {
81
- top: -.5em;
82
-}
83
-sub {
84
- bottom: -.25em;
85
-}
86
-img {
87
- border: 0;
88
-}
89
-svg:not(:root) {
90
- overflow: hidden;
91
-}
92
-figure {
93
- margin: 1em 40px;
94
-}
95
-hr {
96
- height: 0;
97
- -webkit-box-sizing: content-box;
98
- -moz-box-sizing: content-box;
99
- box-sizing: content-box;
100
-}
101
-pre {
102
- overflow: auto;
103
-}
104
-code,
105
-kbd,
106
-pre,
107
-samp {
108
- font-family: monospace, monospace;
109
- font-size: 1em;
110
-}
111
-button,
112
-input,
113
-optgroup,
114
-select,
115
-textarea {
116
- margin: 0;
117
- font: inherit;
118
- color: inherit;
119
-}
120
-button {
121
- overflow: visible;
122
-}
123
-button,
124
-select {
125
- text-transform: none;
126
-}
127
-button,
128
-html input[type="button"],
129
-input[type="reset"],
130
-input[type="submit"] {
131
- -webkit-appearance: button;
132
- cursor: pointer;
133
-}
134
-button[disabled],
135
-html input[disabled] {
136
- cursor: default;
137
-}
138
-button::-moz-focus-inner,
139
-input::-moz-focus-inner {
140
- padding: 0;
141
- border: 0;
142
-}
143
-input {
144
- line-height: normal;
145
-}
146
-input[type="checkbox"],
147
-input[type="radio"] {
148
- -webkit-box-sizing: border-box;
149
- -moz-box-sizing: border-box;
150
- box-sizing: border-box;
151
- padding: 0;
152
-}
153
-input[type="number"]::-webkit-inner-spin-button,
154
-input[type="number"]::-webkit-outer-spin-button {
155
- height: auto;
156
-}
157
-input[type="search"] {
158
- -webkit-box-sizing: content-box;
159
- -moz-box-sizing: content-box;
160
- box-sizing: content-box;
161
- -webkit-appearance: textfield;
162
-}
163
-input[type="search"]::-webkit-search-cancel-button,
164
-input[type="search"]::-webkit-search-decoration {
165
- -webkit-appearance: none;
166
-}
167
-fieldset {
168
- padding: .35em .625em .75em;
169
- margin: 0 2px;
170
- border: 1px solid #c0c0c0;
171
-}
172
-legend {
173
- padding: 0;
174
- border: 0;
175
-}
176
-textarea {
177
- overflow: auto;
178
-}
179
-optgroup {
180
- font-weight: bold;
181
-}
182
-table {
183
- border-spacing: 0;
184
- border-collapse: collapse;
185
-}
186
-td,
187
-th {
188
- padding: 0;
189
-}
190
-@media print {
191
- * {
192
- color: #000 !important;
193
- text-shadow: none !important;
194
- background: transparent !important;
195
- -webkit-box-shadow: none !important;
196
- box-shadow: none !important;
197
- }
198
- a,
199
- a:visited {
200
- text-decoration: underline;
201
- }
202
- a[href]:after {
203
- content: " (" attr(href) ")";
204
- }
205
- abbr[title]:after {
206
- content: " (" attr(title) ")";
207
- }
208
- a[href^="javascript:"]:after,
209
- a[href^="#"]:after {
210
- content: "";
211
- }
212
- pre,
213
- blockquote {
214
- border: 1px solid #999;
215
-
216
- page-break-inside: avoid;
217
- }
218
- thead {
219
- display: table-header-group;
220
- }
221
- tr,
222
- img {
223
- page-break-inside: avoid;
224
- }
225
- img {
226
- max-width: 100% !important;
227
- }
228
- p,
229
- h2,
230
- h3 {
231
- orphans: 3;
232
- widows: 3;
233
- }
234
- h2,
235
- h3 {
236
- page-break-after: avoid;
237
- }
238
- select {
239
- background: #fff !important;
240
- }
241
- .navbar {
242
- display: none;
243
- }
244
- .table td,
245
- .table th {
246
- background-color: #fff !important;
247
- }
248
- .btn > .caret,
249
- .dropup > .btn > .caret {
250
- border-top-color: #000 !important;
251
- }
252
- .label {
253
- border: 1px solid #000;
254
- }
255
- .table {
256
- border-collapse: collapse !important;
257
- }
258
- .table-bordered th,
259
- .table-bordered td {
260
- border: 1px solid #ddd !important;
261
- }
262
-}
263
-@font-face {
264
- font-family: 'Glyphicons Halflings';
265
-
266
- src: url('../fonts/glyphicons-halflings-regular.eot');
267
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
268
-}
269
-.glyphicon {
270
- position: relative;
271
- top: 1px;
272
- display: inline-block;
273
- font-family: 'Glyphicons Halflings';
274
- font-style: normal;
275
- font-weight: normal;
276
- line-height: 1;
277
-
278
- -webkit-font-smoothing: antialiased;
279
- -moz-osx-font-smoothing: grayscale;
280
-}
281
-.glyphicon-asterisk:before {
282
- content: "\2a";
283
-}
284
-.glyphicon-plus:before {
285
- content: "\2b";
286
-}
287
-.glyphicon-euro:before {
288
- content: "\20ac";
289
-}
290
-.glyphicon-minus:before {
291
- content: "\2212";
292
-}
293
-.glyphicon-cloud:before {
294
- content: "\2601";
295
-}
296
-.glyphicon-envelope:before {
297
- content: "\2709";
298
-}
299
-.glyphicon-pencil:before {
300
- content: "\270f";
301
-}
302
-.glyphicon-glass:before {
303
- content: "\e001";
304
-}
305
-.glyphicon-music:before {
306
- content: "\e002";
307
-}
308
-.glyphicon-search:before {
309
- content: "\e003";
310
-}
311
-.glyphicon-heart:before {
312
- content: "\e005";
313
-}
314
-.glyphicon-star:before {
315
- content: "\e006";
316
-}
317
-.glyphicon-star-empty:before {
318
- content: "\e007";
319
-}
320
-.glyphicon-user:before {
321
- content: "\e008";
322
-}
323
-.glyphicon-film:before {
324
- content: "\e009";
325
-}
326
-.glyphicon-th-large:before {
327
- content: "\e010";
328
-}
329
-.glyphicon-th:before {
330
- content: "\e011";
331
-}
332
-.glyphicon-th-list:before {
333
- content: "\e012";
334
-}
335
-.glyphicon-ok:before {
336
- content: "\e013";
337
-}
338
-.glyphicon-remove:before {
339
- content: "\e014";
340
-}
341
-.glyphicon-zoom-in:before {
342
- content: "\e015";
343
-}
344
-.glyphicon-zoom-out:before {
345
- content: "\e016";
346
-}
347
-.glyphicon-off:before {
348
- content: "\e017";
349
-}
350
-.glyphicon-signal:before {
351
- content: "\e018";
352
-}
353
-.glyphicon-cog:before {
354
- content: "\e019";
355
-}
356
-.glyphicon-trash:before {
357
- content: "\e020";
358
-}
359
-.glyphicon-home:before {
360
- content: "\e021";
361
-}
362
-.glyphicon-file:before {
363
- content: "\e022";
364
-}
365
-.glyphicon-time:before {
366
- content: "\e023";
367
-}
368
-.glyphicon-road:before {
369
- content: "\e024";
370
-}
371
-.glyphicon-download-alt:before {
372
- content: "\e025";
373
-}
374
-.glyphicon-download:before {
375
- content: "\e026";
376
-}
377
-.glyphicon-upload:before {
378
- content: "\e027";
379
-}
380
-.glyphicon-inbox:before {
381
- content: "\e028";
382
-}
383
-.glyphicon-play-circle:before {
384
- content: "\e029";
385
-}
386
-.glyphicon-repeat:before {
387
- content: "\e030";
388
-}
389
-.glyphicon-refresh:before {
390
- content: "\e031";
391
-}
392
-.glyphicon-list-alt:before {
393
- content: "\e032";
394
-}
395
-.glyphicon-lock:before {
396
- content: "\e033";
397
-}
398
-.glyphicon-flag:before {
399
- content: "\e034";
400
-}
401
-.glyphicon-headphones:before {
402
- content: "\e035";
403
-}
404
-.glyphicon-volume-off:before {
405
- content: "\e036";
406
-}
407
-.glyphicon-volume-down:before {
408
- content: "\e037";
409
-}
410
-.glyphicon-volume-up:before {
411
- content: "\e038";
412
-}
413
-.glyphicon-qrcode:before {
414
- content: "\e039";
415
-}
416
-.glyphicon-barcode:before {
417
- content: "\e040";
418
-}
419
-.glyphicon-tag:before {
420
- content: "\e041";
421
-}
422
-.glyphicon-tags:before {
423
- content: "\e042";
424
-}
425
-.glyphicon-book:before {
426
- content: "\e043";
427
-}
428
-.glyphicon-bookmark:before {
429
- content: "\e044";
430
-}
431
-.glyphicon-print:before {
432
- content: "\e045";
433
-}
434
-.glyphicon-camera:before {
435
- content: "\e046";
436
-}
437
-.glyphicon-font:before {
438
- content: "\e047";
439
-}
440
-.glyphicon-bold:before {
441
- content: "\e048";
442
-}
443
-.glyphicon-italic:before {
444
- content: "\e049";
445
-}
446
-.glyphicon-text-height:before {
447
- content: "\e050";
448
-}
449
-.glyphicon-text-width:before {
450
- content: "\e051";
451
-}
452
-.glyphicon-align-left:before {
453
- content: "\e052";
454
-}
455
-.glyphicon-align-center:before {
456
- content: "\e053";
457
-}
458
-.glyphicon-align-right:before {
459
- content: "\e054";
460
-}
461
-.glyphicon-align-justify:before {
462
- content: "\e055";
463
-}
464
-.glyphicon-list:before {
465
- content: "\e056";
466
-}
467
-.glyphicon-indent-left:before {
468
- content: "\e057";
469
-}
470
-.glyphicon-indent-right:before {
471
- content: "\e058";
472
-}
473
-.glyphicon-facetime-video:before {
474
- content: "\e059";
475
-}
476
-.glyphicon-picture:before {
477
- content: "\e060";
478
-}
479
-.glyphicon-map-marker:before {
480
- content: "\e062";
481
-}
482
-.glyphicon-adjust:before {
483
- content: "\e063";
484
-}
485
-.glyphicon-tint:before {
486
- content: "\e064";
487
-}
488
-.glyphicon-edit:before {
489
- content: "\e065";
490
-}
491
-.glyphicon-share:before {
492
- content: "\e066";
493
-}
494
-.glyphicon-check:before {
495
- content: "\e067";
496
-}
497
-.glyphicon-move:before {
498
- content: "\e068";
499
-}
500
-.glyphicon-step-backward:before {
501
- content: "\e069";
502
-}
503
-.glyphicon-fast-backward:before {
504
- content: "\e070";
505
-}
506
-.glyphicon-backward:before {
507
- content: "\e071";
508
-}
509
-.glyphicon-play:before {
510
- content: "\e072";
511
-}
512
-.glyphicon-pause:before {
513
- content: "\e073";
514
-}
515
-.glyphicon-stop:before {
516
- content: "\e074";
517
-}
518
-.glyphicon-forward:before {
519
- content: "\e075";
520
-}
521
-.glyphicon-fast-forward:before {
522
- content: "\e076";
523
-}
524
-.glyphicon-step-forward:before {
525
- content: "\e077";
526
-}
527
-.glyphicon-eject:before {
528
- content: "\e078";
529
-}
530
-.glyphicon-chevron-left:before {
531
- content: "\e079";
532
-}
533
-.glyphicon-chevron-right:before {
534
- content: "\e080";
535
-}
536
-.glyphicon-plus-sign:before {
537
- content: "\e081";
538
-}
539
-.glyphicon-minus-sign:before {
540
- content: "\e082";
541
-}
542
-.glyphicon-remove-sign:before {
543
- content: "\e083";
544
-}
545
-.glyphicon-ok-sign:before {
546
- content: "\e084";
547
-}
548
-.glyphicon-question-sign:before {
549
- content: "\e085";
550
-}
551
-.glyphicon-info-sign:before {
552
- content: "\e086";
553
-}
554
-.glyphicon-screenshot:before {
555
- content: "\e087";
556
-}
557
-.glyphicon-remove-circle:before {
558
- content: "\e088";
559
-}
560
-.glyphicon-ok-circle:before {
561
- content: "\e089";
562
-}
563
-.glyphicon-ban-circle:before {
564
- content: "\e090";
565
-}
566
-.glyphicon-arrow-left:before {
567
- content: "\e091";
568
-}
569
-.glyphicon-arrow-right:before {
570
- content: "\e092";
571
-}
572
-.glyphicon-arrow-up:before {
573
- content: "\e093";
574
-}
575
-.glyphicon-arrow-down:before {
576
- content: "\e094";
577
-}
578
-.glyphicon-share-alt:before {
579
- content: "\e095";
580
-}
581
-.glyphicon-resize-full:before {
582
- content: "\e096";
583
-}
584
-.glyphicon-resize-small:before {
585
- content: "\e097";
586
-}
587
-.glyphicon-exclamation-sign:before {
588
- content: "\e101";
589
-}
590
-.glyphicon-gift:before {
591
- content: "\e102";
592
-}
593
-.glyphicon-leaf:before {
594
- content: "\e103";
595
-}
596
-.glyphicon-fire:before {
597
- content: "\e104";
598
-}
599
-.glyphicon-eye-open:before {
600
- content: "\e105";
601
-}
602
-.glyphicon-eye-close:before {
603
- content: "\e106";
604
-}
605
-.glyphicon-warning-sign:before {
606
- content: "\e107";
607
-}
608
-.glyphicon-plane:before {
609
- content: "\e108";
610
-}
611
-.glyphicon-calendar:before {
612
- content: "\e109";
613
-}
614
-.glyphicon-random:before {
615
- content: "\e110";
616
-}
617
-.glyphicon-comment:before {
618
- content: "\e111";
619
-}
620
-.glyphicon-magnet:before {
621
- content: "\e112";
622
-}
623
-.glyphicon-chevron-up:before {
624
- content: "\e113";
625
-}
626
-.glyphicon-chevron-down:before {
627
- content: "\e114";
628
-}
629
-.glyphicon-retweet:before {
630
- content: "\e115";
631
-}
632
-.glyphicon-shopping-cart:before {
633
- content: "\e116";
634
-}
635
-.glyphicon-folder-close:before {
636
- content: "\e117";
637
-}
638
-.glyphicon-folder-open:before {
639
- content: "\e118";
640
-}
641
-.glyphicon-resize-vertical:before {
642
- content: "\e119";
643
-}
644
-.glyphicon-resize-horizontal:before {
645
- content: "\e120";
646
-}
647
-.glyphicon-hdd:before {
648
- content: "\e121";
649
-}
650
-.glyphicon-bullhorn:before {
651
- content: "\e122";
652
-}
653
-.glyphicon-bell:before {
654
- content: "\e123";
655
-}
656
-.glyphicon-certificate:before {
657
- content: "\e124";
658
-}
659
-.glyphicon-thumbs-up:before {
660
- content: "\e125";
661
-}
662
-.glyphicon-thumbs-down:before {
663
- content: "\e126";
664
-}
665
-.glyphicon-hand-right:before {
666
- content: "\e127";
667
-}
668
-.glyphicon-hand-left:before {
669
- content: "\e128";
670
-}
671
-.glyphicon-hand-up:before {
672
- content: "\e129";
673
-}
674
-.glyphicon-hand-down:before {
675
- content: "\e130";
676
-}
677
-.glyphicon-circle-arrow-right:before {
678
- content: "\e131";
679
-}
680
-.glyphicon-circle-arrow-left:before {
681
- content: "\e132";
682
-}
683
-.glyphicon-circle-arrow-up:before {
684
- content: "\e133";
685
-}
686
-.glyphicon-circle-arrow-down:before {
687
- content: "\e134";
688
-}
689
-.glyphicon-globe:before {
690
- content: "\e135";
691
-}
692
-.glyphicon-wrench:before {
693
- content: "\e136";
694
-}
695
-.glyphicon-tasks:before {
696
- content: "\e137";
697
-}
698
-.glyphicon-filter:before {
699
- content: "\e138";
700
-}
701
-.glyphicon-briefcase:before {
702
- content: "\e139";
703
-}
704
-.glyphicon-fullscreen:before {
705
- content: "\e140";
706
-}
707
-.glyphicon-dashboard:before {
708
- content: "\e141";
709
-}
710
-.glyphicon-paperclip:before {
711
- content: "\e142";
712
-}
713
-.glyphicon-heart-empty:before {
714
- content: "\e143";
715
-}
716
-.glyphicon-link:before {
717
- content: "\e144";
718
-}
719
-.glyphicon-phone:before {
720
- content: "\e145";
721
-}
722
-.glyphicon-pushpin:before {
723
- content: "\e146";
724
-}
725
-.glyphicon-usd:before {
726
- content: "\e148";
727
-}
728
-.glyphicon-gbp:before {
729
- content: "\e149";
730
-}
731
-.glyphicon-sort:before {
732
- content: "\e150";
733
-}
734
-.glyphicon-sort-by-alphabet:before {
735
- content: "\e151";
736
-}
737
-.glyphicon-sort-by-alphabet-alt:before {
738
- content: "\e152";
739
-}
740
-.glyphicon-sort-by-order:before {
741
- content: "\e153";
742
-}
743
-.glyphicon-sort-by-order-alt:before {
744
- content: "\e154";
745
-}
746
-.glyphicon-sort-by-attributes:before {
747
- content: "\e155";
748
-}
749
-.glyphicon-sort-by-attributes-alt:before {
750
- content: "\e156";
751
-}
752
-.glyphicon-unchecked:before {
753
- content: "\e157";
754
-}
755
-.glyphicon-expand:before {
756
- content: "\e158";
757
-}
758
-.glyphicon-collapse-down:before {
759
- content: "\e159";
760
-}
761
-.glyphicon-collapse-up:before {
762
- content: "\e160";
763
-}
764
-.glyphicon-log-in:before {
765
- content: "\e161";
766
-}
767
-.glyphicon-flash:before {
768
- content: "\e162";
769
-}
770
-.glyphicon-log-out:before {
771
- content: "\e163";
772
-}
773
-.glyphicon-new-window:before {
774
- content: "\e164";
775
-}
776
-.glyphicon-record:before {
777
- content: "\e165";
778
-}
779
-.glyphicon-save:before {
780
- content: "\e166";
781
-}
782
-.glyphicon-open:before {
783
- content: "\e167";
784
-}
785
-.glyphicon-saved:before {
786
- content: "\e168";
787
-}
788
-.glyphicon-import:before {
789
- content: "\e169";
790
-}
791
-.glyphicon-export:before {
792
- content: "\e170";
793
-}
794
-.glyphicon-send:before {
795
- content: "\e171";
796
-}
797
-.glyphicon-floppy-disk:before {
798
- content: "\e172";
799
-}
800
-.glyphicon-floppy-saved:before {
801
- content: "\e173";
802
-}
803
-.glyphicon-floppy-remove:before {
804
- content: "\e174";
805
-}
806
-.glyphicon-floppy-save:before {
807
- content: "\e175";
808
-}
809
-.glyphicon-floppy-open:before {
810
- content: "\e176";
811
-}
812
-.glyphicon-credit-card:before {
813
- content: "\e177";
814
-}
815
-.glyphicon-transfer:before {
816
- content: "\e178";
817
-}
818
-.glyphicon-cutlery:before {
819
- content: "\e179";
820
-}
821
-.glyphicon-header:before {
822
- content: "\e180";
823
-}
824
-.glyphicon-compressed:before {
825
- content: "\e181";
826
-}
827
-.glyphicon-earphone:before {
828
- content: "\e182";
829
-}
830
-.glyphicon-phone-alt:before {
831
- content: "\e183";
832
-}
833
-.glyphicon-tower:before {
834
- content: "\e184";
835
-}
836
-.glyphicon-stats:before {
837
- content: "\e185";
838
-}
839
-.glyphicon-sd-video:before {
840
- content: "\e186";
841
-}
842
-.glyphicon-hd-video:before {
843
- content: "\e187";
844
-}
845
-.glyphicon-subtitles:before {
846
- content: "\e188";
847
-}
848
-.glyphicon-sound-stereo:before {
849
- content: "\e189";
850
-}
851
-.glyphicon-sound-dolby:before {
852
- content: "\e190";
853
-}
854
-.glyphicon-sound-5-1:before {
855
- content: "\e191";
856
-}
857
-.glyphicon-sound-6-1:before {
858
- content: "\e192";
859
-}
860
-.glyphicon-sound-7-1:before {
861
- content: "\e193";
862
-}
863
-.glyphicon-copyright-mark:before {
864
- content: "\e194";
865
-}
866
-.glyphicon-registration-mark:before {
867
- content: "\e195";
868
-}
869
-.glyphicon-cloud-download:before {
870
- content: "\e197";
871
-}
872
-.glyphicon-cloud-upload:before {
873
- content: "\e198";
874
-}
875
-.glyphicon-tree-conifer:before {
876
- content: "\e199";
877
-}
878
-.glyphicon-tree-deciduous:before {
879
- content: "\e200";
880
-}
881
-* {
882
- -webkit-box-sizing: border-box;
883
- -moz-box-sizing: border-box;
884
- box-sizing: border-box;
885
-}
886
-*:before,
887
-*:after {
888
- -webkit-box-sizing: border-box;
889
- -moz-box-sizing: border-box;
890
- box-sizing: border-box;
891
-}
892
-html {
893
- font-size: 10px;
894
-
895
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
896
-}
897
-body {
898
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
899
- font-size: 14px;
900
- line-height: 1.42857143;
901
- color: #333;
902
- background-color: #fff;
903
-}
904
-input,
905
-button,
906
-select,
907
-textarea {
908
- font-family: inherit;
909
- font-size: inherit;
910
- line-height: inherit;
911
-}
912
-a {
913
- color: #428bca;
914
- text-decoration: none;
915
-}
916
-a:hover,
917
-a:focus {
918
- color: #2a6496;
919
- text-decoration: underline;
920
-}
921
-a:focus {
922
- outline: thin dotted;
923
- outline: 5px auto -webkit-focus-ring-color;
924
- outline-offset: -2px;
925
-}
926
-figure {
927
- margin: 0;
928
-}
929
-img {
930
- vertical-align: middle;
931
-}
932
-.img-responsive,
933
-.thumbnail > img,
934
-.thumbnail a > img,
935
-.carousel-inner > .item > img,
936
-.carousel-inner > .item > a > img {
937
- display: block;
938
- width: 100% \9;
939
- max-width: 100%;
940
- height: auto;
941
-}
942
-.img-rounded {
943
- border-radius: 6px;
944
-}
945
-.img-thumbnail {
946
- display: inline-block;
947
- width: 100% \9;
948
- max-width: 100%;
949
- height: auto;
950
- padding: 4px;
951
- line-height: 1.42857143;
952
- background-color: #fff;
953
- border: 1px solid #ddd;
954
- border-radius: 4px;
955
- -webkit-transition: all .2s ease-in-out;
956
- -o-transition: all .2s ease-in-out;
957
- transition: all .2s ease-in-out;
958
-}
959
-.img-circle {
960
- border-radius: 50%;
961
-}
962
-hr {
963
- margin-top: 20px;
964
- margin-bottom: 20px;
965
- border: 0;
966
- border-top: 1px solid #eee;
967
-}
968
-.sr-only {
969
- position: absolute;
970
- width: 1px;
971
- height: 1px;
972
- padding: 0;
973
- margin: -1px;
974
- overflow: hidden;
975
- clip: rect(0, 0, 0, 0);
976
- border: 0;
977
-}
978
-.sr-only-focusable:active,
979
-.sr-only-focusable:focus {
980
- position: static;
981
- width: auto;
982
- height: auto;
983
- margin: 0;
984
- overflow: visible;
985
- clip: auto;
986
-}
987
-h1,
988
-h2,
989
-h3,
990
-h4,
991
-h5,
992
-h6,
993
-.h1,
994
-.h2,
995
-.h3,
996
-.h4,
997
-.h5,
998
-.h6 {
999
- font-family: inherit;
1000
- font-weight: 500;
1001
- line-height: 1.1;
1002
- color: inherit;
1003
-}
1004
-h1 small,
1005
-h2 small,
1006
-h3 small,
1007
-h4 small,
1008
-h5 small,
1009
-h6 small,
1010
-.h1 small,
1011
-.h2 small,
1012
-.h3 small,
1013
-.h4 small,
1014
-.h5 small,
1015
-.h6 small,
1016
-h1 .small,
1017
-h2 .small,
1018
-h3 .small,
1019
-h4 .small,
1020
-h5 .small,
1021
-h6 .small,
1022
-.h1 .small,
1023
-.h2 .small,
1024
-.h3 .small,
1025
-.h4 .small,
1026
-.h5 .small,
1027
-.h6 .small {
1028
- font-weight: normal;
1029
- line-height: 1;
1030
- color: #777;
1031
-}
1032
-h1,
1033
-.h1,
1034
-h2,
1035
-.h2,
1036
-h3,
1037
-.h3 {
1038
- margin-top: 20px;
1039
- margin-bottom: 10px;
1040
-}
1041
-h1 small,
1042
-.h1 small,
1043
-h2 small,
1044
-.h2 small,
1045
-h3 small,
1046
-.h3 small,
1047
-h1 .small,
1048
-.h1 .small,
1049
-h2 .small,
1050
-.h2 .small,
1051
-h3 .small,
1052
-.h3 .small {
1053
- font-size: 65%;
1054
-}
1055
-h4,
1056
-.h4,
1057
-h5,
1058
-.h5,
1059
-h6,
1060
-.h6 {
1061
- margin-top: 10px;
1062
- margin-bottom: 10px;
1063
-}
1064
-h4 small,
1065
-.h4 small,
1066
-h5 small,
1067
-.h5 small,
1068
-h6 small,
1069
-.h6 small,
1070
-h4 .small,
1071
-.h4 .small,
1072
-h5 .small,
1073
-.h5 .small,
1074
-h6 .small,
1075
-.h6 .small {
1076
- font-size: 75%;
1077
-}
1078
-h1,
1079
-.h1 {
1080
- font-size: 36px;
1081
-}
1082
-h2,
1083
-.h2 {
1084
- font-size: 30px;
1085
-}
1086
-h3,
1087
-.h3 {
1088
- font-size: 24px;
1089
-}
1090
-h4,
1091
-.h4 {
1092
- font-size: 18px;
1093
-}
1094
-h5,
1095
-.h5 {
1096
- font-size: 14px;
1097
-}
1098
-h6,
1099
-.h6 {
1100
- font-size: 12px;
1101
-}
1102
-p {
1103
- margin: 0 0 10px;
1104
-}
1105
-.lead {
1106
- margin-bottom: 20px;
1107
- font-size: 16px;
1108
- font-weight: 300;
1109
- line-height: 1.4;
1110
-}
1111
-@media (min-width: 768px) {
1112
- .lead {
1113
- font-size: 21px;
1114
- }
1115
-}
1116
-small,
1117
-.small {
1118
- font-size: 85%;
1119
-}
1120
-cite {
1121
- font-style: normal;
1122
-}
1123
-mark,
1124
-.mark {
1125
- padding: .2em;
1126
- background-color: #fcf8e3;
1127
-}
1128
-.text-left {
1129
- text-align: left;
1130
-}
1131
-.text-right {
1132
- text-align: right;
1133
-}
1134
-.text-center {
1135
- text-align: center;
1136
-}
1137
-.text-justify {
1138
- text-align: justify;
1139
-}
1140
-.text-nowrap {
1141
- white-space: nowrap;
1142
-}
1143
-.text-lowercase {
1144
- text-transform: lowercase;
1145
-}
1146
-.text-uppercase {
1147
- text-transform: uppercase;
1148
-}
1149
-.text-capitalize {
1150
- text-transform: capitalize;
1151
-}
1152
-.text-muted {
1153
- color: #777;
1154
-}
1155
-.text-primary {
1156
- color: #428bca;
1157
-}
1158
-a.text-primary:hover {
1159
- color: #3071a9;
1160
-}
1161
-.text-success {
1162
- color: #3c763d;
1163
-}
1164
-a.text-success:hover {
1165
- color: #2b542c;
1166
-}
1167
-.text-info {
1168
- color: #31708f;
1169
-}
1170
-a.text-info:hover {
1171
- color: #245269;
1172
-}
1173
-.text-warning {
1174
- color: #8a6d3b;
1175
-}
1176
-a.text-warning:hover {
1177
- color: #66512c;
1178
-}
1179
-.text-danger {
1180
- color: #a94442;
1181
-}
1182
-a.text-danger:hover {
1183
- color: #843534;
1184
-}
1185
-.bg-primary {
1186
- color: #fff;
1187
- background-color: #428bca;
1188
-}
1189
-a.bg-primary:hover {
1190
- background-color: #3071a9;
1191
-}
1192
-.bg-success {
1193
- background-color: #dff0d8;
1194
-}
1195
-a.bg-success:hover {
1196
- background-color: #c1e2b3;
1197
-}
1198
-.bg-info {
1199
- background-color: #d9edf7;
1200
-}
1201
-a.bg-info:hover {
1202
- background-color: #afd9ee;
1203
-}
1204
-.bg-warning {
1205
- background-color: #fcf8e3;
1206
-}
1207
-a.bg-warning:hover {
1208
- background-color: #f7ecb5;
1209
-}
1210
-.bg-danger {
1211
- background-color: #f2dede;
1212
-}
1213
-a.bg-danger:hover {
1214
- background-color: #e4b9b9;
1215
-}
1216
-.page-header {
1217
- padding-bottom: 9px;
1218
- margin: 40px 0 20px;
1219
- border-bottom: 1px solid #eee;
1220
-}
1221
-ul,
1222
-ol {
1223
- margin-top: 0;
1224
- margin-bottom: 10px;
1225
-}
1226
-ul ul,
1227
-ol ul,
1228
-ul ol,
1229
-ol ol {
1230
- margin-bottom: 0;
1231
-}
1232
-.list-unstyled {
1233
- padding-left: 0;
1234
- list-style: none;
1235
-}
1236
-.list-inline {
1237
- padding-left: 0;
1238
- margin-left: -5px;
1239
- list-style: none;
1240
-}
1241
-.list-inline > li {
1242
- display: inline-block;
1243
- padding-right: 5px;
1244
- padding-left: 5px;
1245
-}
1246
-dl {
1247
- margin-top: 0;
1248
- margin-bottom: 20px;
1249
-}
1250
-dt,
1251
-dd {
1252
- line-height: 1.42857143;
1253
-}
1254
-dt {
1255
- font-weight: bold;
1256
-}
1257
-dd {
1258
- margin-left: 0;
1259
-}
1260
-@media (min-width: 768px) {
1261
- .dl-horizontal dt {
1262
- float: left;
1263
- width: 160px;
1264
- overflow: hidden;
1265
- clear: left;
1266
- text-align: right;
1267
- text-overflow: ellipsis;
1268
- white-space: nowrap;
1269
- }
1270
- .dl-horizontal dd {
1271
- margin-left: 180px;
1272
- }
1273
-}
1274
-abbr[title],
1275
-abbr[data-original-title] {
1276
- cursor: help;
1277
- border-bottom: 1px dotted #777;
1278
-}
1279
-.initialism {
1280
- font-size: 90%;
1281
- text-transform: uppercase;
1282
-}
1283
-blockquote {
1284
- padding: 10px 20px;
1285
- margin: 0 0 20px;
1286
- font-size: 17.5px;
1287
- border-left: 5px solid #eee;
1288
-}
1289
-blockquote p:last-child,
1290
-blockquote ul:last-child,
1291
-blockquote ol:last-child {
1292
- margin-bottom: 0;
1293
-}
1294
-blockquote footer,
1295
-blockquote small,
1296
-blockquote .small {
1297
- display: block;
1298
- font-size: 80%;
1299
- line-height: 1.42857143;
1300
- color: #777;
1301
-}
1302
-blockquote footer:before,
1303
-blockquote small:before,
1304
-blockquote .small:before {
1305
- content: '\2014 \00A0';
1306
-}
1307
-.blockquote-reverse,
1308
-blockquote.pull-right {
1309
- padding-right: 15px;
1310
- padding-left: 0;
1311
- text-align: right;
1312
- border-right: 5px solid #eee;
1313
- border-left: 0;
1314
-}
1315
-.blockquote-reverse footer:before,
1316
-blockquote.pull-right footer:before,
1317
-.blockquote-reverse small:before,
1318
-blockquote.pull-right small:before,
1319
-.blockquote-reverse .small:before,
1320
-blockquote.pull-right .small:before {
1321
- content: '';
1322
-}
1323
-.blockquote-reverse footer:after,
1324
-blockquote.pull-right footer:after,
1325
-.blockquote-reverse small:after,
1326
-blockquote.pull-right small:after,
1327
-.blockquote-reverse .small:after,
1328
-blockquote.pull-right .small:after {
1329
- content: '\00A0 \2014';
1330
-}
1331
-blockquote:before,
1332
-blockquote:after {
1333
- content: "";
1334
-}
1335
-address {
1336
- margin-bottom: 20px;
1337
- font-style: normal;
1338
- line-height: 1.42857143;
1339
-}
1340
-code,
1341
-kbd,
1342
-pre,
1343
-samp {
1344
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1345
-}
1346
-code {
1347
- padding: 2px 4px;
1348
- font-size: 90%;
1349
- color: #c7254e;
1350
- background-color: #f9f2f4;
1351
- border-radius: 4px;
1352
-}
1353
-kbd {
1354
- padding: 2px 4px;
1355
- font-size: 90%;
1356
- color: #fff;
1357
- background-color: #333;
1358
- border-radius: 3px;
1359
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1360
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1361
-}
1362
-kbd kbd {
1363
- padding: 0;
1364
- font-size: 100%;
1365
- -webkit-box-shadow: none;
1366
- box-shadow: none;
1367
-}
1368
-pre {
1369
- display: block;
1370
- padding: 9.5px;
1371
- margin: 0 0 10px;
1372
- font-size: 13px;
1373
- line-height: 1.42857143;
1374
- color: #333;
1375
- word-break: break-all;
1376
- word-wrap: break-word;
1377
- background-color: #f5f5f5;
1378
- border: 1px solid #ccc;
1379
- border-radius: 4px;
1380
-}
1381
-pre code {
1382
- padding: 0;
1383
- font-size: inherit;
1384
- color: inherit;
1385
- white-space: pre-wrap;
1386
- background-color: transparent;
1387
- border-radius: 0;
1388
-}
1389
-.pre-scrollable {
1390
- max-height: 340px;
1391
- overflow-y: scroll;
1392
-}
1393
-.container {
1394
- padding-right: 15px;
1395
- padding-left: 15px;
1396
- margin-right: auto;
1397
- margin-left: auto;
1398
-}
1399
-@media (min-width: 768px) {
1400
- .container {
1401
- width: 750px;
1402
- }
1403
-}
1404
-@media (min-width: 992px) {
1405
- .container {
1406
- width: 970px;
1407
- }
1408
-}
1409
-@media (min-width: 1200px) {
1410
- .container {
1411
- width: 1170px;
1412
- }
1413
-}
1414
-.container-fluid {
1415
- padding-right: 15px;
1416
- padding-left: 15px;
1417
- margin-right: auto;
1418
- margin-left: auto;
1419
-}
1420
-.row {
1421
- margin-right: -15px;
1422
- margin-left: -15px;
1423
-}
1424
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
1425
- position: relative;
1426
- min-height: 1px;
1427
- padding-right: 15px;
1428
- padding-left: 15px;
1429
-}
1430
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
1431
- float: left;
1432
-}
1433
-.col-xs-12 {
1434
- width: 100%;
1435
-}
1436
-.col-xs-11 {
1437
- width: 91.66666667%;
1438
-}
1439
-.col-xs-10 {
1440
- width: 83.33333333%;
1441
-}
1442
-.col-xs-9 {
1443
- width: 75%;
1444
-}
1445
-.col-xs-8 {
1446
- width: 66.66666667%;
1447
-}
1448
-.col-xs-7 {
1449
- width: 58.33333333%;
1450
-}
1451
-.col-xs-6 {
1452
- width: 50%;
1453
-}
1454
-.col-xs-5 {
1455
- width: 41.66666667%;
1456
-}
1457
-.col-xs-4 {
1458
- width: 33.33333333%;
1459
-}
1460
-.col-xs-3 {
1461
- width: 25%;
1462
-}
1463
-.col-xs-2 {
1464
- width: 16.66666667%;
1465
-}
1466
-.col-xs-1 {
1467
- width: 8.33333333%;
1468
-}
1469
-.col-xs-pull-12 {
1470
- right: 100%;
1471
-}
1472
-.col-xs-pull-11 {
1473
- right: 91.66666667%;
1474
-}
1475
-.col-xs-pull-10 {
1476
- right: 83.33333333%;
1477
-}
1478
-.col-xs-pull-9 {
1479
- right: 75%;
1480
-}
1481
-.col-xs-pull-8 {
1482
- right: 66.66666667%;
1483
-}
1484
-.col-xs-pull-7 {
1485
- right: 58.33333333%;
1486
-}
1487
-.col-xs-pull-6 {
1488
- right: 50%;
1489
-}
1490
-.col-xs-pull-5 {
1491
- right: 41.66666667%;
1492
-}
1493
-.col-xs-pull-4 {
1494
- right: 33.33333333%;
1495
-}
1496
-.col-xs-pull-3 {
1497
- right: 25%;
1498
-}
1499
-.col-xs-pull-2 {
1500
- right: 16.66666667%;
1501
-}
1502
-.col-xs-pull-1 {
1503
- right: 8.33333333%;
1504
-}
1505
-.col-xs-pull-0 {
1506
- right: auto;
1507
-}
1508
-.col-xs-push-12 {
1509
- left: 100%;
1510
-}
1511
-.col-xs-push-11 {
1512
- left: 91.66666667%;
1513
-}
1514
-.col-xs-push-10 {
1515
- left: 83.33333333%;
1516
-}
1517
-.col-xs-push-9 {
1518
- left: 75%;
1519
-}
1520
-.col-xs-push-8 {
1521
- left: 66.66666667%;
1522
-}
1523
-.col-xs-push-7 {
1524
- left: 58.33333333%;
1525
-}
1526
-.col-xs-push-6 {
1527
- left: 50%;
1528
-}
1529
-.col-xs-push-5 {
1530
- left: 41.66666667%;
1531
-}
1532
-.col-xs-push-4 {
1533
- left: 33.33333333%;
1534
-}
1535
-.col-xs-push-3 {
1536
- left: 25%;
1537
-}
1538
-.col-xs-push-2 {
1539
- left: 16.66666667%;
1540
-}
1541
-.col-xs-push-1 {
1542
- left: 8.33333333%;
1543
-}
1544
-.col-xs-push-0 {
1545
- left: auto;
1546
-}
1547
-.col-xs-offset-12 {
1548
- margin-left: 100%;
1549
-}
1550
-.col-xs-offset-11 {
1551
- margin-left: 91.66666667%;
1552
-}
1553
-.col-xs-offset-10 {
1554
- margin-left: 83.33333333%;
1555
-}
1556
-.col-xs-offset-9 {
1557
- margin-left: 75%;
1558
-}
1559
-.col-xs-offset-8 {
1560
- margin-left: 66.66666667%;
1561
-}
1562
-.col-xs-offset-7 {
1563
- margin-left: 58.33333333%;
1564
-}
1565
-.col-xs-offset-6 {
1566
- margin-left: 50%;
1567
-}
1568
-.col-xs-offset-5 {
1569
- margin-left: 41.66666667%;
1570
-}
1571
-.col-xs-offset-4 {
1572
- margin-left: 33.33333333%;
1573
-}
1574
-.col-xs-offset-3 {
1575
- margin-left: 25%;
1576
-}
1577
-.col-xs-offset-2 {
1578
- margin-left: 16.66666667%;
1579
-}
1580
-.col-xs-offset-1 {
1581
- margin-left: 8.33333333%;
1582
-}
1583
-.col-xs-offset-0 {
1584
- margin-left: 0;
1585
-}
1586
-@media (min-width: 768px) {
1587
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
1588
- float: left;
1589
- }
1590
- .col-sm-12 {
1591
- width: 100%;
1592
- }
1593
- .col-sm-11 {
1594
- width: 91.66666667%;
1595
- }
1596
- .col-sm-10 {
1597
- width: 83.33333333%;
1598
- }
1599
- .col-sm-9 {
1600
- width: 75%;
1601
- }
1602
- .col-sm-8 {
1603
- width: 66.66666667%;
1604
- }
1605
- .col-sm-7 {
1606
- width: 58.33333333%;
1607
- }
1608
- .col-sm-6 {
1609
- width: 50%;
1610
- }
1611
- .col-sm-5 {
1612
- width: 41.66666667%;
1613
- }
1614
- .col-sm-4 {
1615
- width: 33.33333333%;
1616
- }
1617
- .col-sm-3 {
1618
- width: 25%;
1619
- }
1620
- .col-sm-2 {
1621
- width: 16.66666667%;
1622
- }
1623
- .col-sm-1 {
1624
- width: 8.33333333%;
1625
- }
1626
- .col-sm-pull-12 {
1627
- right: 100%;
1628
- }
1629
- .col-sm-pull-11 {
1630
- right: 91.66666667%;
1631
- }
1632
- .col-sm-pull-10 {
1633
- right: 83.33333333%;
1634
- }
1635
- .col-sm-pull-9 {
1636
- right: 75%;
1637
- }
1638
- .col-sm-pull-8 {
1639
- right: 66.66666667%;
1640
- }
1641
- .col-sm-pull-7 {
1642
- right: 58.33333333%;
1643
- }
1644
- .col-sm-pull-6 {
1645
- right: 50%;
1646
- }
1647
- .col-sm-pull-5 {
1648
- right: 41.66666667%;
1649
- }
1650
- .col-sm-pull-4 {
1651
- right: 33.33333333%;
1652
- }
1653
- .col-sm-pull-3 {
1654
- right: 25%;
1655
- }
1656
- .col-sm-pull-2 {
1657
- right: 16.66666667%;
1658
- }
1659
- .col-sm-pull-1 {
1660
- right: 8.33333333%;
1661
- }
1662
- .col-sm-pull-0 {
1663
- right: auto;
1664
- }
1665
- .col-sm-push-12 {
1666
- left: 100%;
1667
- }
1668
- .col-sm-push-11 {
1669
- left: 91.66666667%;
1670
- }
1671
- .col-sm-push-10 {
1672
- left: 83.33333333%;
1673
- }
1674
- .col-sm-push-9 {
1675
- left: 75%;
1676
- }
1677
- .col-sm-push-8 {
1678
- left: 66.66666667%;
1679
- }
1680
- .col-sm-push-7 {
1681
- left: 58.33333333%;
1682
- }
1683
- .col-sm-push-6 {
1684
- left: 50%;
1685
- }
1686
- .col-sm-push-5 {
1687
- left: 41.66666667%;
1688
- }
1689
- .col-sm-push-4 {
1690
- left: 33.33333333%;
1691
- }
1692
- .col-sm-push-3 {
1693
- left: 25%;
1694
- }
1695
- .col-sm-push-2 {
1696
- left: 16.66666667%;
1697
- }
1698
- .col-sm-push-1 {
1699
- left: 8.33333333%;
1700
- }
1701
- .col-sm-push-0 {
1702
- left: auto;
1703
- }
1704
- .col-sm-offset-12 {
1705
- margin-left: 100%;
1706
- }
1707
- .col-sm-offset-11 {
1708
- margin-left: 91.66666667%;
1709
- }
1710
- .col-sm-offset-10 {
1711
- margin-left: 83.33333333%;
1712
- }
1713
- .col-sm-offset-9 {
1714
- margin-left: 75%;
1715
- }
1716
- .col-sm-offset-8 {
1717
- margin-left: 66.66666667%;
1718
- }
1719
- .col-sm-offset-7 {
1720
- margin-left: 58.33333333%;
1721
- }
1722
- .col-sm-offset-6 {
1723
- margin-left: 50%;
1724
- }
1725
- .col-sm-offset-5 {
1726
- margin-left: 41.66666667%;
1727
- }
1728
- .col-sm-offset-4 {
1729
- margin-left: 33.33333333%;
1730
- }
1731
- .col-sm-offset-3 {
1732
- margin-left: 25%;
1733
- }
1734
- .col-sm-offset-2 {
1735
- margin-left: 16.66666667%;
1736
- }
1737
- .col-sm-offset-1 {
1738
- margin-left: 8.33333333%;
1739
- }
1740
- .col-sm-offset-0 {
1741
- margin-left: 0;
1742
- }
1743
-}
1744
-@media (min-width: 992px) {
1745
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1746
- float: left;
1747
- }
1748
- .col-md-12 {
1749
- width: 100%;
1750
- }
1751
- .col-md-11 {
1752
- width: 91.66666667%;
1753
- }
1754
- .col-md-10 {
1755
- width: 83.33333333%;
1756
- }
1757
- .col-md-9 {
1758
- width: 75%;
1759
- }
1760
- .col-md-8 {
1761
- width: 66.66666667%;
1762
- }
1763
- .col-md-7 {
1764
- width: 58.33333333%;
1765
- }
1766
- .col-md-6 {
1767
- width: 50%;
1768
- }
1769
- .col-md-5 {
1770
- width: 41.66666667%;
1771
- }
1772
- .col-md-4 {
1773
- width: 33.33333333%;
1774
- }
1775
- .col-md-3 {
1776
- width: 25%;
1777
- }
1778
- .col-md-2 {
1779
- width: 16.66666667%;
1780
- }
1781
- .col-md-1 {
1782
- width: 8.33333333%;
1783
- }
1784
- .col-md-pull-12 {
1785
- right: 100%;
1786
- }
1787
- .col-md-pull-11 {
1788
- right: 91.66666667%;
1789
- }
1790
- .col-md-pull-10 {
1791
- right: 83.33333333%;
1792
- }
1793
- .col-md-pull-9 {
1794
- right: 75%;
1795
- }
1796
- .col-md-pull-8 {
1797
- right: 66.66666667%;
1798
- }
1799
- .col-md-pull-7 {
1800
- right: 58.33333333%;
1801
- }
1802
- .col-md-pull-6 {
1803
- right: 50%;
1804
- }
1805
- .col-md-pull-5 {
1806
- right: 41.66666667%;
1807
- }
1808
- .col-md-pull-4 {
1809
- right: 33.33333333%;
1810
- }
1811
- .col-md-pull-3 {
1812
- right: 25%;
1813
- }
1814
- .col-md-pull-2 {
1815
- right: 16.66666667%;
1816
- }
1817
- .col-md-pull-1 {
1818
- right: 8.33333333%;
1819
- }
1820
- .col-md-pull-0 {
1821
- right: auto;
1822
- }
1823
- .col-md-push-12 {
1824
- left: 100%;
1825
- }
1826
- .col-md-push-11 {
1827
- left: 91.66666667%;
1828
- }
1829
- .col-md-push-10 {
1830
- left: 83.33333333%;
1831
- }
1832
- .col-md-push-9 {
1833
- left: 75%;
1834
- }
1835
- .col-md-push-8 {
1836
- left: 66.66666667%;
1837
- }
1838
- .col-md-push-7 {
1839
- left: 58.33333333%;
1840
- }
1841
- .col-md-push-6 {
1842
- left: 50%;
1843
- }
1844
- .col-md-push-5 {
1845
- left: 41.66666667%;
1846
- }
1847
- .col-md-push-4 {
1848
- left: 33.33333333%;
1849
- }
1850
- .col-md-push-3 {
1851
- left: 25%;
1852
- }
1853
- .col-md-push-2 {
1854
- left: 16.66666667%;
1855
- }
1856
- .col-md-push-1 {
1857
- left: 8.33333333%;
1858
- }
1859
- .col-md-push-0 {
1860
- left: auto;
1861
- }
1862
- .col-md-offset-12 {
1863
- margin-left: 100%;
1864
- }
1865
- .col-md-offset-11 {
1866
- margin-left: 91.66666667%;
1867
- }
1868
- .col-md-offset-10 {
1869
- margin-left: 83.33333333%;
1870
- }
1871
- .col-md-offset-9 {
1872
- margin-left: 75%;
1873
- }
1874
- .col-md-offset-8 {
1875
- margin-left: 66.66666667%;
1876
- }
1877
- .col-md-offset-7 {
1878
- margin-left: 58.33333333%;
1879
- }
1880
- .col-md-offset-6 {
1881
- margin-left: 50%;
1882
- }
1883
- .col-md-offset-5 {
1884
- margin-left: 41.66666667%;
1885
- }
1886
- .col-md-offset-4 {
1887
- margin-left: 33.33333333%;
1888
- }
1889
- .col-md-offset-3 {
1890
- margin-left: 25%;
1891
- }
1892
- .col-md-offset-2 {
1893
- margin-left: 16.66666667%;
1894
- }
1895
- .col-md-offset-1 {
1896
- margin-left: 8.33333333%;
1897
- }
1898
- .col-md-offset-0 {
1899
- margin-left: 0;
1900
- }
1901
-}
1902
-@media (min-width: 1200px) {
1903
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
1904
- float: left;
1905
- }
1906
- .col-lg-12 {
1907
- width: 100%;
1908
- }
1909
- .col-lg-11 {
1910
- width: 91.66666667%;
1911
- }
1912
- .col-lg-10 {
1913
- width: 83.33333333%;
1914
- }
1915
- .col-lg-9 {
1916
- width: 75%;
1917
- }
1918
- .col-lg-8 {
1919
- width: 66.66666667%;
1920
- }
1921
- .col-lg-7 {
1922
- width: 58.33333333%;
1923
- }
1924
- .col-lg-6 {
1925
- width: 50%;
1926
- }
1927
- .col-lg-5 {
1928
- width: 41.66666667%;
1929
- }
1930
- .col-lg-4 {
1931
- width: 33.33333333%;
1932
- }
1933
- .col-lg-3 {
1934
- width: 25%;
1935
- }
1936
- .col-lg-2 {
1937
- width: 16.66666667%;
1938
- }
1939
- .col-lg-1 {
1940
- width: 8.33333333%;
1941
- }
1942
- .col-lg-pull-12 {
1943
- right: 100%;
1944
- }
1945
- .col-lg-pull-11 {
1946
- right: 91.66666667%;
1947
- }
1948
- .col-lg-pull-10 {
1949
- right: 83.33333333%;
1950
- }
1951
- .col-lg-pull-9 {
1952
- right: 75%;
1953
- }
1954
- .col-lg-pull-8 {
1955
- right: 66.66666667%;
1956
- }
1957
- .col-lg-pull-7 {
1958
- right: 58.33333333%;
1959
- }
1960
- .col-lg-pull-6 {
1961
- right: 50%;
1962
- }
1963
- .col-lg-pull-5 {
1964
- right: 41.66666667%;
1965
- }
1966
- .col-lg-pull-4 {
1967
- right: 33.33333333%;
1968
- }
1969
- .col-lg-pull-3 {
1970
- right: 25%;
1971
- }
1972
- .col-lg-pull-2 {
1973
- right: 16.66666667%;
1974
- }
1975
- .col-lg-pull-1 {
1976
- right: 8.33333333%;
1977
- }
1978
- .col-lg-pull-0 {
1979
- right: auto;
1980
- }
1981
- .col-lg-push-12 {
1982
- left: 100%;
1983
- }
1984
- .col-lg-push-11 {
1985
- left: 91.66666667%;
1986
- }
1987
- .col-lg-push-10 {
1988
- left: 83.33333333%;
1989
- }
1990
- .col-lg-push-9 {
1991
- left: 75%;
1992
- }
1993
- .col-lg-push-8 {
1994
- left: 66.66666667%;
1995
- }
1996
- .col-lg-push-7 {
1997
- left: 58.33333333%;
1998
- }
1999
- .col-lg-push-6 {
2000
- left: 50%;
2001
- }
2002
- .col-lg-push-5 {
2003
- left: 41.66666667%;
2004
- }
2005
- .col-lg-push-4 {
2006
- left: 33.33333333%;
2007
- }
2008
- .col-lg-push-3 {
2009
- left: 25%;
2010
- }
2011
- .col-lg-push-2 {
2012
- left: 16.66666667%;
2013
- }
2014
- .col-lg-push-1 {
2015
- left: 8.33333333%;
2016
- }
2017
- .col-lg-push-0 {
2018
- left: auto;
2019
- }
2020
- .col-lg-offset-12 {
2021
- margin-left: 100%;
2022
- }
2023
- .col-lg-offset-11 {
2024
- margin-left: 91.66666667%;
2025
- }
2026
- .col-lg-offset-10 {
2027
- margin-left: 83.33333333%;
2028
- }
2029
- .col-lg-offset-9 {
2030
- margin-left: 75%;
2031
- }
2032
- .col-lg-offset-8 {
2033
- margin-left: 66.66666667%;
2034
- }
2035
- .col-lg-offset-7 {
2036
- margin-left: 58.33333333%;
2037
- }
2038
- .col-lg-offset-6 {
2039
- margin-left: 50%;
2040
- }
2041
- .col-lg-offset-5 {
2042
- margin-left: 41.66666667%;
2043
- }
2044
- .col-lg-offset-4 {
2045
- margin-left: 33.33333333%;
2046
- }
2047
- .col-lg-offset-3 {
2048
- margin-left: 25%;
2049
- }
2050
- .col-lg-offset-2 {
2051
- margin-left: 16.66666667%;
2052
- }
2053
- .col-lg-offset-1 {
2054
- margin-left: 8.33333333%;
2055
- }
2056
- .col-lg-offset-0 {
2057
- margin-left: 0;
2058
- }
2059
-}
2060
-table {
2061
- background-color: transparent;
2062
-}
2063
-th {
2064
- text-align: left;
2065
-}
2066
-.table {
2067
- width: 100%;
2068
- max-width: 100%;
2069
- margin-bottom: 20px;
2070
-}
2071
-.table > thead > tr > th,
2072
-.table > tbody > tr > th,
2073
-.table > tfoot > tr > th,
2074
-.table > thead > tr > td,
2075
-.table > tbody > tr > td,
2076
-.table > tfoot > tr > td {
2077
- padding: 8px;
2078
- line-height: 1.42857143;
2079
- vertical-align: top;
2080
- border-top: 1px solid #ddd;
2081
-}
2082
-.table > thead > tr > th {
2083
- vertical-align: bottom;
2084
- border-bottom: 2px solid #ddd;
2085
-}
2086
-.table > caption + thead > tr:first-child > th,
2087
-.table > colgroup + thead > tr:first-child > th,
2088
-.table > thead:first-child > tr:first-child > th,
2089
-.table > caption + thead > tr:first-child > td,
2090
-.table > colgroup + thead > tr:first-child > td,
2091
-.table > thead:first-child > tr:first-child > td {
2092
- border-top: 0;
2093
-}
2094
-.table > tbody + tbody {
2095
- border-top: 2px solid #ddd;
2096
-}
2097
-.table .table {
2098
- background-color: #fff;
2099
-}
2100
-.table-condensed > thead > tr > th,
2101
-.table-condensed > tbody > tr > th,
2102
-.table-condensed > tfoot > tr > th,
2103
-.table-condensed > thead > tr > td,
2104
-.table-condensed > tbody > tr > td,
2105
-.table-condensed > tfoot > tr > td {
2106
- padding: 5px;
2107
-}
2108
-.table-bordered {
2109
- border: 1px solid #ddd;
2110
-}
2111
-.table-bordered > thead > tr > th,
2112
-.table-bordered > tbody > tr > th,
2113
-.table-bordered > tfoot > tr > th,
2114
-.table-bordered > thead > tr > td,
2115
-.table-bordered > tbody > tr > td,
2116
-.table-bordered > tfoot > tr > td {
2117
- border: 1px solid #ddd;
2118
-}
2119
-.table-bordered > thead > tr > th,
2120
-.table-bordered > thead > tr > td {
2121
- border-bottom-width: 2px;
2122
-}
2123
-.table-striped > tbody > tr:nth-child(odd) > td,
2124
-.table-striped > tbody > tr:nth-child(odd) > th {
2125
- background-color: #f9f9f9;
2126
-}
2127
-.table-hover > tbody > tr:hover > td,
2128
-.table-hover > tbody > tr:hover > th {
2129
- background-color: #f5f5f5;
2130
-}
2131
-table col[class*="col-"] {
2132
- position: static;
2133
- display: table-column;
2134
- float: none;
2135
-}
2136
-table td[class*="col-"],
2137
-table th[class*="col-"] {
2138
- position: static;
2139
- display: table-cell;
2140
- float: none;
2141
-}
2142
-.table > thead > tr > td.active,
2143
-.table > tbody > tr > td.active,
2144
-.table > tfoot > tr > td.active,
2145
-.table > thead > tr > th.active,
2146
-.table > tbody > tr > th.active,
2147
-.table > tfoot > tr > th.active,
2148
-.table > thead > tr.active > td,
2149
-.table > tbody > tr.active > td,
2150
-.table > tfoot > tr.active > td,
2151
-.table > thead > tr.active > th,
2152
-.table > tbody > tr.active > th,
2153
-.table > tfoot > tr.active > th {
2154
- background-color: #f5f5f5;
2155
-}
2156
-.table-hover > tbody > tr > td.active:hover,
2157
-.table-hover > tbody > tr > th.active:hover,
2158
-.table-hover > tbody > tr.active:hover > td,
2159
-.table-hover > tbody > tr:hover > .active,
2160
-.table-hover > tbody > tr.active:hover > th {
2161
- background-color: #e8e8e8;
2162
-}
2163
-.table > thead > tr > td.success,
2164
-.table > tbody > tr > td.success,
2165
-.table > tfoot > tr > td.success,
2166
-.table > thead > tr > th.success,
2167
-.table > tbody > tr > th.success,
2168
-.table > tfoot > tr > th.success,
2169
-.table > thead > tr.success > td,
2170
-.table > tbody > tr.success > td,
2171
-.table > tfoot > tr.success > td,
2172
-.table > thead > tr.success > th,
2173
-.table > tbody > tr.success > th,
2174
-.table > tfoot > tr.success > th {
2175
- background-color: #dff0d8;
2176
-}
2177
-.table-hover > tbody > tr > td.success:hover,
2178
-.table-hover > tbody > tr > th.success:hover,
2179
-.table-hover > tbody > tr.success:hover > td,
2180
-.table-hover > tbody > tr:hover > .success,
2181
-.table-hover > tbody > tr.success:hover > th {
2182
- background-color: #d0e9c6;
2183
-}
2184
-.table > thead > tr > td.info,
2185
-.table > tbody > tr > td.info,
2186
-.table > tfoot > tr > td.info,
2187
-.table > thead > tr > th.info,
2188
-.table > tbody > tr > th.info,
2189
-.table > tfoot > tr > th.info,
2190
-.table > thead > tr.info > td,
2191
-.table > tbody > tr.info > td,
2192
-.table > tfoot > tr.info > td,
2193
-.table > thead > tr.info > th,
2194
-.table > tbody > tr.info > th,
2195
-.table > tfoot > tr.info > th {
2196
- background-color: #d9edf7;
2197
-}
2198
-.table-hover > tbody > tr > td.info:hover,
2199
-.table-hover > tbody > tr > th.info:hover,
2200
-.table-hover > tbody > tr.info:hover > td,
2201
-.table-hover > tbody > tr:hover > .info,
2202
-.table-hover > tbody > tr.info:hover > th {
2203
- background-color: #c4e3f3;
2204
-}
2205
-.table > thead > tr > td.warning,
2206
-.table > tbody > tr > td.warning,
2207
-.table > tfoot > tr > td.warning,
2208
-.table > thead > tr > th.warning,
2209
-.table > tbody > tr > th.warning,
2210
-.table > tfoot > tr > th.warning,
2211
-.table > thead > tr.warning > td,
2212
-.table > tbody > tr.warning > td,
2213
-.table > tfoot > tr.warning > td,
2214
-.table > thead > tr.warning > th,
2215
-.table > tbody > tr.warning > th,
2216
-.table > tfoot > tr.warning > th {
2217
- background-color: #fcf8e3;
2218
-}
2219
-.table-hover > tbody > tr > td.warning:hover,
2220
-.table-hover > tbody > tr > th.warning:hover,
2221
-.table-hover > tbody > tr.warning:hover > td,
2222
-.table-hover > tbody > tr:hover > .warning,
2223
-.table-hover > tbody > tr.warning:hover > th {
2224
- background-color: #faf2cc;
2225
-}
2226
-.table > thead > tr > td.danger,
2227
-.table > tbody > tr > td.danger,
2228
-.table > tfoot > tr > td.danger,
2229
-.table > thead > tr > th.danger,
2230
-.table > tbody > tr > th.danger,
2231
-.table > tfoot > tr > th.danger,
2232
-.table > thead > tr.danger > td,
2233
-.table > tbody > tr.danger > td,
2234
-.table > tfoot > tr.danger > td,
2235
-.table > thead > tr.danger > th,
2236
-.table > tbody > tr.danger > th,
2237
-.table > tfoot > tr.danger > th {
2238
- background-color: #f2dede;
2239
-}
2240
-.table-hover > tbody > tr > td.danger:hover,
2241
-.table-hover > tbody > tr > th.danger:hover,
2242
-.table-hover > tbody > tr.danger:hover > td,
2243
-.table-hover > tbody > tr:hover > .danger,
2244
-.table-hover > tbody > tr.danger:hover > th {
2245
- background-color: #ebcccc;
2246
-}
2247
-@media screen and (max-width: 767px) {
2248
- .table-responsive {
2249
- width: 100%;
2250
- margin-bottom: 15px;
2251
- overflow-x: auto;
2252
- overflow-y: hidden;
2253
- -webkit-overflow-scrolling: touch;
2254
- -ms-overflow-style: -ms-autohiding-scrollbar;
2255
- border: 1px solid #ddd;
2256
- }
2257
- .table-responsive > .table {
2258
- margin-bottom: 0;
2259
- }
2260
- .table-responsive > .table > thead > tr > th,
2261
- .table-responsive > .table > tbody > tr > th,
2262
- .table-responsive > .table > tfoot > tr > th,
2263
- .table-responsive > .table > thead > tr > td,
2264
- .table-responsive > .table > tbody > tr > td,
2265
- .table-responsive > .table > tfoot > tr > td {
2266
- white-space: nowrap;
2267
- }
2268
- .table-responsive > .table-bordered {
2269
- border: 0;
2270
- }
2271
- .table-responsive > .table-bordered > thead > tr > th:first-child,
2272
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
2273
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2274
- .table-responsive > .table-bordered > thead > tr > td:first-child,
2275
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
2276
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2277
- border-left: 0;
2278
- }
2279
- .table-responsive > .table-bordered > thead > tr > th:last-child,
2280
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
2281
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2282
- .table-responsive > .table-bordered > thead > tr > td:last-child,
2283
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
2284
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2285
- border-right: 0;
2286
- }
2287
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
2288
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2289
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
2290
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2291
- border-bottom: 0;
2292
- }
2293
-}
2294
-fieldset {
2295
- min-width: 0;
2296
- padding: 0;
2297
- margin: 0;
2298
- border: 0;
2299
-}
2300
-legend {
2301
- display: block;
2302
- width: 100%;
2303
- padding: 0;
2304
- margin-bottom: 20px;
2305
- font-size: 21px;
2306
- line-height: inherit;
2307
- color: #333;
2308
- border: 0;
2309
- border-bottom: 1px solid #e5e5e5;
2310
-}
2311
-label {
2312
- display: inline-block;
2313
- max-width: 100%;
2314
- margin-bottom: 5px;
2315
- font-weight: bold;
2316
-}
2317
-input[type="search"] {
2318
- -webkit-box-sizing: border-box;
2319
- -moz-box-sizing: border-box;
2320
- box-sizing: border-box;
2321
-}
2322
-input[type="radio"],
2323
-input[type="checkbox"] {
2324
- margin: 4px 0 0;
2325
- margin-top: 1px \9;
2326
- line-height: normal;
2327
-}
2328
-input[type="file"] {
2329
- display: block;
2330
-}
2331
-input[type="range"] {
2332
- display: block;
2333
- width: 100%;
2334
-}
2335
-select[multiple],
2336
-select[size] {
2337
- height: auto;
2338
-}
2339
-input[type="file"]:focus,
2340
-input[type="radio"]:focus,
2341
-input[type="checkbox"]:focus {
2342
- outline: thin dotted;
2343
- outline: 5px auto -webkit-focus-ring-color;
2344
- outline-offset: -2px;
2345
-}
2346
-output {
2347
- display: block;
2348
- padding-top: 7px;
2349
- font-size: 14px;
2350
- line-height: 1.42857143;
2351
- color: #555;
2352
-}
2353
-.form-control {
2354
- display: block;
2355
- width: 100%;
2356
- height: 34px;
2357
- padding: 6px 12px;
2358
- font-size: 14px;
2359
- line-height: 1.42857143;
2360
- color: #555;
2361
- background-color: #fff;
2362
- background-image: none;
2363
- border: 1px solid #ccc;
2364
- border-radius: 4px;
2365
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2366
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2367
- -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
2368
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2369
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2370
-}
2371
-.form-control:focus {
2372
- border-color: #66afe9;
2373
- outline: 0;
2374
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2375
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2376
-}
2377
-.form-control::-moz-placeholder {
2378
- color: #777;
2379
- opacity: 1;
2380
-}
2381
-.form-control:-ms-input-placeholder {
2382
- color: #777;
2383
-}
2384
-.form-control::-webkit-input-placeholder {
2385
- color: #777;
2386
-}
2387
-.form-control[disabled],
2388
-.form-control[readonly],
2389
-fieldset[disabled] .form-control {
2390
- cursor: not-allowed;
2391
- background-color: #eee;
2392
- opacity: 1;
2393
-}
2394
-textarea.form-control {
2395
- height: auto;
2396
-}
2397
-input[type="search"] {
2398
- -webkit-appearance: none;
2399
-}
2400
-input[type="date"],
2401
-input[type="time"],
2402
-input[type="datetime-local"],
2403
-input[type="month"] {
2404
- line-height: 34px;
2405
- line-height: 1.42857143 \0;
2406
-}
2407
-input[type="date"].input-sm,
2408
-input[type="time"].input-sm,
2409
-input[type="datetime-local"].input-sm,
2410
-input[type="month"].input-sm {
2411
- line-height: 30px;
2412
-}
2413
-input[type="date"].input-lg,
2414
-input[type="time"].input-lg,
2415
-input[type="datetime-local"].input-lg,
2416
-input[type="month"].input-lg {
2417
- line-height: 46px;
2418
-}
2419
-.form-group {
2420
- margin-bottom: 15px;
2421
-}
2422
-.radio,
2423
-.checkbox {
2424
- position: relative;
2425
- display: block;
2426
- min-height: 20px;
2427
- margin-top: 10px;
2428
- margin-bottom: 10px;
2429
-}
2430
-.radio label,
2431
-.checkbox label {
2432
- padding-left: 20px;
2433
- margin-bottom: 0;
2434
- font-weight: normal;
2435
- cursor: pointer;
2436
-}
2437
-.radio input[type="radio"],
2438
-.radio-inline input[type="radio"],
2439
-.checkbox input[type="checkbox"],
2440
-.checkbox-inline input[type="checkbox"] {
2441
- position: absolute;
2442
- margin-top: 4px \9;
2443
- margin-left: -20px;
2444
-}
2445
-.radio + .radio,
2446
-.checkbox + .checkbox {
2447
- margin-top: -5px;
2448
-}
2449
-.radio-inline,
2450
-.checkbox-inline {
2451
- display: inline-block;
2452
- padding-left: 20px;
2453
- margin-bottom: 0;
2454
- font-weight: normal;
2455
- vertical-align: middle;
2456
- cursor: pointer;
2457
-}
2458
-.radio-inline + .radio-inline,
2459
-.checkbox-inline + .checkbox-inline {
2460
- margin-top: 0;
2461
- margin-left: 10px;
2462
-}
2463
-input[type="radio"][disabled],
2464
-input[type="checkbox"][disabled],
2465
-input[type="radio"].disabled,
2466
-input[type="checkbox"].disabled,
2467
-fieldset[disabled] input[type="radio"],
2468
-fieldset[disabled] input[type="checkbox"] {
2469
- cursor: not-allowed;
2470
-}
2471
-.radio-inline.disabled,
2472
-.checkbox-inline.disabled,
2473
-fieldset[disabled] .radio-inline,
2474
-fieldset[disabled] .checkbox-inline {
2475
- cursor: not-allowed;
2476
-}
2477
-.radio.disabled label,
2478
-.checkbox.disabled label,
2479
-fieldset[disabled] .radio label,
2480
-fieldset[disabled] .checkbox label {
2481
- cursor: not-allowed;
2482
-}
2483
-.form-control-static {
2484
- padding-top: 7px;
2485
- padding-bottom: 7px;
2486
- margin-bottom: 0;
2487
-}
2488
-.form-control-static.input-lg,
2489
-.form-control-static.input-sm {
2490
- padding-right: 0;
2491
- padding-left: 0;
2492
-}
2493
-.input-sm,
2494
-.form-horizontal .form-group-sm .form-control {
2495
- height: 30px;
2496
- padding: 5px 10px;
2497
- font-size: 12px;
2498
- line-height: 1.5;
2499
- border-radius: 3px;
2500
-}
2501
-select.input-sm {
2502
- height: 30px;
2503
- line-height: 30px;
2504
-}
2505
-textarea.input-sm,
2506
-select[multiple].input-sm {
2507
- height: auto;
2508
-}
2509
-.input-lg,
2510
-.form-horizontal .form-group-lg .form-control {
2511
- height: 46px;
2512
- padding: 10px 16px;
2513
- font-size: 18px;
2514
- line-height: 1.33;
2515
- border-radius: 6px;
2516
-}
2517
-select.input-lg {
2518
- height: 46px;
2519
- line-height: 46px;
2520
-}
2521
-textarea.input-lg,
2522
-select[multiple].input-lg {
2523
- height: auto;
2524
-}
2525
-.has-feedback {
2526
- position: relative;
2527
-}
2528
-.has-feedback .form-control {
2529
- padding-right: 42.5px;
2530
-}
2531
-.form-control-feedback {
2532
- position: absolute;
2533
- top: 25px;
2534
- right: 0;
2535
- z-index: 2;
2536
- display: block;
2537
- width: 34px;
2538
- height: 34px;
2539
- line-height: 34px;
2540
- text-align: center;
2541
-}
2542
-.input-lg + .form-control-feedback {
2543
- width: 46px;
2544
- height: 46px;
2545
- line-height: 46px;
2546
-}
2547
-.input-sm + .form-control-feedback {
2548
- width: 30px;
2549
- height: 30px;
2550
- line-height: 30px;
2551
-}
2552
-.has-success .help-block,
2553
-.has-success .control-label,
2554
-.has-success .radio,
2555
-.has-success .checkbox,
2556
-.has-success .radio-inline,
2557
-.has-success .checkbox-inline {
2558
- color: #3c763d;
2559
-}
2560
-.has-success .form-control {
2561
- border-color: #3c763d;
2562
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2563
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2564
-}
2565
-.has-success .form-control:focus {
2566
- border-color: #2b542c;
2567
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2568
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2569
-}
2570
-.has-success .input-group-addon {
2571
- color: #3c763d;
2572
- background-color: #dff0d8;
2573
- border-color: #3c763d;
2574
-}
2575
-.has-success .form-control-feedback {
2576
- color: #3c763d;
2577
-}
2578
-.has-warning .help-block,
2579
-.has-warning .control-label,
2580
-.has-warning .radio,
2581
-.has-warning .checkbox,
2582
-.has-warning .radio-inline,
2583
-.has-warning .checkbox-inline {
2584
- color: #8a6d3b;
2585
-}
2586
-.has-warning .form-control {
2587
- border-color: #8a6d3b;
2588
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2589
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2590
-}
2591
-.has-warning .form-control:focus {
2592
- border-color: #66512c;
2593
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2594
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2595
-}
2596
-.has-warning .input-group-addon {
2597
- color: #8a6d3b;
2598
- background-color: #fcf8e3;
2599
- border-color: #8a6d3b;
2600
-}
2601
-.has-warning .form-control-feedback {
2602
- color: #8a6d3b;
2603
-}
2604
-.has-error .help-block,
2605
-.has-error .control-label,
2606
-.has-error .radio,
2607
-.has-error .checkbox,
2608
-.has-error .radio-inline,
2609
-.has-error .checkbox-inline {
2610
- color: #a94442;
2611
-}
2612
-.has-error .form-control {
2613
- border-color: #a94442;
2614
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2615
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2616
-}
2617
-.has-error .form-control:focus {
2618
- border-color: #843534;
2619
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2620
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2621
-}
2622
-.has-error .input-group-addon {
2623
- color: #a94442;
2624
- background-color: #f2dede;
2625
- border-color: #a94442;
2626
-}
2627
-.has-error .form-control-feedback {
2628
- color: #a94442;
2629
-}
2630
-.has-feedback label.sr-only ~ .form-control-feedback {
2631
- top: 0;
2632
-}
2633
-.help-block {
2634
- display: block;
2635
- margin-top: 5px;
2636
- margin-bottom: 10px;
2637
- color: #737373;
2638
-}
2639
-@media (min-width: 768px) {
2640
- .form-inline .form-group {
2641
- display: inline-block;
2642
- margin-bottom: 0;
2643
- vertical-align: middle;
2644
- }
2645
- .form-inline .form-control {
2646
- display: inline-block;
2647
- width: auto;
2648
- vertical-align: middle;
2649
- }
2650
- .form-inline .input-group {
2651
- display: inline-table;
2652
- vertical-align: middle;
2653
- }
2654
- .form-inline .input-group .input-group-addon,
2655
- .form-inline .input-group .input-group-btn,
2656
- .form-inline .input-group .form-control {
2657
- width: auto;
2658
- }
2659
- .form-inline .input-group > .form-control {
2660
- width: 100%;
2661
- }
2662
- .form-inline .control-label {
2663
- margin-bottom: 0;
2664
- vertical-align: middle;
2665
- }
2666
- .form-inline .radio,
2667
- .form-inline .checkbox {
2668
- display: inline-block;
2669
- margin-top: 0;
2670
- margin-bottom: 0;
2671
- vertical-align: middle;
2672
- }
2673
- .form-inline .radio label,
2674
- .form-inline .checkbox label {
2675
- padding-left: 0;
2676
- }
2677
- .form-inline .radio input[type="radio"],
2678
- .form-inline .checkbox input[type="checkbox"] {
2679
- position: relative;
2680
- margin-left: 0;
2681
- }
2682
- .form-inline .has-feedback .form-control-feedback {
2683
- top: 0;
2684
- }
2685
-}
2686
-.form-horizontal .radio,
2687
-.form-horizontal .checkbox,
2688
-.form-horizontal .radio-inline,
2689
-.form-horizontal .checkbox-inline {
2690
- padding-top: 7px;
2691
- margin-top: 0;
2692
- margin-bottom: 0;
2693
-}
2694
-.form-horizontal .radio,
2695
-.form-horizontal .checkbox {
2696
- min-height: 27px;
2697
-}
2698
-.form-horizontal .form-group {
2699
- margin-right: -15px;
2700
- margin-left: -15px;
2701
-}
2702
-@media (min-width: 768px) {
2703
- .form-horizontal .control-label {
2704
- padding-top: 7px;
2705
- margin-bottom: 0;
2706
- text-align: right;
2707
- }
2708
-}
2709
-.form-horizontal .has-feedback .form-control-feedback {
2710
- top: 0;
2711
- right: 15px;
2712
-}
2713
-@media (min-width: 768px) {
2714
- .form-horizontal .form-group-lg .control-label {
2715
- padding-top: 14.3px;
2716
- }
2717
-}
2718
-@media (min-width: 768px) {
2719
- .form-horizontal .form-group-sm .control-label {
2720
- padding-top: 6px;
2721
- }
2722
-}
2723
-.btn {
2724
- display: inline-block;
2725
- padding: 6px 12px;
2726
- margin-bottom: 0;
2727
- font-size: 14px;
2728
- font-weight: normal;
2729
- line-height: 1.42857143;
2730
- text-align: center;
2731
- white-space: nowrap;
2732
- vertical-align: middle;
2733
- cursor: pointer;
2734
- -webkit-user-select: none;
2735
- -moz-user-select: none;
2736
- -ms-user-select: none;
2737
- user-select: none;
2738
- background-image: none;
2739
- border: 1px solid transparent;
2740
- border-radius: 4px;
2741
-}
2742
-.btn:focus,
2743
-.btn:active:focus,
2744
-.btn.active:focus {
2745
- outline: thin dotted;
2746
- outline: 5px auto -webkit-focus-ring-color;
2747
- outline-offset: -2px;
2748
-}
2749
-.btn:hover,
2750
-.btn:focus {
2751
- color: #333;
2752
- text-decoration: none;
2753
-}
2754
-.btn:active,
2755
-.btn.active {
2756
- background-image: none;
2757
- outline: 0;
2758
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2759
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2760
-}
2761
-.btn.disabled,
2762
-.btn[disabled],
2763
-fieldset[disabled] .btn {
2764
- pointer-events: none;
2765
- cursor: not-allowed;
2766
- filter: alpha(opacity=65);
2767
- -webkit-box-shadow: none;
2768
- box-shadow: none;
2769
- opacity: .65;
2770
-}
2771
-.btn-default {
2772
- color: #333;
2773
- background-color: #fff;
2774
- border-color: #ccc;
2775
-}
2776
-.btn-default:hover,
2777
-.btn-default:focus,
2778
-.btn-default:active,
2779
-.btn-default.active,
2780
-.open > .dropdown-toggle.btn-default {
2781
- color: #333;
2782
- background-color: #e6e6e6;
2783
- border-color: #adadad;
2784
-}
2785
-.btn-default:active,
2786
-.btn-default.active,
2787
-.open > .dropdown-toggle.btn-default {
2788
- background-image: none;
2789
-}
2790
-.btn-default.disabled,
2791
-.btn-default[disabled],
2792
-fieldset[disabled] .btn-default,
2793
-.btn-default.disabled:hover,
2794
-.btn-default[disabled]:hover,
2795
-fieldset[disabled] .btn-default:hover,
2796
-.btn-default.disabled:focus,
2797
-.btn-default[disabled]:focus,
2798
-fieldset[disabled] .btn-default:focus,
2799
-.btn-default.disabled:active,
2800
-.btn-default[disabled]:active,
2801
-fieldset[disabled] .btn-default:active,
2802
-.btn-default.disabled.active,
2803
-.btn-default[disabled].active,
2804
-fieldset[disabled] .btn-default.active {
2805
- background-color: #fff;
2806
- border-color: #ccc;
2807
-}
2808
-.btn-default .badge {
2809
- color: #fff;
2810
- background-color: #333;
2811
-}
2812
-.btn-primary {
2813
- color: #fff;
2814
- background-color: #428bca;
2815
- border-color: #357ebd;
2816
-}
2817
-.btn-primary:hover,
2818
-.btn-primary:focus,
2819
-.btn-primary:active,
2820
-.btn-primary.active,
2821
-.open > .dropdown-toggle.btn-primary {
2822
- color: #fff;
2823
- background-color: #3071a9;
2824
- border-color: #285e8e;
2825
-}
2826
-.btn-primary:active,
2827
-.btn-primary.active,
2828
-.open > .dropdown-toggle.btn-primary {
2829
- background-image: none;
2830
-}
2831
-.btn-primary.disabled,
2832
-.btn-primary[disabled],
2833
-fieldset[disabled] .btn-primary,
2834
-.btn-primary.disabled:hover,
2835
-.btn-primary[disabled]:hover,
2836
-fieldset[disabled] .btn-primary:hover,
2837
-.btn-primary.disabled:focus,
2838
-.btn-primary[disabled]:focus,
2839
-fieldset[disabled] .btn-primary:focus,
2840
-.btn-primary.disabled:active,
2841
-.btn-primary[disabled]:active,
2842
-fieldset[disabled] .btn-primary:active,
2843
-.btn-primary.disabled.active,
2844
-.btn-primary[disabled].active,
2845
-fieldset[disabled] .btn-primary.active {
2846
- background-color: #428bca;
2847
- border-color: #357ebd;
2848
-}
2849
-.btn-primary .badge {
2850
- color: #428bca;
2851
- background-color: #fff;
2852
-}
2853
-.btn-success {
2854
- color: #fff;
2855
- background-color: #5cb85c;
2856
- border-color: #4cae4c;
2857
-}
2858
-.btn-success:hover,
2859
-.btn-success:focus,
2860
-.btn-success:active,
2861
-.btn-success.active,
2862
-.open > .dropdown-toggle.btn-success {
2863
- color: #fff;
2864
- background-color: #449d44;
2865
- border-color: #398439;
2866
-}
2867
-.btn-success:active,
2868
-.btn-success.active,
2869
-.open > .dropdown-toggle.btn-success {
2870
- background-image: none;
2871
-}
2872
-.btn-success.disabled,
2873
-.btn-success[disabled],
2874
-fieldset[disabled] .btn-success,
2875
-.btn-success.disabled:hover,
2876
-.btn-success[disabled]:hover,
2877
-fieldset[disabled] .btn-success:hover,
2878
-.btn-success.disabled:focus,
2879
-.btn-success[disabled]:focus,
2880
-fieldset[disabled] .btn-success:focus,
2881
-.btn-success.disabled:active,
2882
-.btn-success[disabled]:active,
2883
-fieldset[disabled] .btn-success:active,
2884
-.btn-success.disabled.active,
2885
-.btn-success[disabled].active,
2886
-fieldset[disabled] .btn-success.active {
2887
- background-color: #5cb85c;
2888
- border-color: #4cae4c;
2889
-}
2890
-.btn-success .badge {
2891
- color: #5cb85c;
2892
- background-color: #fff;
2893
-}
2894
-.btn-info {
2895
- color: #fff;
2896
- background-color: #5bc0de;
2897
- border-color: #46b8da;
2898
-}
2899
-.btn-info:hover,
2900
-.btn-info:focus,
2901
-.btn-info:active,
2902
-.btn-info.active,
2903
-.open > .dropdown-toggle.btn-info {
2904
- color: #fff;
2905
- background-color: #31b0d5;
2906
- border-color: #269abc;
2907
-}
2908
-.btn-info:active,
2909
-.btn-info.active,
2910
-.open > .dropdown-toggle.btn-info {
2911
- background-image: none;
2912
-}
2913
-.btn-info.disabled,
2914
-.btn-info[disabled],
2915
-fieldset[disabled] .btn-info,
2916
-.btn-info.disabled:hover,
2917
-.btn-info[disabled]:hover,
2918
-fieldset[disabled] .btn-info:hover,
2919
-.btn-info.disabled:focus,
2920
-.btn-info[disabled]:focus,
2921
-fieldset[disabled] .btn-info:focus,
2922
-.btn-info.disabled:active,
2923
-.btn-info[disabled]:active,
2924
-fieldset[disabled] .btn-info:active,
2925
-.btn-info.disabled.active,
2926
-.btn-info[disabled].active,
2927
-fieldset[disabled] .btn-info.active {
2928
- background-color: #5bc0de;
2929
- border-color: #46b8da;
2930
-}
2931
-.btn-info .badge {
2932
- color: #5bc0de;
2933
- background-color: #fff;
2934
-}
2935
-.btn-warning {
2936
- color: #fff;
2937
- background-color: #f0ad4e;
2938
- border-color: #eea236;
2939
-}
2940
-.btn-warning:hover,
2941
-.btn-warning:focus,
2942
-.btn-warning:active,
2943
-.btn-warning.active,
2944
-.open > .dropdown-toggle.btn-warning {
2945
- color: #fff;
2946
- background-color: #ec971f;
2947
- border-color: #d58512;
2948
-}
2949
-.btn-warning:active,
2950
-.btn-warning.active,
2951
-.open > .dropdown-toggle.btn-warning {
2952
- background-image: none;
2953
-}
2954
-.btn-warning.disabled,
2955
-.btn-warning[disabled],
2956
-fieldset[disabled] .btn-warning,
2957
-.btn-warning.disabled:hover,
2958
-.btn-warning[disabled]:hover,
2959
-fieldset[disabled] .btn-warning:hover,
2960
-.btn-warning.disabled:focus,
2961
-.btn-warning[disabled]:focus,
2962
-fieldset[disabled] .btn-warning:focus,
2963
-.btn-warning.disabled:active,
2964
-.btn-warning[disabled]:active,
2965
-fieldset[disabled] .btn-warning:active,
2966
-.btn-warning.disabled.active,
2967
-.btn-warning[disabled].active,
2968
-fieldset[disabled] .btn-warning.active {
2969
- background-color: #f0ad4e;
2970
- border-color: #eea236;
2971
-}
2972
-.btn-warning .badge {
2973
- color: #f0ad4e;
2974
- background-color: #fff;
2975
-}
2976
-.btn-danger {
2977
- color: #fff;
2978
- background-color: #d9534f;
2979
- border-color: #d43f3a;
2980
-}
2981
-.btn-danger:hover,
2982
-.btn-danger:focus,
2983
-.btn-danger:active,
2984
-.btn-danger.active,
2985
-.open > .dropdown-toggle.btn-danger {
2986
- color: #fff;
2987
- background-color: #c9302c;
2988
- border-color: #ac2925;
2989
-}
2990
-.btn-danger:active,
2991
-.btn-danger.active,
2992
-.open > .dropdown-toggle.btn-danger {
2993
- background-image: none;
2994
-}
2995
-.btn-danger.disabled,
2996
-.btn-danger[disabled],
2997
-fieldset[disabled] .btn-danger,
2998
-.btn-danger.disabled:hover,
2999
-.btn-danger[disabled]:hover,
3000
-fieldset[disabled] .btn-danger:hover,
3001
-.btn-danger.disabled:focus,
3002
-.btn-danger[disabled]:focus,
3003
-fieldset[disabled] .btn-danger:focus,
3004
-.btn-danger.disabled:active,
3005
-.btn-danger[disabled]:active,
3006
-fieldset[disabled] .btn-danger:active,
3007
-.btn-danger.disabled.active,
3008
-.btn-danger[disabled].active,
3009
-fieldset[disabled] .btn-danger.active {
3010
- background-color: #d9534f;
3011
- border-color: #d43f3a;
3012
-}
3013
-.btn-danger .badge {
3014
- color: #d9534f;
3015
- background-color: #fff;
3016
-}
3017
-.btn-link {
3018
- font-weight: normal;
3019
- color: #428bca;
3020
- cursor: pointer;
3021
- border-radius: 0;
3022
-}
3023
-.btn-link,
3024
-.btn-link:active,
3025
-.btn-link[disabled],
3026
-fieldset[disabled] .btn-link {
3027
- background-color: transparent;
3028
- -webkit-box-shadow: none;
3029
- box-shadow: none;
3030
-}
3031
-.btn-link,
3032
-.btn-link:hover,
3033
-.btn-link:focus,
3034
-.btn-link:active {
3035
- border-color: transparent;
3036
-}
3037
-.btn-link:hover,
3038
-.btn-link:focus {
3039
- color: #2a6496;
3040
- text-decoration: underline;
3041
- background-color: transparent;
3042
-}
3043
-.btn-link[disabled]:hover,
3044
-fieldset[disabled] .btn-link:hover,
3045
-.btn-link[disabled]:focus,
3046
-fieldset[disabled] .btn-link:focus {
3047
- color: #777;
3048
- text-decoration: none;
3049
-}
3050
-.btn-lg,
3051
-.btn-group-lg > .btn {
3052
- padding: 10px 16px;
3053
- font-size: 18px;
3054
- line-height: 1.33;
3055
- border-radius: 6px;
3056
-}
3057
-.btn-sm,
3058
-.btn-group-sm > .btn {
3059
- padding: 5px 10px;
3060
- font-size: 12px;
3061
- line-height: 1.5;
3062
- border-radius: 3px;
3063
-}
3064
-.btn-xs,
3065
-.btn-group-xs > .btn {
3066
- padding: 1px 5px;
3067
- font-size: 12px;
3068
- line-height: 1.5;
3069
- border-radius: 3px;
3070
-}
3071
-.btn-block {
3072
- display: block;
3073
- width: 100%;
3074
-}
3075
-.btn-block + .btn-block {
3076
- margin-top: 5px;
3077
-}
3078
-input[type="submit"].btn-block,
3079
-input[type="reset"].btn-block,
3080
-input[type="button"].btn-block {
3081
- width: 100%;
3082
-}
3083
-.fade {
3084
- opacity: 0;
3085
- -webkit-transition: opacity .15s linear;
3086
- -o-transition: opacity .15s linear;
3087
- transition: opacity .15s linear;
3088
-}
3089
-.fade.in {
3090
- opacity: 1;
3091
-}
3092
-.collapse {
3093
- display: none;
3094
-}
3095
-.collapse.in {
3096
- display: block;
3097
-}
3098
-tr.collapse.in {
3099
- display: table-row;
3100
-}
3101
-tbody.collapse.in {
3102
- display: table-row-group;
3103
-}
3104
-.collapsing {
3105
- position: relative;
3106
- height: 0;
3107
- overflow: hidden;
3108
- -webkit-transition: height .35s ease;
3109
- -o-transition: height .35s ease;
3110
- transition: height .35s ease;
3111
-}
3112
-.caret {
3113
- display: inline-block;
3114
- width: 0;
3115
- height: 0;
3116
- margin-left: 2px;
3117
- vertical-align: middle;
3118
- border-top: 4px solid;
3119
- border-right: 4px solid transparent;
3120
- border-left: 4px solid transparent;
3121
-}
3122
-.dropdown {
3123
- position: relative;
3124
-}
3125
-.dropdown-toggle:focus {
3126
- outline: 0;
3127
-}
3128
-.dropdown-menu {
3129
- position: absolute;
3130
- top: 100%;
3131
- left: 0;
3132
- z-index: 1000;
3133
- display: none;
3134
- float: left;
3135
- min-width: 160px;
3136
- padding: 5px 0;
3137
- margin: 2px 0 0;
3138
- font-size: 14px;
3139
- text-align: left;
3140
- list-style: none;
3141
- background-color: #fff;
3142
- -webkit-background-clip: padding-box;
3143
- background-clip: padding-box;
3144
- border: 1px solid #ccc;
3145
- border: 1px solid rgba(0, 0, 0, .15);
3146
- border-radius: 4px;
3147
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3148
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3149
-}
3150
-.dropdown-menu.pull-right {
3151
- right: 0;
3152
- left: auto;
3153
-}
3154
-.dropdown-menu .divider {
3155
- height: 1px;
3156
- margin: 9px 0;
3157
- overflow: hidden;
3158
- background-color: #e5e5e5;
3159
-}
3160
-.dropdown-menu > li > a {
3161
- display: block;
3162
- padding: 3px 20px;
3163
- clear: both;
3164
- font-weight: normal;
3165
- line-height: 1.42857143;
3166
- color: #333;
3167
- white-space: nowrap;
3168
-}
3169
-.dropdown-menu > li > a:hover,
3170
-.dropdown-menu > li > a:focus {
3171
- color: #262626;
3172
- text-decoration: none;
3173
- background-color: #f5f5f5;
3174
-}
3175
-.dropdown-menu > .active > a,
3176
-.dropdown-menu > .active > a:hover,
3177
-.dropdown-menu > .active > a:focus {
3178
- color: #fff;
3179
- text-decoration: none;
3180
- background-color: #428bca;
3181
- outline: 0;
3182
-}
3183
-.dropdown-menu > .disabled > a,
3184
-.dropdown-menu > .disabled > a:hover,
3185
-.dropdown-menu > .disabled > a:focus {
3186
- color: #777;
3187
-}
3188
-.dropdown-menu > .disabled > a:hover,
3189
-.dropdown-menu > .disabled > a:focus {
3190
- text-decoration: none;
3191
- cursor: not-allowed;
3192
- background-color: transparent;
3193
- background-image: none;
3194
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3195
-}
3196
-.open > .dropdown-menu {
3197
- display: block;
3198
-}
3199
-.open > a {
3200
- outline: 0;
3201
-}
3202
-.dropdown-menu-right {
3203
- right: 0;
3204
- left: auto;
3205
-}
3206
-.dropdown-menu-left {
3207
- right: auto;
3208
- left: 0;
3209
-}
3210
-.dropdown-header {
3211
- display: block;
3212
- padding: 3px 20px;
3213
- font-size: 12px;
3214
- line-height: 1.42857143;
3215
- color: #777;
3216
- white-space: nowrap;
3217
-}
3218
-.dropdown-backdrop {
3219
- position: fixed;
3220
- top: 0;
3221
- right: 0;
3222
- bottom: 0;
3223
- left: 0;
3224
- z-index: 990;
3225
-}
3226
-.pull-right > .dropdown-menu {
3227
- right: 0;
3228
- left: auto;
3229
-}
3230
-.dropup .caret,
3231
-.navbar-fixed-bottom .dropdown .caret {
3232
- content: "";
3233
- border-top: 0;
3234
- border-bottom: 4px solid;
3235
-}
3236
-.dropup .dropdown-menu,
3237
-.navbar-fixed-bottom .dropdown .dropdown-menu {
3238
- top: auto;
3239
- bottom: 100%;
3240
- margin-bottom: 1px;
3241
-}
3242
-@media (min-width: 768px) {
3243
- .navbar-right .dropdown-menu {
3244
- right: 0;
3245
- left: auto;
3246
- }
3247
- .navbar-right .dropdown-menu-left {
3248
- right: auto;
3249
- left: 0;
3250
- }
3251
-}
3252
-.btn-group,
3253
-.btn-group-vertical {
3254
- position: relative;
3255
- display: inline-block;
3256
- vertical-align: middle;
3257
-}
3258
-.btn-group > .btn,
3259
-.btn-group-vertical > .btn {
3260
- position: relative;
3261
- float: left;
3262
-}
3263
-.btn-group > .btn:hover,
3264
-.btn-group-vertical > .btn:hover,
3265
-.btn-group > .btn:focus,
3266
-.btn-group-vertical > .btn:focus,
3267
-.btn-group > .btn:active,
3268
-.btn-group-vertical > .btn:active,
3269
-.btn-group > .btn.active,
3270
-.btn-group-vertical > .btn.active {
3271
- z-index: 2;
3272
-}
3273
-.btn-group > .btn:focus,
3274
-.btn-group-vertical > .btn:focus {
3275
- outline: 0;
3276
-}
3277
-.btn-group .btn + .btn,
3278
-.btn-group .btn + .btn-group,
3279
-.btn-group .btn-group + .btn,
3280
-.btn-group .btn-group + .btn-group {
3281
- margin-left: -1px;
3282
-}
3283
-.btn-toolbar {
3284
- margin-left: -5px;
3285
-}
3286
-.btn-toolbar .btn-group,
3287
-.btn-toolbar .input-group {
3288
- float: left;
3289
-}
3290
-.btn-toolbar > .btn,
3291
-.btn-toolbar > .btn-group,
3292
-.btn-toolbar > .input-group {
3293
- margin-left: 5px;
3294
-}
3295
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3296
- border-radius: 0;
3297
-}
3298
-.btn-group > .btn:first-child {
3299
- margin-left: 0;
3300
-}
3301
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3302
- border-top-right-radius: 0;
3303
- border-bottom-right-radius: 0;
3304
-}
3305
-.btn-group > .btn:last-child:not(:first-child),
3306
-.btn-group > .dropdown-toggle:not(:first-child) {
3307
- border-top-left-radius: 0;
3308
- border-bottom-left-radius: 0;
3309
-}
3310
-.btn-group > .btn-group {
3311
- float: left;
3312
-}
3313
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3314
- border-radius: 0;
3315
-}
3316
-.btn-group > .btn-group:first-child > .btn:last-child,
3317
-.btn-group > .btn-group:first-child > .dropdown-toggle {
3318
- border-top-right-radius: 0;
3319
- border-bottom-right-radius: 0;
3320
-}
3321
-.btn-group > .btn-group:last-child > .btn:first-child {
3322
- border-top-left-radius: 0;
3323
- border-bottom-left-radius: 0;
3324
-}
3325
-.btn-group .dropdown-toggle:active,
3326
-.btn-group.open .dropdown-toggle {
3327
- outline: 0;
3328
-}
3329
-.btn-group > .btn + .dropdown-toggle {
3330
- padding-right: 8px;
3331
- padding-left: 8px;
3332
-}
3333
-.btn-group > .btn-lg + .dropdown-toggle {
3334
- padding-right: 12px;
3335
- padding-left: 12px;
3336
-}
3337
-.btn-group.open .dropdown-toggle {
3338
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3339
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3340
-}
3341
-.btn-group.open .dropdown-toggle.btn-link {
3342
- -webkit-box-shadow: none;
3343
- box-shadow: none;
3344
-}
3345
-.btn .caret {
3346
- margin-left: 0;
3347
-}
3348
-.btn-lg .caret {
3349
- border-width: 5px 5px 0;
3350
- border-bottom-width: 0;
3351
-}
3352
-.dropup .btn-lg .caret {
3353
- border-width: 0 5px 5px;
3354
-}
3355
-.btn-group-vertical > .btn,
3356
-.btn-group-vertical > .btn-group,
3357
-.btn-group-vertical > .btn-group > .btn {
3358
- display: block;
3359
- float: none;
3360
- width: 100%;
3361
- max-width: 100%;
3362
-}
3363
-.btn-group-vertical > .btn-group > .btn {
3364
- float: none;
3365
-}
3366
-.btn-group-vertical > .btn + .btn,
3367
-.btn-group-vertical > .btn + .btn-group,
3368
-.btn-group-vertical > .btn-group + .btn,
3369
-.btn-group-vertical > .btn-group + .btn-group {
3370
- margin-top: -1px;
3371
- margin-left: 0;
3372
-}
3373
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3374
- border-radius: 0;
3375
-}
3376
-.btn-group-vertical > .btn:first-child:not(:last-child) {
3377
- border-top-right-radius: 4px;
3378
- border-bottom-right-radius: 0;
3379
- border-bottom-left-radius: 0;
3380
-}
3381
-.btn-group-vertical > .btn:last-child:not(:first-child) {
3382
- border-top-left-radius: 0;
3383
- border-top-right-radius: 0;
3384
- border-bottom-left-radius: 4px;
3385
-}
3386
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3387
- border-radius: 0;
3388
-}
3389
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3390
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3391
- border-bottom-right-radius: 0;
3392
- border-bottom-left-radius: 0;
3393
-}
3394
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3395
- border-top-left-radius: 0;
3396
- border-top-right-radius: 0;
3397
-}
3398
-.btn-group-justified {
3399
- display: table;
3400
- width: 100%;
3401
- table-layout: fixed;
3402
- border-collapse: separate;
3403
-}
3404
-.btn-group-justified > .btn,
3405
-.btn-group-justified > .btn-group {
3406
- display: table-cell;
3407
- float: none;
3408
- width: 1%;
3409
-}
3410
-.btn-group-justified > .btn-group .btn {
3411
- width: 100%;
3412
-}
3413
-.btn-group-justified > .btn-group .dropdown-menu {
3414
- left: auto;
3415
-}
3416
-[data-toggle="buttons"] > .btn > input[type="radio"],
3417
-[data-toggle="buttons"] > .btn > input[type="checkbox"] {
3418
- position: absolute;
3419
- z-index: -1;
3420
- filter: alpha(opacity=0);
3421
- opacity: 0;
3422
-}
3423
-.input-group {
3424
- position: relative;
3425
- display: table;
3426
- border-collapse: separate;
3427
-}
3428
-.input-group[class*="col-"] {
3429
- float: none;
3430
- padding-right: 0;
3431
- padding-left: 0;
3432
-}
3433
-.input-group .form-control {
3434
- position: relative;
3435
- z-index: 2;
3436
- float: left;
3437
- width: 100%;
3438
- margin-bottom: 0;
3439
-}
3440
-.input-group-lg > .form-control,
3441
-.input-group-lg > .input-group-addon,
3442
-.input-group-lg > .input-group-btn > .btn {
3443
- height: 46px;
3444
- padding: 10px 16px;
3445
- font-size: 18px;
3446
- line-height: 1.33;
3447
- border-radius: 6px;
3448
-}
3449
-select.input-group-lg > .form-control,
3450
-select.input-group-lg > .input-group-addon,
3451
-select.input-group-lg > .input-group-btn > .btn {
3452
- height: 46px;
3453
- line-height: 46px;
3454
-}
3455
-textarea.input-group-lg > .form-control,
3456
-textarea.input-group-lg > .input-group-addon,
3457
-textarea.input-group-lg > .input-group-btn > .btn,
3458
-select[multiple].input-group-lg > .form-control,
3459
-select[multiple].input-group-lg > .input-group-addon,
3460
-select[multiple].input-group-lg > .input-group-btn > .btn {
3461
- height: auto;
3462
-}
3463
-.input-group-sm > .form-control,
3464
-.input-group-sm > .input-group-addon,
3465
-.input-group-sm > .input-group-btn > .btn {
3466
- height: 30px;
3467
- padding: 5px 10px;
3468
- font-size: 12px;
3469
- line-height: 1.5;
3470
- border-radius: 3px;
3471
-}
3472
-select.input-group-sm > .form-control,
3473
-select.input-group-sm > .input-group-addon,
3474
-select.input-group-sm > .input-group-btn > .btn {
3475
- height: 30px;
3476
- line-height: 30px;
3477
-}
3478
-textarea.input-group-sm > .form-control,
3479
-textarea.input-group-sm > .input-group-addon,
3480
-textarea.input-group-sm > .input-group-btn > .btn,
3481
-select[multiple].input-group-sm > .form-control,
3482
-select[multiple].input-group-sm > .input-group-addon,
3483
-select[multiple].input-group-sm > .input-group-btn > .btn {
3484
- height: auto;
3485
-}
3486
-.input-group-addon,
3487
-.input-group-btn,
3488
-.input-group .form-control {
3489
- display: table-cell;
3490
-}
3491
-.input-group-addon:not(:first-child):not(:last-child),
3492
-.input-group-btn:not(:first-child):not(:last-child),
3493
-.input-group .form-control:not(:first-child):not(:last-child) {
3494
- border-radius: 0;
3495
-}
3496
-.input-group-addon,
3497
-.input-group-btn {
3498
- width: 1%;
3499
- white-space: nowrap;
3500
- vertical-align: middle;
3501
-}
3502
-.input-group-addon {
3503
- padding: 6px 12px;
3504
- font-size: 14px;
3505
- font-weight: normal;
3506
- line-height: 1;
3507
- color: #555;
3508
- text-align: center;
3509
- background-color: #eee;
3510
- border: 1px solid #ccc;
3511
- border-radius: 4px;
3512
-}
3513
-.input-group-addon.input-sm {
3514
- padding: 5px 10px;
3515
- font-size: 12px;
3516
- border-radius: 3px;
3517
-}
3518
-.input-group-addon.input-lg {
3519
- padding: 10px 16px;
3520
- font-size: 18px;
3521
- border-radius: 6px;
3522
-}
3523
-.input-group-addon input[type="radio"],
3524
-.input-group-addon input[type="checkbox"] {
3525
- margin-top: 0;
3526
-}
3527
-.input-group .form-control:first-child,
3528
-.input-group-addon:first-child,
3529
-.input-group-btn:first-child > .btn,
3530
-.input-group-btn:first-child > .btn-group > .btn,
3531
-.input-group-btn:first-child > .dropdown-toggle,
3532
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3533
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3534
- border-top-right-radius: 0;
3535
- border-bottom-right-radius: 0;
3536
-}
3537
-.input-group-addon:first-child {
3538
- border-right: 0;
3539
-}
3540
-.input-group .form-control:last-child,
3541
-.input-group-addon:last-child,
3542
-.input-group-btn:last-child > .btn,
3543
-.input-group-btn:last-child > .btn-group > .btn,
3544
-.input-group-btn:last-child > .dropdown-toggle,
3545
-.input-group-btn:first-child > .btn:not(:first-child),
3546
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3547
- border-top-left-radius: 0;
3548
- border-bottom-left-radius: 0;
3549
-}
3550
-.input-group-addon:last-child {
3551
- border-left: 0;
3552
-}
3553
-.input-group-btn {
3554
- position: relative;
3555
- font-size: 0;
3556
- white-space: nowrap;
3557
-}
3558
-.input-group-btn > .btn {
3559
- position: relative;
3560
-}
3561
-.input-group-btn > .btn + .btn {
3562
- margin-left: -1px;
3563
-}
3564
-.input-group-btn > .btn:hover,
3565
-.input-group-btn > .btn:focus,
3566
-.input-group-btn > .btn:active {
3567
- z-index: 2;
3568
-}
3569
-.input-group-btn:first-child > .btn,
3570
-.input-group-btn:first-child > .btn-group {
3571
- margin-right: -1px;
3572
-}
3573
-.input-group-btn:last-child > .btn,
3574
-.input-group-btn:last-child > .btn-group {
3575
- margin-left: -1px;
3576
-}
3577
-.nav {
3578
- padding-left: 0;
3579
- margin-bottom: 0;
3580
- list-style: none;
3581
-}
3582
-.nav > li {
3583
- position: relative;
3584
- display: block;
3585
-}
3586
-.nav > li > a {
3587
- position: relative;
3588
- display: block;
3589
- padding: 10px 15px;
3590
-}
3591
-.nav > li > a:hover,
3592
-.nav > li > a:focus {
3593
- text-decoration: none;
3594
- background-color: #eee;
3595
-}
3596
-.nav > li.disabled > a {
3597
- color: #777;
3598
-}
3599
-.nav > li.disabled > a:hover,
3600
-.nav > li.disabled > a:focus {
3601
- color: #777;
3602
- text-decoration: none;
3603
- cursor: not-allowed;
3604
- background-color: transparent;
3605
-}
3606
-.nav .open > a,
3607
-.nav .open > a:hover,
3608
-.nav .open > a:focus {
3609
- background-color: #eee;
3610
- border-color: #428bca;
3611
-}
3612
-.nav .nav-divider {
3613
- height: 1px;
3614
- margin: 9px 0;
3615
- overflow: hidden;
3616
- background-color: #e5e5e5;
3617
-}
3618
-.nav > li > a > img {
3619
- max-width: none;
3620
-}
3621
-.nav-tabs {
3622
- border-bottom: 1px solid #ddd;
3623
-}
3624
-.nav-tabs > li {
3625
- float: left;
3626
- margin-bottom: -1px;
3627
-}
3628
-.nav-tabs > li > a {
3629
- margin-right: 2px;
3630
- line-height: 1.42857143;
3631
- border: 1px solid transparent;
3632
- border-radius: 4px 4px 0 0;
3633
-}
3634
-.nav-tabs > li > a:hover {
3635
- border-color: #eee #eee #ddd;
3636
-}
3637
-.nav-tabs > li.active > a,
3638
-.nav-tabs > li.active > a:hover,
3639
-.nav-tabs > li.active > a:focus {
3640
- color: #555;
3641
- cursor: default;
3642
- background-color: #fff;
3643
- border: 1px solid #ddd;
3644
- border-bottom-color: transparent;
3645
-}
3646
-.nav-tabs.nav-justified {
3647
- width: 100%;
3648
- border-bottom: 0;
3649
-}
3650
-.nav-tabs.nav-justified > li {
3651
- float: none;
3652
-}
3653
-.nav-tabs.nav-justified > li > a {
3654
- margin-bottom: 5px;
3655
- text-align: center;
3656
-}
3657
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
3658
- top: auto;
3659
- left: auto;
3660
-}
3661
-@media (min-width: 768px) {
3662
- .nav-tabs.nav-justified > li {
3663
- display: table-cell;
3664
- width: 1%;
3665
- }
3666
- .nav-tabs.nav-justified > li > a {
3667
- margin-bottom: 0;
3668
- }
3669
-}
3670
-.nav-tabs.nav-justified > li > a {
3671
- margin-right: 0;
3672
- border-radius: 4px;
3673
-}
3674
-.nav-tabs.nav-justified > .active > a,
3675
-.nav-tabs.nav-justified > .active > a:hover,
3676
-.nav-tabs.nav-justified > .active > a:focus {
3677
- border: 1px solid #ddd;
3678
-}
3679
-@media (min-width: 768px) {
3680
- .nav-tabs.nav-justified > li > a {
3681
- border-bottom: 1px solid #ddd;
3682
- border-radius: 4px 4px 0 0;
3683
- }
3684
- .nav-tabs.nav-justified > .active > a,
3685
- .nav-tabs.nav-justified > .active > a:hover,
3686
- .nav-tabs.nav-justified > .active > a:focus {
3687
- border-bottom-color: #fff;
3688
- }
3689
-}
3690
-.nav-pills > li {
3691
- float: left;
3692
-}
3693
-.nav-pills > li > a {
3694
- border-radius: 4px;
3695
-}
3696
-.nav-pills > li + li {
3697
- margin-left: 2px;
3698
-}
3699
-.nav-pills > li.active > a,
3700
-.nav-pills > li.active > a:hover,
3701
-.nav-pills > li.active > a:focus {
3702
- color: #fff;
3703
- background-color: #428bca;
3704
-}
3705
-.nav-stacked > li {
3706
- float: none;
3707
-}
3708
-.nav-stacked > li + li {
3709
- margin-top: 2px;
3710
- margin-left: 0;
3711
-}
3712
-.nav-justified {
3713
- width: 100%;
3714
-}
3715
-.nav-justified > li {
3716
- float: none;
3717
-}
3718
-.nav-justified > li > a {
3719
- margin-bottom: 5px;
3720
- text-align: center;
3721
-}
3722
-.nav-justified > .dropdown .dropdown-menu {
3723
- top: auto;
3724
- left: auto;
3725
-}
3726
-@media (min-width: 768px) {
3727
- .nav-justified > li {
3728
- display: table-cell;
3729
- width: 1%;
3730
- }
3731
- .nav-justified > li > a {
3732
- margin-bottom: 0;
3733
- }
3734
-}
3735
-.nav-tabs-justified {
3736
- border-bottom: 0;
3737
-}
3738
-.nav-tabs-justified > li > a {
3739
- margin-right: 0;
3740
- border-radius: 4px;
3741
-}
3742
-.nav-tabs-justified > .active > a,
3743
-.nav-tabs-justified > .active > a:hover,
3744
-.nav-tabs-justified > .active > a:focus {
3745
- border: 1px solid #ddd;
3746
-}
3747
-@media (min-width: 768px) {
3748
- .nav-tabs-justified > li > a {
3749
- border-bottom: 1px solid #ddd;
3750
- border-radius: 4px 4px 0 0;
3751
- }
3752
- .nav-tabs-justified > .active > a,
3753
- .nav-tabs-justified > .active > a:hover,
3754
- .nav-tabs-justified > .active > a:focus {
3755
- border-bottom-color: #fff;
3756
- }
3757
-}
3758
-.tab-content > .tab-pane {
3759
- display: none;
3760
-}
3761
-.tab-content > .active {
3762
- display: block;
3763
-}
3764
-.nav-tabs .dropdown-menu {
3765
- margin-top: -1px;
3766
- border-top-left-radius: 0;
3767
- border-top-right-radius: 0;
3768
-}
3769
-.navbar {
3770
- position: relative;
3771
- min-height: 50px;
3772
- margin-bottom: 20px;
3773
- border: 1px solid transparent;
3774
-}
3775
-@media (min-width: 768px) {
3776
- .navbar {
3777
- border-radius: 4px;
3778
- }
3779
-}
3780
-@media (min-width: 768px) {
3781
- .navbar-header {
3782
- float: left;
3783
- }
3784
-}
3785
-.navbar-collapse {
3786
- padding-right: 15px;
3787
- padding-left: 15px;
3788
- overflow-x: visible;
3789
- -webkit-overflow-scrolling: touch;
3790
- border-top: 1px solid transparent;
3791
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
3792
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
3793
-}
3794
-.navbar-collapse.in {
3795
- overflow-y: auto;
3796
-}
3797
-@media (min-width: 768px) {
3798
- .navbar-collapse {
3799
- width: auto;
3800
- border-top: 0;
3801
- -webkit-box-shadow: none;
3802
- box-shadow: none;
3803
- }
3804
- .navbar-collapse.collapse {
3805
- display: block !important;
3806
- height: auto !important;
3807
- padding-bottom: 0;
3808
- overflow: visible !important;
3809
- }
3810
- .navbar-collapse.in {
3811
- overflow-y: visible;
3812
- }
3813
- .navbar-fixed-top .navbar-collapse,
3814
- .navbar-static-top .navbar-collapse,
3815
- .navbar-fixed-bottom .navbar-collapse {
3816
- padding-right: 0;
3817
- padding-left: 0;
3818
- }
3819
-}
3820
-.navbar-fixed-top .navbar-collapse,
3821
-.navbar-fixed-bottom .navbar-collapse {
3822
- max-height: 340px;
3823
-}
3824
-@media (max-width: 480px) and (orientation: landscape) {
3825
- .navbar-fixed-top .navbar-collapse,
3826
- .navbar-fixed-bottom .navbar-collapse {
3827
- max-height: 200px;
3828
- }
3829
-}
3830
-.container > .navbar-header,
3831
-.container-fluid > .navbar-header,
3832
-.container > .navbar-collapse,
3833
-.container-fluid > .navbar-collapse {
3834
- margin-right: -15px;
3835
- margin-left: -15px;
3836
-}
3837
-@media (min-width: 768px) {
3838
- .container > .navbar-header,
3839
- .container-fluid > .navbar-header,
3840
- .container > .navbar-collapse,
3841
- .container-fluid > .navbar-collapse {
3842
- margin-right: 0;
3843
- margin-left: 0;
3844
- }
3845
-}
3846
-.navbar-static-top {
3847
- z-index: 1000;
3848
- border-width: 0 0 1px;
3849
-}
3850
-@media (min-width: 768px) {
3851
- .navbar-static-top {
3852
- border-radius: 0;
3853
- }
3854
-}
3855
-.navbar-fixed-top,
3856
-.navbar-fixed-bottom {
3857
- position: fixed;
3858
- right: 0;
3859
- left: 0;
3860
- z-index: 1030;
3861
- -webkit-transform: translate3d(0, 0, 0);
3862
- -o-transform: translate3d(0, 0, 0);
3863
- transform: translate3d(0, 0, 0);
3864
-}
3865
-@media (min-width: 768px) {
3866
- .navbar-fixed-top,
3867
- .navbar-fixed-bottom {
3868
- border-radius: 0;
3869
- }
3870
-}
3871
-.navbar-fixed-top {
3872
- top: 0;
3873
- border-width: 0 0 1px;
3874
-}
3875
-.navbar-fixed-bottom {
3876
- bottom: 0;
3877
- margin-bottom: 0;
3878
- border-width: 1px 0 0;
3879
-}
3880
-.navbar-brand {
3881
- float: left;
3882
- height: 50px;
3883
- padding: 15px 15px;
3884
- font-size: 18px;
3885
- line-height: 20px;
3886
-}
3887
-.navbar-brand:hover,
3888
-.navbar-brand:focus {
3889
- text-decoration: none;
3890
-}
3891
-@media (min-width: 768px) {
3892
- .navbar > .container .navbar-brand,
3893
- .navbar > .container-fluid .navbar-brand {
3894
- margin-left: -15px;
3895
- }
3896
-}
3897
-.navbar-toggle {
3898
- position: relative;
3899
- float: right;
3900
- padding: 9px 10px;
3901
- margin-top: 8px;
3902
- margin-right: 15px;
3903
- margin-bottom: 8px;
3904
- background-color: transparent;
3905
- background-image: none;
3906
- border: 1px solid transparent;
3907
- border-radius: 4px;
3908
-}
3909
-.navbar-toggle:focus {
3910
- outline: 0;
3911
-}
3912
-.navbar-toggle .icon-bar {
3913
- display: block;
3914
- width: 22px;
3915
- height: 2px;
3916
- border-radius: 1px;
3917
-}
3918
-.navbar-toggle .icon-bar + .icon-bar {
3919
- margin-top: 4px;
3920
-}
3921
-@media (min-width: 768px) {
3922
- .navbar-toggle {
3923
- display: none;
3924
- }
3925
-}
3926
-.navbar-nav {
3927
- margin: 7.5px -15px;
3928
-}
3929
-.navbar-nav > li > a {
3930
- padding-top: 10px;
3931
- padding-bottom: 10px;
3932
- line-height: 20px;
3933
-}
3934
-@media (max-width: 767px) {
3935
- .navbar-nav .open .dropdown-menu {
3936
- position: static;
3937
- float: none;
3938
- width: auto;
3939
- margin-top: 0;
3940
- background-color: transparent;
3941
- border: 0;
3942
- -webkit-box-shadow: none;
3943
- box-shadow: none;
3944
- }
3945
- .navbar-nav .open .dropdown-menu > li > a,
3946
- .navbar-nav .open .dropdown-menu .dropdown-header {
3947
- padding: 5px 15px 5px 25px;
3948
- }
3949
- .navbar-nav .open .dropdown-menu > li > a {
3950
- line-height: 20px;
3951
- }
3952
- .navbar-nav .open .dropdown-menu > li > a:hover,
3953
- .navbar-nav .open .dropdown-menu > li > a:focus {
3954
- background-image: none;
3955
- }
3956
-}
3957
-@media (min-width: 768px) {
3958
- .navbar-nav {
3959
- float: left;
3960
- margin: 0;
3961
- }
3962
- .navbar-nav > li {
3963
- float: left;
3964
- }
3965
- .navbar-nav > li > a {
3966
- padding-top: 15px;
3967
- padding-bottom: 15px;
3968
- }
3969
- .navbar-nav.navbar-right:last-child {
3970
- margin-right: -15px;
3971
- }
3972
-}
3973
-@media (min-width: 768px) {
3974
- .navbar-left {
3975
- float: left !important;
3976
- }
3977
- .navbar-right {
3978
- float: right !important;
3979
- }
3980
-}
3981
-.navbar-form {
3982
- padding: 10px 15px;
3983
- margin-top: 8px;
3984
- margin-right: -15px;
3985
- margin-bottom: 8px;
3986
- margin-left: -15px;
3987
- border-top: 1px solid transparent;
3988
- border-bottom: 1px solid transparent;
3989
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
3990
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
3991
-}
3992
-@media (min-width: 768px) {
3993
- .navbar-form .form-group {
3994
- display: inline-block;
3995
- margin-bottom: 0;
3996
- vertical-align: middle;
3997
- }
3998
- .navbar-form .form-control {
3999
- display: inline-block;
4000
- width: auto;
4001
- vertical-align: middle;
4002
- }
4003
- .navbar-form .input-group {
4004
- display: inline-table;
4005
- vertical-align: middle;
4006
- }
4007
- .navbar-form .input-group .input-group-addon,
4008
- .navbar-form .input-group .input-group-btn,
4009
- .navbar-form .input-group .form-control {
4010
- width: auto;
4011
- }
4012
- .navbar-form .input-group > .form-control {
4013
- width: 100%;
4014
- }
4015
- .navbar-form .control-label {
4016
- margin-bottom: 0;
4017
- vertical-align: middle;
4018
- }
4019
- .navbar-form .radio,
4020
- .navbar-form .checkbox {
4021
- display: inline-block;
4022
- margin-top: 0;
4023
- margin-bottom: 0;
4024
- vertical-align: middle;
4025
- }
4026
- .navbar-form .radio label,
4027
- .navbar-form .checkbox label {
4028
- padding-left: 0;
4029
- }
4030
- .navbar-form .radio input[type="radio"],
4031
- .navbar-form .checkbox input[type="checkbox"] {
4032
- position: relative;
4033
- margin-left: 0;
4034
- }
4035
- .navbar-form .has-feedback .form-control-feedback {
4036
- top: 0;
4037
- }
4038
-}
4039
-@media (max-width: 767px) {
4040
- .navbar-form .form-group {
4041
- margin-bottom: 5px;
4042
- }
4043
-}
4044
-@media (min-width: 768px) {
4045
- .navbar-form {
4046
- width: auto;
4047
- padding-top: 0;
4048
- padding-bottom: 0;
4049
- margin-right: 0;
4050
- margin-left: 0;
4051
- border: 0;
4052
- -webkit-box-shadow: none;
4053
- box-shadow: none;
4054
- }
4055
- .navbar-form.navbar-right:last-child {
4056
- margin-right: -15px;
4057
- }
4058
-}
4059
-.navbar-nav > li > .dropdown-menu {
4060
- margin-top: 0;
4061
- border-top-left-radius: 0;
4062
- border-top-right-radius: 0;
4063
-}
4064
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4065
- border-bottom-right-radius: 0;
4066
- border-bottom-left-radius: 0;
4067
-}
4068
-.navbar-btn {
4069
- margin-top: 8px;
4070
- margin-bottom: 8px;
4071
-}
4072
-.navbar-btn.btn-sm {
4073
- margin-top: 10px;
4074
- margin-bottom: 10px;
4075
-}
4076
-.navbar-btn.btn-xs {
4077
- margin-top: 14px;
4078
- margin-bottom: 14px;
4079
-}
4080
-.navbar-text {
4081
- margin-top: 15px;
4082
- margin-bottom: 15px;
4083
-}
4084
-@media (min-width: 768px) {
4085
- .navbar-text {
4086
- float: left;
4087
- margin-right: 15px;
4088
- margin-left: 15px;
4089
- }
4090
- .navbar-text.navbar-right:last-child {
4091
- margin-right: 0;
4092
- }
4093
-}
4094
-.navbar-default {
4095
- background-color: #f8f8f8;
4096
- border-color: #e7e7e7;
4097
-}
4098
-.navbar-default .navbar-brand {
4099
- color: #777;
4100
-}
4101
-.navbar-default .navbar-brand:hover,
4102
-.navbar-default .navbar-brand:focus {
4103
- color: #5e5e5e;
4104
- background-color: transparent;
4105
-}
4106
-.navbar-default .navbar-text {
4107
- color: #777;
4108
-}
4109
-.navbar-default .navbar-nav > li > a {
4110
- color: #777;
4111
-}
4112
-.navbar-default .navbar-nav > li > a:hover,
4113
-.navbar-default .navbar-nav > li > a:focus {
4114
- color: #333;
4115
- background-color: transparent;
4116
-}
4117
-.navbar-default .navbar-nav > .active > a,
4118
-.navbar-default .navbar-nav > .active > a:hover,
4119
-.navbar-default .navbar-nav > .active > a:focus {
4120
- color: #555;
4121
- background-color: #e7e7e7;
4122
-}
4123
-.navbar-default .navbar-nav > .disabled > a,
4124
-.navbar-default .navbar-nav > .disabled > a:hover,
4125
-.navbar-default .navbar-nav > .disabled > a:focus {
4126
- color: #ccc;
4127
- background-color: transparent;
4128
-}
4129
-.navbar-default .navbar-toggle {
4130
- border-color: #ddd;
4131
-}
4132
-.navbar-default .navbar-toggle:hover,
4133
-.navbar-default .navbar-toggle:focus {
4134
- background-color: #ddd;
4135
-}
4136
-.navbar-default .navbar-toggle .icon-bar {
4137
- background-color: #888;
4138
-}
4139
-.navbar-default .navbar-collapse,
4140
-.navbar-default .navbar-form {
4141
- border-color: #e7e7e7;
4142
-}
4143
-.navbar-default .navbar-nav > .open > a,
4144
-.navbar-default .navbar-nav > .open > a:hover,
4145
-.navbar-default .navbar-nav > .open > a:focus {
4146
- color: #555;
4147
- background-color: #e7e7e7;
4148
-}
4149
-@media (max-width: 767px) {
4150
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4151
- color: #777;
4152
- }
4153
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4154
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4155
- color: #333;
4156
- background-color: transparent;
4157
- }
4158
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4159
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4160
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4161
- color: #555;
4162
- background-color: #e7e7e7;
4163
- }
4164
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4165
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4166
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4167
- color: #ccc;
4168
- background-color: transparent;
4169
- }
4170
-}
4171
-.navbar-default .navbar-link {
4172
- color: #777;
4173
-}
4174
-.navbar-default .navbar-link:hover {
4175
- color: #333;
4176
-}
4177
-.navbar-default .btn-link {
4178
- color: #777;
4179
-}
4180
-.navbar-default .btn-link:hover,
4181
-.navbar-default .btn-link:focus {
4182
- color: #333;
4183
-}
4184
-.navbar-default .btn-link[disabled]:hover,
4185
-fieldset[disabled] .navbar-default .btn-link:hover,
4186
-.navbar-default .btn-link[disabled]:focus,
4187
-fieldset[disabled] .navbar-default .btn-link:focus {
4188
- color: #ccc;
4189
-}
4190
-.navbar-inverse {
4191
- background-color: #222;
4192
- border-color: #080808;
4193
-}
4194
-.navbar-inverse .navbar-brand {
4195
- color: #777;
4196
-}
4197
-.navbar-inverse .navbar-brand:hover,
4198
-.navbar-inverse .navbar-brand:focus {
4199
- color: #fff;
4200
- background-color: transparent;
4201
-}
4202
-.navbar-inverse .navbar-text {
4203
- color: #777;
4204
-}
4205
-.navbar-inverse .navbar-nav > li > a {
4206
- color: #777;
4207
-}
4208
-.navbar-inverse .navbar-nav > li > a:hover,
4209
-.navbar-inverse .navbar-nav > li > a:focus {
4210
- color: #fff;
4211
- background-color: transparent;
4212
-}
4213
-.navbar-inverse .navbar-nav > .active > a,
4214
-.navbar-inverse .navbar-nav > .active > a:hover,
4215
-.navbar-inverse .navbar-nav > .active > a:focus {
4216
- color: #fff;
4217
- background-color: #080808;
4218
-}
4219
-.navbar-inverse .navbar-nav > .disabled > a,
4220
-.navbar-inverse .navbar-nav > .disabled > a:hover,
4221
-.navbar-inverse .navbar-nav > .disabled > a:focus {
4222
- color: #444;
4223
- background-color: transparent;
4224
-}
4225
-.navbar-inverse .navbar-toggle {
4226
- border-color: #333;
4227
-}
4228
-.navbar-inverse .navbar-toggle:hover,
4229
-.navbar-inverse .navbar-toggle:focus {
4230
- background-color: #333;
4231
-}
4232
-.navbar-inverse .navbar-toggle .icon-bar {
4233
- background-color: #fff;
4234
-}
4235
-.navbar-inverse .navbar-collapse,
4236
-.navbar-inverse .navbar-form {
4237
- border-color: #101010;
4238
-}
4239
-.navbar-inverse .navbar-nav > .open > a,
4240
-.navbar-inverse .navbar-nav > .open > a:hover,
4241
-.navbar-inverse .navbar-nav > .open > a:focus {
4242
- color: #fff;
4243
- background-color: #080808;
4244
-}
4245
-@media (max-width: 767px) {
4246
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4247
- border-color: #080808;
4248
- }
4249
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4250
- background-color: #080808;
4251
- }
4252
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4253
- color: #777;
4254
- }
4255
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4256
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4257
- color: #fff;
4258
- background-color: transparent;
4259
- }
4260
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4261
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4262
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4263
- color: #fff;
4264
- background-color: #080808;
4265
- }
4266
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4267
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4268
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4269
- color: #444;
4270
- background-color: transparent;
4271
- }
4272
-}
4273
-.navbar-inverse .navbar-link {
4274
- color: #777;
4275
-}
4276
-.navbar-inverse .navbar-link:hover {
4277
- color: #fff;
4278
-}
4279
-.navbar-inverse .btn-link {
4280
- color: #777;
4281
-}
4282
-.navbar-inverse .btn-link:hover,
4283
-.navbar-inverse .btn-link:focus {
4284
- color: #fff;
4285
-}
4286
-.navbar-inverse .btn-link[disabled]:hover,
4287
-fieldset[disabled] .navbar-inverse .btn-link:hover,
4288
-.navbar-inverse .btn-link[disabled]:focus,
4289
-fieldset[disabled] .navbar-inverse .btn-link:focus {
4290
- color: #444;
4291
-}
4292
-.breadcrumb {
4293
- padding: 8px 15px;
4294
- margin-bottom: 20px;
4295
- list-style: none;
4296
- background-color: #f5f5f5;
4297
- border-radius: 4px;
4298
-}
4299
-.breadcrumb > li {
4300
- display: inline-block;
4301
-}
4302
-.breadcrumb > li + li:before {
4303
- padding: 0 5px;
4304
- color: #ccc;
4305
- content: "/\00a0";
4306
-}
4307
-.breadcrumb > .active {
4308
- color: #777;
4309
-}
4310
-.pagination {
4311
- display: inline-block;
4312
- padding-left: 0;
4313
- margin: 20px 0;
4314
- border-radius: 4px;
4315
-}
4316
-.pagination > li {
4317
- display: inline;
4318
-}
4319
-.pagination > li > a,
4320
-.pagination > li > span {
4321
- position: relative;
4322
- float: left;
4323
- padding: 6px 12px;
4324
- margin-left: -1px;
4325
- line-height: 1.42857143;
4326
- color: #428bca;
4327
- text-decoration: none;
4328
- background-color: #fff;
4329
- border: 1px solid #ddd;
4330
-}
4331
-.pagination > li:first-child > a,
4332
-.pagination > li:first-child > span {
4333
- margin-left: 0;
4334
- border-top-left-radius: 4px;
4335
- border-bottom-left-radius: 4px;
4336
-}
4337
-.pagination > li:last-child > a,
4338
-.pagination > li:last-child > span {
4339
- border-top-right-radius: 4px;
4340
- border-bottom-right-radius: 4px;
4341
-}
4342
-.pagination > li > a:hover,
4343
-.pagination > li > span:hover,
4344
-.pagination > li > a:focus,
4345
-.pagination > li > span:focus {
4346
- color: #2a6496;
4347
- background-color: #eee;
4348
- border-color: #ddd;
4349
-}
4350
-.pagination > .active > a,
4351
-.pagination > .active > span,
4352
-.pagination > .active > a:hover,
4353
-.pagination > .active > span:hover,
4354
-.pagination > .active > a:focus,
4355
-.pagination > .active > span:focus {
4356
- z-index: 2;
4357
- color: #fff;
4358
- cursor: default;
4359
- background-color: #428bca;
4360
- border-color: #428bca;
4361
-}
4362
-.pagination > .disabled > span,
4363
-.pagination > .disabled > span:hover,
4364
-.pagination > .disabled > span:focus,
4365
-.pagination > .disabled > a,
4366
-.pagination > .disabled > a:hover,
4367
-.pagination > .disabled > a:focus {
4368
- color: #777;
4369
- cursor: not-allowed;
4370
- background-color: #fff;
4371
- border-color: #ddd;
4372
-}
4373
-.pagination-lg > li > a,
4374
-.pagination-lg > li > span {
4375
- padding: 10px 16px;
4376
- font-size: 18px;
4377
-}
4378
-.pagination-lg > li:first-child > a,
4379
-.pagination-lg > li:first-child > span {
4380
- border-top-left-radius: 6px;
4381
- border-bottom-left-radius: 6px;
4382
-}
4383
-.pagination-lg > li:last-child > a,
4384
-.pagination-lg > li:last-child > span {
4385
- border-top-right-radius: 6px;
4386
- border-bottom-right-radius: 6px;
4387
-}
4388
-.pagination-sm > li > a,
4389
-.pagination-sm > li > span {
4390
- padding: 5px 10px;
4391
- font-size: 12px;
4392
-}
4393
-.pagination-sm > li:first-child > a,
4394
-.pagination-sm > li:first-child > span {
4395
- border-top-left-radius: 3px;
4396
- border-bottom-left-radius: 3px;
4397
-}
4398
-.pagination-sm > li:last-child > a,
4399
-.pagination-sm > li:last-child > span {
4400
- border-top-right-radius: 3px;
4401
- border-bottom-right-radius: 3px;
4402
-}
4403
-.pager {
4404
- padding-left: 0;
4405
- margin: 20px 0;
4406
- text-align: center;
4407
- list-style: none;
4408
-}
4409
-.pager li {
4410
- display: inline;
4411
-}
4412
-.pager li > a,
4413
-.pager li > span {
4414
- display: inline-block;
4415
- padding: 5px 14px;
4416
- background-color: #fff;
4417
- border: 1px solid #ddd;
4418
- border-radius: 15px;
4419
-}
4420
-.pager li > a:hover,
4421
-.pager li > a:focus {
4422
- text-decoration: none;
4423
- background-color: #eee;
4424
-}
4425
-.pager .next > a,
4426
-.pager .next > span {
4427
- float: right;
4428
-}
4429
-.pager .previous > a,
4430
-.pager .previous > span {
4431
- float: left;
4432
-}
4433
-.pager .disabled > a,
4434
-.pager .disabled > a:hover,
4435
-.pager .disabled > a:focus,
4436
-.pager .disabled > span {
4437
- color: #777;
4438
- cursor: not-allowed;
4439
- background-color: #fff;
4440
-}
4441
-.label {
4442
- display: inline;
4443
- padding: .2em .6em .3em;
4444
- font-size: 75%;
4445
- font-weight: bold;
4446
- line-height: 1;
4447
- color: #fff;
4448
- text-align: center;
4449
- white-space: nowrap;
4450
- vertical-align: baseline;
4451
- border-radius: .25em;
4452
-}
4453
-a.label:hover,
4454
-a.label:focus {
4455
- color: #fff;
4456
- text-decoration: none;
4457
- cursor: pointer;
4458
-}
4459
-.label:empty {
4460
- display: none;
4461
-}
4462
-.btn .label {
4463
- position: relative;
4464
- top: -1px;
4465
-}
4466
-.label-default {
4467
- background-color: #777;
4468
-}
4469
-.label-default[href]:hover,
4470
-.label-default[href]:focus {
4471
- background-color: #5e5e5e;
4472
-}
4473
-.label-primary {
4474
- background-color: #428bca;
4475
-}
4476
-.label-primary[href]:hover,
4477
-.label-primary[href]:focus {
4478
- background-color: #3071a9;
4479
-}
4480
-.label-success {
4481
- background-color: #5cb85c;
4482
-}
4483
-.label-success[href]:hover,
4484
-.label-success[href]:focus {
4485
- background-color: #449d44;
4486
-}
4487
-.label-info {
4488
- background-color: #5bc0de;
4489
-}
4490
-.label-info[href]:hover,
4491
-.label-info[href]:focus {
4492
- background-color: #31b0d5;
4493
-}
4494
-.label-warning {
4495
- background-color: #f0ad4e;
4496
-}
4497
-.label-warning[href]:hover,
4498
-.label-warning[href]:focus {
4499
- background-color: #ec971f;
4500
-}
4501
-.label-danger {
4502
- background-color: #d9534f;
4503
-}
4504
-.label-danger[href]:hover,
4505
-.label-danger[href]:focus {
4506
- background-color: #c9302c;
4507
-}
4508
-.badge {
4509
- display: inline-block;
4510
- min-width: 10px;
4511
- padding: 3px 7px;
4512
- font-size: 12px;
4513
- font-weight: bold;
4514
- line-height: 1;
4515
- color: #fff;
4516
- text-align: center;
4517
- white-space: nowrap;
4518
- vertical-align: baseline;
4519
- background-color: #777;
4520
- border-radius: 10px;
4521
-}
4522
-.badge:empty {
4523
- display: none;
4524
-}
4525
-.btn .badge {
4526
- position: relative;
4527
- top: -1px;
4528
-}
4529
-.btn-xs .badge {
4530
- top: 0;
4531
- padding: 1px 5px;
4532
-}
4533
-a.badge:hover,
4534
-a.badge:focus {
4535
- color: #fff;
4536
- text-decoration: none;
4537
- cursor: pointer;
4538
-}
4539
-a.list-group-item.active > .badge,
4540
-.nav-pills > .active > a > .badge {
4541
- color: #428bca;
4542
- background-color: #fff;
4543
-}
4544
-.nav-pills > li > a > .badge {
4545
- margin-left: 3px;
4546
-}
4547
-.jumbotron {
4548
- padding: 30px;
4549
- margin-bottom: 30px;
4550
- color: inherit;
4551
- background-color: #eee;
4552
-}
4553
-.jumbotron h1,
4554
-.jumbotron .h1 {
4555
- color: inherit;
4556
-}
4557
-.jumbotron p {
4558
- margin-bottom: 15px;
4559
- font-size: 21px;
4560
- font-weight: 200;
4561
-}
4562
-.jumbotron > hr {
4563
- border-top-color: #d5d5d5;
4564
-}
4565
-.container .jumbotron {
4566
- border-radius: 6px;
4567
-}
4568
-.jumbotron .container {
4569
- max-width: 100%;
4570
-}
4571
-@media screen and (min-width: 768px) {
4572
- .jumbotron {
4573
- padding-top: 48px;
4574
- padding-bottom: 48px;
4575
- }
4576
- .container .jumbotron {
4577
- padding-right: 60px;
4578
- padding-left: 60px;
4579
- }
4580
- .jumbotron h1,
4581
- .jumbotron .h1 {
4582
- font-size: 63px;
4583
- }
4584
-}
4585
-.thumbnail {
4586
- display: block;
4587
- padding: 4px;
4588
- margin-bottom: 20px;
4589
- line-height: 1.42857143;
4590
- background-color: #fff;
4591
- border: 1px solid #ddd;
4592
- border-radius: 4px;
4593
- -webkit-transition: all .2s ease-in-out;
4594
- -o-transition: all .2s ease-in-out;
4595
- transition: all .2s ease-in-out;
4596
-}
4597
-.thumbnail > img,
4598
-.thumbnail a > img {
4599
- margin-right: auto;
4600
- margin-left: auto;
4601
-}
4602
-a.thumbnail:hover,
4603
-a.thumbnail:focus,
4604
-a.thumbnail.active {
4605
- border-color: #428bca;
4606
-}
4607
-.thumbnail .caption {
4608
- padding: 9px;
4609
- color: #333;
4610
-}
4611
-.alert {
4612
- padding: 15px;
4613
- margin-bottom: 20px;
4614
- border: 1px solid transparent;
4615
- border-radius: 4px;
4616
-}
4617
-.alert h4 {
4618
- margin-top: 0;
4619
- color: inherit;
4620
-}
4621
-.alert .alert-link {
4622
- font-weight: bold;
4623
-}
4624
-.alert > p,
4625
-.alert > ul {
4626
- margin-bottom: 0;
4627
-}
4628
-.alert > p + p {
4629
- margin-top: 5px;
4630
-}
4631
-.alert-dismissable,
4632
-.alert-dismissible {
4633
- padding-right: 35px;
4634
-}
4635
-.alert-dismissable .close,
4636
-.alert-dismissible .close {
4637
- position: relative;
4638
- top: -2px;
4639
- right: -21px;
4640
- color: inherit;
4641
-}
4642
-.alert-success {
4643
- color: #3c763d;
4644
- background-color: #dff0d8;
4645
- border-color: #d6e9c6;
4646
-}
4647
-.alert-success hr {
4648
- border-top-color: #c9e2b3;
4649
-}
4650
-.alert-success .alert-link {
4651
- color: #2b542c;
4652
-}
4653
-.alert-info {
4654
- color: #31708f;
4655
- background-color: #d9edf7;
4656
- border-color: #bce8f1;
4657
-}
4658
-.alert-info hr {
4659
- border-top-color: #a6e1ec;
4660
-}
4661
-.alert-info .alert-link {
4662
- color: #245269;
4663
-}
4664
-.alert-warning {
4665
- color: #8a6d3b;
4666
- background-color: #fcf8e3;
4667
- border-color: #faebcc;
4668
-}
4669
-.alert-warning hr {
4670
- border-top-color: #f7e1b5;
4671
-}
4672
-.alert-warning .alert-link {
4673
- color: #66512c;
4674
-}
4675
-.alert-danger {
4676
- color: #a94442;
4677
- background-color: #f2dede;
4678
- border-color: #ebccd1;
4679
-}
4680
-.alert-danger hr {
4681
- border-top-color: #e4b9c0;
4682
-}
4683
-.alert-danger .alert-link {
4684
- color: #843534;
4685
-}
4686
-@-webkit-keyframes progress-bar-stripes {
4687
- from {
4688
- background-position: 40px 0;
4689
- }
4690
- to {
4691
- background-position: 0 0;
4692
- }
4693
-}
4694
-@-o-keyframes progress-bar-stripes {
4695
- from {
4696
- background-position: 40px 0;
4697
- }
4698
- to {
4699
- background-position: 0 0;
4700
- }
4701
-}
4702
-@keyframes progress-bar-stripes {
4703
- from {
4704
- background-position: 40px 0;
4705
- }
4706
- to {
4707
- background-position: 0 0;
4708
- }
4709
-}
4710
-.progress {
4711
- height: 20px;
4712
- margin-bottom: 20px;
4713
- overflow: hidden;
4714
- background-color: #f5f5f5;
4715
- border-radius: 4px;
4716
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
4717
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
4718
-}
4719
-.progress-bar {
4720
- float: left;
4721
- width: 0;
4722
- height: 100%;
4723
- font-size: 12px;
4724
- line-height: 20px;
4725
- color: #fff;
4726
- text-align: center;
4727
- background-color: #428bca;
4728
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
4729
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
4730
- -webkit-transition: width .6s ease;
4731
- -o-transition: width .6s ease;
4732
- transition: width .6s ease;
4733
-}
4734
-.progress-striped .progress-bar,
4735
-.progress-bar-striped {
4736
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4737
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4738
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4739
- -webkit-background-size: 40px 40px;
4740
- background-size: 40px 40px;
4741
-}
4742
-.progress.active .progress-bar,
4743
-.progress-bar.active {
4744
- -webkit-animation: progress-bar-stripes 2s linear infinite;
4745
- -o-animation: progress-bar-stripes 2s linear infinite;
4746
- animation: progress-bar-stripes 2s linear infinite;
4747
-}
4748
-.progress-bar[aria-valuenow="1"],
4749
-.progress-bar[aria-valuenow="2"] {
4750
- min-width: 30px;
4751
-}
4752
-.progress-bar[aria-valuenow="0"] {
4753
- min-width: 30px;
4754
- color: #777;
4755
- background-color: transparent;
4756
- background-image: none;
4757
- -webkit-box-shadow: none;
4758
- box-shadow: none;
4759
-}
4760
-.progress-bar-success {
4761
- background-color: #5cb85c;
4762
-}
4763
-.progress-striped .progress-bar-success {
4764
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4765
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4766
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4767
-}
4768
-.progress-bar-info {
4769
- background-color: #5bc0de;
4770
-}
4771
-.progress-striped .progress-bar-info {
4772
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4773
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4774
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4775
-}
4776
-.progress-bar-warning {
4777
- background-color: #f0ad4e;
4778
-}
4779
-.progress-striped .progress-bar-warning {
4780
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4781
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4782
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4783
-}
4784
-.progress-bar-danger {
4785
- background-color: #d9534f;
4786
-}
4787
-.progress-striped .progress-bar-danger {
4788
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4789
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4790
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4791
-}
4792
-.media,
4793
-.media-body {
4794
- overflow: hidden;
4795
- zoom: 1;
4796
-}
4797
-.media,
4798
-.media .media {
4799
- margin-top: 15px;
4800
-}
4801
-.media:first-child {
4802
- margin-top: 0;
4803
-}
4804
-.media-object {
4805
- display: block;
4806
-}
4807
-.media-heading {
4808
- margin: 0 0 5px;
4809
-}
4810
-.media > .pull-left {
4811
- margin-right: 10px;
4812
-}
4813
-.media > .pull-right {
4814
- margin-left: 10px;
4815
-}
4816
-.media-list {
4817
- padding-left: 0;
4818
- list-style: none;
4819
-}
4820
-.list-group {
4821
- padding-left: 0;
4822
- margin-bottom: 20px;
4823
-}
4824
-.list-group-item {
4825
- position: relative;
4826
- display: block;
4827
- padding: 10px 15px;
4828
- margin-bottom: -1px;
4829
- background-color: #fff;
4830
- border: 1px solid #ddd;
4831
-}
4832
-.list-group-item:first-child {
4833
- border-top-left-radius: 4px;
4834
- border-top-right-radius: 4px;
4835
-}
4836
-.list-group-item:last-child {
4837
- margin-bottom: 0;
4838
- border-bottom-right-radius: 4px;
4839
- border-bottom-left-radius: 4px;
4840
-}
4841
-.list-group-item > .badge {
4842
- float: right;
4843
-}
4844
-.list-group-item > .badge + .badge {
4845
- margin-right: 5px;
4846
-}
4847
-a.list-group-item {
4848
- color: #555;
4849
-}
4850
-a.list-group-item .list-group-item-heading {
4851
- color: #333;
4852
-}
4853
-a.list-group-item:hover,
4854
-a.list-group-item:focus {
4855
- color: #555;
4856
- text-decoration: none;
4857
- background-color: #f5f5f5;
4858
-}
4859
-.list-group-item.disabled,
4860
-.list-group-item.disabled:hover,
4861
-.list-group-item.disabled:focus {
4862
- color: #777;
4863
- background-color: #eee;
4864
-}
4865
-.list-group-item.disabled .list-group-item-heading,
4866
-.list-group-item.disabled:hover .list-group-item-heading,
4867
-.list-group-item.disabled:focus .list-group-item-heading {
4868
- color: inherit;
4869
-}
4870
-.list-group-item.disabled .list-group-item-text,
4871
-.list-group-item.disabled:hover .list-group-item-text,
4872
-.list-group-item.disabled:focus .list-group-item-text {
4873
- color: #777;
4874
-}
4875
-.list-group-item.active,
4876
-.list-group-item.active:hover,
4877
-.list-group-item.active:focus {
4878
- z-index: 2;
4879
- color: #fff;
4880
- background-color: #428bca;
4881
- border-color: #428bca;
4882
-}
4883
-.list-group-item.active .list-group-item-heading,
4884
-.list-group-item.active:hover .list-group-item-heading,
4885
-.list-group-item.active:focus .list-group-item-heading,
4886
-.list-group-item.active .list-group-item-heading > small,
4887
-.list-group-item.active:hover .list-group-item-heading > small,
4888
-.list-group-item.active:focus .list-group-item-heading > small,
4889
-.list-group-item.active .list-group-item-heading > .small,
4890
-.list-group-item.active:hover .list-group-item-heading > .small,
4891
-.list-group-item.active:focus .list-group-item-heading > .small {
4892
- color: inherit;
4893
-}
4894
-.list-group-item.active .list-group-item-text,
4895
-.list-group-item.active:hover .list-group-item-text,
4896
-.list-group-item.active:focus .list-group-item-text {
4897
- color: #e1edf7;
4898
-}
4899
-.list-group-item-success {
4900
- color: #3c763d;
4901
- background-color: #dff0d8;
4902
-}
4903
-a.list-group-item-success {
4904
- color: #3c763d;
4905
-}
4906
-a.list-group-item-success .list-group-item-heading {
4907
- color: inherit;
4908
-}
4909
-a.list-group-item-success:hover,
4910
-a.list-group-item-success:focus {
4911
- color: #3c763d;
4912
- background-color: #d0e9c6;
4913
-}
4914
-a.list-group-item-success.active,
4915
-a.list-group-item-success.active:hover,
4916
-a.list-group-item-success.active:focus {
4917
- color: #fff;
4918
- background-color: #3c763d;
4919
- border-color: #3c763d;
4920
-}
4921
-.list-group-item-info {
4922
- color: #31708f;
4923
- background-color: #d9edf7;
4924
-}
4925
-a.list-group-item-info {
4926
- color: #31708f;
4927
-}
4928
-a.list-group-item-info .list-group-item-heading {
4929
- color: inherit;
4930
-}
4931
-a.list-group-item-info:hover,
4932
-a.list-group-item-info:focus {
4933
- color: #31708f;
4934
- background-color: #c4e3f3;
4935
-}
4936
-a.list-group-item-info.active,
4937
-a.list-group-item-info.active:hover,
4938
-a.list-group-item-info.active:focus {
4939
- color: #fff;
4940
- background-color: #31708f;
4941
- border-color: #31708f;
4942
-}
4943
-.list-group-item-warning {
4944
- color: #8a6d3b;
4945
- background-color: #fcf8e3;
4946
-}
4947
-a.list-group-item-warning {
4948
- color: #8a6d3b;
4949
-}
4950
-a.list-group-item-warning .list-group-item-heading {
4951
- color: inherit;
4952
-}
4953
-a.list-group-item-warning:hover,
4954
-a.list-group-item-warning:focus {
4955
- color: #8a6d3b;
4956
- background-color: #faf2cc;
4957
-}
4958
-a.list-group-item-warning.active,
4959
-a.list-group-item-warning.active:hover,
4960
-a.list-group-item-warning.active:focus {
4961
- color: #fff;
4962
- background-color: #8a6d3b;
4963
- border-color: #8a6d3b;
4964
-}
4965
-.list-group-item-danger {
4966
- color: #a94442;
4967
- background-color: #f2dede;
4968
-}
4969
-a.list-group-item-danger {
4970
- color: #a94442;
4971
-}
4972
-a.list-group-item-danger .list-group-item-heading {
4973
- color: inherit;
4974
-}
4975
-a.list-group-item-danger:hover,
4976
-a.list-group-item-danger:focus {
4977
- color: #a94442;
4978
- background-color: #ebcccc;
4979
-}
4980
-a.list-group-item-danger.active,
4981
-a.list-group-item-danger.active:hover,
4982
-a.list-group-item-danger.active:focus {
4983
- color: #fff;
4984
- background-color: #a94442;
4985
- border-color: #a94442;
4986
-}
4987
-.list-group-item-heading {
4988
- margin-top: 0;
4989
- margin-bottom: 5px;
4990
-}
4991
-.list-group-item-text {
4992
- margin-bottom: 0;
4993
- line-height: 1.3;
4994
-}
4995
-.panel {
4996
- margin-bottom: 20px;
4997
- background-color: #fff;
4998
- border: 1px solid transparent;
4999
- border-radius: 4px;
5000
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5001
- box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5002
-}
5003
-.panel-body {
5004
- padding: 15px;
5005
-}
5006
-.panel-heading {
5007
- padding: 10px 15px;
5008
- border-bottom: 1px solid transparent;
5009
- border-top-left-radius: 3px;
5010
- border-top-right-radius: 3px;
5011
-}
5012
-.panel-heading > .dropdown .dropdown-toggle {
5013
- color: inherit;
5014
-}
5015
-.panel-title {
5016
- margin-top: 0;
5017
- margin-bottom: 0;
5018
- font-size: 16px;
5019
- color: inherit;
5020
-}
5021
-.panel-title > a {
5022
- color: inherit;
5023
-}
5024
-.panel-footer {
5025
- padding: 10px 15px;
5026
- background-color: #f5f5f5;
5027
- border-top: 1px solid #ddd;
5028
- border-bottom-right-radius: 3px;
5029
- border-bottom-left-radius: 3px;
5030
-}
5031
-.panel > .list-group {
5032
- margin-bottom: 0;
5033
-}
5034
-.panel > .list-group .list-group-item {
5035
- border-width: 1px 0;
5036
- border-radius: 0;
5037
-}
5038
-.panel > .list-group:first-child .list-group-item:first-child {
5039
- border-top: 0;
5040
- border-top-left-radius: 3px;
5041
- border-top-right-radius: 3px;
5042
-}
5043
-.panel > .list-group:last-child .list-group-item:last-child {
5044
- border-bottom: 0;
5045
- border-bottom-right-radius: 3px;
5046
- border-bottom-left-radius: 3px;
5047
-}
5048
-.panel-heading + .list-group .list-group-item:first-child {
5049
- border-top-width: 0;
5050
-}
5051
-.list-group + .panel-footer {
5052
- border-top-width: 0;
5053
-}
5054
-.panel > .table,
5055
-.panel > .table-responsive > .table,
5056
-.panel > .panel-collapse > .table {
5057
- margin-bottom: 0;
5058
-}
5059
-.panel > .table:first-child,
5060
-.panel > .table-responsive:first-child > .table:first-child {
5061
- border-top-left-radius: 3px;
5062
- border-top-right-radius: 3px;
5063
-}
5064
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
5065
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
5066
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5067
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5068
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
5069
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
5070
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
5071
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
5072
- border-top-left-radius: 3px;
5073
-}
5074
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
5075
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
5076
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5077
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5078
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
5079
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
5080
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
5081
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
5082
- border-top-right-radius: 3px;
5083
-}
5084
-.panel > .table:last-child,
5085
-.panel > .table-responsive:last-child > .table:last-child {
5086
- border-bottom-right-radius: 3px;
5087
- border-bottom-left-radius: 3px;
5088
-}
5089
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5090
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5091
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5092
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5093
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5094
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5095
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
5096
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
5097
- border-bottom-left-radius: 3px;
5098
-}
5099
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5100
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5101
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5102
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5103
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5104
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5105
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
5106
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
5107
- border-bottom-right-radius: 3px;
5108
-}
5109
-.panel > .panel-body + .table,
5110
-.panel > .panel-body + .table-responsive {
5111
- border-top: 1px solid #ddd;
5112
-}
5113
-.panel > .table > tbody:first-child > tr:first-child th,
5114
-.panel > .table > tbody:first-child > tr:first-child td {
5115
- border-top: 0;
5116
-}
5117
-.panel > .table-bordered,
5118
-.panel > .table-responsive > .table-bordered {
5119
- border: 0;
5120
-}
5121
-.panel > .table-bordered > thead > tr > th:first-child,
5122
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5123
-.panel > .table-bordered > tbody > tr > th:first-child,
5124
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5125
-.panel > .table-bordered > tfoot > tr > th:first-child,
5126
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5127
-.panel > .table-bordered > thead > tr > td:first-child,
5128
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5129
-.panel > .table-bordered > tbody > tr > td:first-child,
5130
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5131
-.panel > .table-bordered > tfoot > tr > td:first-child,
5132
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5133
- border-left: 0;
5134
-}
5135
-.panel > .table-bordered > thead > tr > th:last-child,
5136
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5137
-.panel > .table-bordered > tbody > tr > th:last-child,
5138
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5139
-.panel > .table-bordered > tfoot > tr > th:last-child,
5140
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5141
-.panel > .table-bordered > thead > tr > td:last-child,
5142
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5143
-.panel > .table-bordered > tbody > tr > td:last-child,
5144
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5145
-.panel > .table-bordered > tfoot > tr > td:last-child,
5146
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5147
- border-right: 0;
5148
-}
5149
-.panel > .table-bordered > thead > tr:first-child > td,
5150
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
5151
-.panel > .table-bordered > tbody > tr:first-child > td,
5152
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
5153
-.panel > .table-bordered > thead > tr:first-child > th,
5154
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5155
-.panel > .table-bordered > tbody > tr:first-child > th,
5156
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5157
- border-bottom: 0;
5158
-}
5159
-.panel > .table-bordered > tbody > tr:last-child > td,
5160
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5161
-.panel > .table-bordered > tfoot > tr:last-child > td,
5162
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5163
-.panel > .table-bordered > tbody > tr:last-child > th,
5164
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5165
-.panel > .table-bordered > tfoot > tr:last-child > th,
5166
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
5167
- border-bottom: 0;
5168
-}
5169
-.panel > .table-responsive {
5170
- margin-bottom: 0;
5171
- border: 0;
5172
-}
5173
-.panel-group {
5174
- margin-bottom: 20px;
5175
-}
5176
-.panel-group .panel {
5177
- margin-bottom: 0;
5178
- border-radius: 4px;
5179
-}
5180
-.panel-group .panel + .panel {
5181
- margin-top: 5px;
5182
-}
5183
-.panel-group .panel-heading {
5184
- border-bottom: 0;
5185
-}
5186
-.panel-group .panel-heading + .panel-collapse > .panel-body {
5187
- border-top: 1px solid #ddd;
5188
-}
5189
-.panel-group .panel-footer {
5190
- border-top: 0;
5191
-}
5192
-.panel-group .panel-footer + .panel-collapse .panel-body {
5193
- border-bottom: 1px solid #ddd;
5194
-}
5195
-.panel-default {
5196
- border-color: #ddd;
5197
-}
5198
-.panel-default > .panel-heading {
5199
- color: #333;
5200
- background-color: #f5f5f5;
5201
- border-color: #ddd;
5202
-}
5203
-.panel-default > .panel-heading + .panel-collapse > .panel-body {
5204
- border-top-color: #ddd;
5205
-}
5206
-.panel-default > .panel-heading .badge {
5207
- color: #f5f5f5;
5208
- background-color: #333;
5209
-}
5210
-.panel-default > .panel-footer + .panel-collapse > .panel-body {
5211
- border-bottom-color: #ddd;
5212
-}
5213
-.panel-primary {
5214
- border-color: #428bca;
5215
-}
5216
-.panel-primary > .panel-heading {
5217
- color: #fff;
5218
- background-color: #428bca;
5219
- border-color: #428bca;
5220
-}
5221
-.panel-primary > .panel-heading + .panel-collapse > .panel-body {
5222
- border-top-color: #428bca;
5223
-}
5224
-.panel-primary > .panel-heading .badge {
5225
- color: #428bca;
5226
- background-color: #fff;
5227
-}
5228
-.panel-primary > .panel-footer + .panel-collapse > .panel-body {
5229
- border-bottom-color: #428bca;
5230
-}
5231
-.panel-success {
5232
- border-color: #d6e9c6;
5233
-}
5234
-.panel-success > .panel-heading {
5235
- color: #3c763d;
5236
- background-color: #dff0d8;
5237
- border-color: #d6e9c6;
5238
-}
5239
-.panel-success > .panel-heading + .panel-collapse > .panel-body {
5240
- border-top-color: #d6e9c6;
5241
-}
5242
-.panel-success > .panel-heading .badge {
5243
- color: #dff0d8;
5244
- background-color: #3c763d;
5245
-}
5246
-.panel-success > .panel-footer + .panel-collapse > .panel-body {
5247
- border-bottom-color: #d6e9c6;
5248
-}
5249
-.panel-info {
5250
- border-color: #bce8f1;
5251
-}
5252
-.panel-info > .panel-heading {
5253
- color: #31708f;
5254
- background-color: #d9edf7;
5255
- border-color: #bce8f1;
5256
-}
5257
-.panel-info > .panel-heading + .panel-collapse > .panel-body {
5258
- border-top-color: #bce8f1;
5259
-}
5260
-.panel-info > .panel-heading .badge {
5261
- color: #d9edf7;
5262
- background-color: #31708f;
5263
-}
5264
-.panel-info > .panel-footer + .panel-collapse > .panel-body {
5265
- border-bottom-color: #bce8f1;
5266
-}
5267
-.panel-warning {
5268
- border-color: #faebcc;
5269
-}
5270
-.panel-warning > .panel-heading {
5271
- color: #8a6d3b;
5272
- background-color: #fcf8e3;
5273
- border-color: #faebcc;
5274
-}
5275
-.panel-warning > .panel-heading + .panel-collapse > .panel-body {
5276
- border-top-color: #faebcc;
5277
-}
5278
-.panel-warning > .panel-heading .badge {
5279
- color: #fcf8e3;
5280
- background-color: #8a6d3b;
5281
-}
5282
-.panel-warning > .panel-footer + .panel-collapse > .panel-body {
5283
- border-bottom-color: #faebcc;
5284
-}
5285
-.panel-danger {
5286
- border-color: #ebccd1;
5287
-}
5288
-.panel-danger > .panel-heading {
5289
- color: #a94442;
5290
- background-color: #f2dede;
5291
- border-color: #ebccd1;
5292
-}
5293
-.panel-danger > .panel-heading + .panel-collapse > .panel-body {
5294
- border-top-color: #ebccd1;
5295
-}
5296
-.panel-danger > .panel-heading .badge {
5297
- color: #f2dede;
5298
- background-color: #a94442;
5299
-}
5300
-.panel-danger > .panel-footer + .panel-collapse > .panel-body {
5301
- border-bottom-color: #ebccd1;
5302
-}
5303
-.embed-responsive {
5304
- position: relative;
5305
- display: block;
5306
- height: 0;
5307
- padding: 0;
5308
- overflow: hidden;
5309
-}
5310
-.embed-responsive .embed-responsive-item,
5311
-.embed-responsive iframe,
5312
-.embed-responsive embed,
5313
-.embed-responsive object {
5314
- position: absolute;
5315
- top: 0;
5316
- bottom: 0;
5317
- left: 0;
5318
- width: 100%;
5319
- height: 100%;
5320
- border: 0;
5321
-}
5322
-.embed-responsive.embed-responsive-16by9 {
5323
- padding-bottom: 56.25%;
5324
-}
5325
-.embed-responsive.embed-responsive-4by3 {
5326
- padding-bottom: 75%;
5327
-}
5328
-.well {
5329
- min-height: 20px;
5330
- padding: 19px;
5331
- margin-bottom: 20px;
5332
- background-color: #f5f5f5;
5333
- border: 1px solid #e3e3e3;
5334
- border-radius: 4px;
5335
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5336
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5337
-}
5338
-.well blockquote {
5339
- border-color: #ddd;
5340
- border-color: rgba(0, 0, 0, .15);
5341
-}
5342
-.well-lg {
5343
- padding: 24px;
5344
- border-radius: 6px;
5345
-}
5346
-.well-sm {
5347
- padding: 9px;
5348
- border-radius: 3px;
5349
-}
5350
-.close {
5351
- float: right;
5352
- font-size: 21px;
5353
- font-weight: bold;
5354
- line-height: 1;
5355
- color: #000;
5356
- text-shadow: 0 1px 0 #fff;
5357
- filter: alpha(opacity=20);
5358
- opacity: .2;
5359
-}
5360
-.close:hover,
5361
-.close:focus {
5362
- color: #000;
5363
- text-decoration: none;
5364
- cursor: pointer;
5365
- filter: alpha(opacity=50);
5366
- opacity: .5;
5367
-}
5368
-button.close {
5369
- -webkit-appearance: none;
5370
- padding: 0;
5371
- cursor: pointer;
5372
- background: transparent;
5373
- border: 0;
5374
-}
5375
-.modal-open {
5376
- overflow: hidden;
5377
-}
5378
-.modal {
5379
- position: fixed;
5380
- top: 0;
5381
- right: 0;
5382
- bottom: 0;
5383
- left: 0;
5384
- z-index: 1050;
5385
- display: none;
5386
- overflow: hidden;
5387
- -webkit-overflow-scrolling: touch;
5388
- outline: 0;
5389
-}
5390
-.modal.fade .modal-dialog {
5391
- -webkit-transition: -webkit-transform .3s ease-out;
5392
- -o-transition: -o-transform .3s ease-out;
5393
- transition: transform .3s ease-out;
5394
- -webkit-transform: translate3d(0, -25%, 0);
5395
- -o-transform: translate3d(0, -25%, 0);
5396
- transform: translate3d(0, -25%, 0);
5397
-}
5398
-.modal.in .modal-dialog {
5399
- -webkit-transform: translate3d(0, 0, 0);
5400
- -o-transform: translate3d(0, 0, 0);
5401
- transform: translate3d(0, 0, 0);
5402
-}
5403
-.modal-open .modal {
5404
- overflow-x: hidden;
5405
- overflow-y: auto;
5406
-}
5407
-.modal-dialog {
5408
- position: relative;
5409
- width: auto;
5410
- margin: 10px;
5411
-}
5412
-.modal-content {
5413
- position: relative;
5414
- background-color: #fff;
5415
- -webkit-background-clip: padding-box;
5416
- background-clip: padding-box;
5417
- border: 1px solid #999;
5418
- border: 1px solid rgba(0, 0, 0, .2);
5419
- border-radius: 6px;
5420
- outline: 0;
5421
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5422
- box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5423
-}
5424
-.modal-backdrop {
5425
- position: fixed;
5426
- top: 0;
5427
- right: 0;
5428
- bottom: 0;
5429
- left: 0;
5430
- z-index: 1040;
5431
- background-color: #000;
5432
-}
5433
-.modal-backdrop.fade {
5434
- filter: alpha(opacity=0);
5435
- opacity: 0;
5436
-}
5437
-.modal-backdrop.in {
5438
- filter: alpha(opacity=50);
5439
- opacity: .5;
5440
-}
5441
-.modal-header {
5442
- min-height: 16.42857143px;
5443
- padding: 15px;
5444
- border-bottom: 1px solid #e5e5e5;
5445
-}
5446
-.modal-header .close {
5447
- margin-top: -2px;
5448
-}
5449
-.modal-title {
5450
- margin: 0;
5451
- line-height: 1.42857143;
5452
-}
5453
-.modal-body {
5454
- position: relative;
5455
- padding: 15px;
5456
-}
5457
-.modal-footer {
5458
- padding: 15px;
5459
- text-align: right;
5460
- border-top: 1px solid #e5e5e5;
5461
-}
5462
-.modal-footer .btn + .btn {
5463
- margin-bottom: 0;
5464
- margin-left: 5px;
5465
-}
5466
-.modal-footer .btn-group .btn + .btn {
5467
- margin-left: -1px;
5468
-}
5469
-.modal-footer .btn-block + .btn-block {
5470
- margin-left: 0;
5471
-}
5472
-.modal-scrollbar-measure {
5473
- position: absolute;
5474
- top: -9999px;
5475
- width: 50px;
5476
- height: 50px;
5477
- overflow: scroll;
5478
-}
5479
-@media (min-width: 768px) {
5480
- .modal-dialog {
5481
- width: 600px;
5482
- margin: 30px auto;
5483
- }
5484
- .modal-content {
5485
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5486
- box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5487
- }
5488
- .modal-sm {
5489
- width: 300px;
5490
- }
5491
-}
5492
-@media (min-width: 992px) {
5493
- .modal-lg {
5494
- width: 900px;
5495
- }
5496
-}
5497
-.tooltip {
5498
- position: absolute;
5499
- z-index: 1070;
5500
- display: block;
5501
- font-size: 12px;
5502
- line-height: 1.4;
5503
- visibility: visible;
5504
- filter: alpha(opacity=0);
5505
- opacity: 0;
5506
-}
5507
-.tooltip.in {
5508
- filter: alpha(opacity=90);
5509
- opacity: .9;
5510
-}
5511
-.tooltip.top {
5512
- padding: 5px 0;
5513
- margin-top: -3px;
5514
-}
5515
-.tooltip.right {
5516
- padding: 0 5px;
5517
- margin-left: 3px;
5518
-}
5519
-.tooltip.bottom {
5520
- padding: 5px 0;
5521
- margin-top: 3px;
5522
-}
5523
-.tooltip.left {
5524
- padding: 0 5px;
5525
- margin-left: -3px;
5526
-}
5527
-.tooltip-inner {
5528
- max-width: 200px;
5529
- padding: 3px 8px;
5530
- color: #fff;
5531
- text-align: center;
5532
- text-decoration: none;
5533
- background-color: #000;
5534
- border-radius: 4px;
5535
-}
5536
-.tooltip-arrow {
5537
- position: absolute;
5538
- width: 0;
5539
- height: 0;
5540
- border-color: transparent;
5541
- border-style: solid;
5542
-}
5543
-.tooltip.top .tooltip-arrow {
5544
- bottom: 0;
5545
- left: 50%;
5546
- margin-left: -5px;
5547
- border-width: 5px 5px 0;
5548
- border-top-color: #000;
5549
-}
5550
-.tooltip.top-left .tooltip-arrow {
5551
- bottom: 0;
5552
- left: 5px;
5553
- border-width: 5px 5px 0;
5554
- border-top-color: #000;
5555
-}
5556
-.tooltip.top-right .tooltip-arrow {
5557
- right: 5px;
5558
- bottom: 0;
5559
- border-width: 5px 5px 0;
5560
- border-top-color: #000;
5561
-}
5562
-.tooltip.right .tooltip-arrow {
5563
- top: 50%;
5564
- left: 0;
5565
- margin-top: -5px;
5566
- border-width: 5px 5px 5px 0;
5567
- border-right-color: #000;
5568
-}
5569
-.tooltip.left .tooltip-arrow {
5570
- top: 50%;
5571
- right: 0;
5572
- margin-top: -5px;
5573
- border-width: 5px 0 5px 5px;
5574
- border-left-color: #000;
5575
-}
5576
-.tooltip.bottom .tooltip-arrow {
5577
- top: 0;
5578
- left: 50%;
5579
- margin-left: -5px;
5580
- border-width: 0 5px 5px;
5581
- border-bottom-color: #000;
5582
-}
5583
-.tooltip.bottom-left .tooltip-arrow {
5584
- top: 0;
5585
- left: 5px;
5586
- border-width: 0 5px 5px;
5587
- border-bottom-color: #000;
5588
-}
5589
-.tooltip.bottom-right .tooltip-arrow {
5590
- top: 0;
5591
- right: 5px;
5592
- border-width: 0 5px 5px;
5593
- border-bottom-color: #000;
5594
-}
5595
-.popover {
5596
- position: absolute;
5597
- top: 0;
5598
- left: 0;
5599
- z-index: 1060;
5600
- display: none;
5601
- max-width: 276px;
5602
- padding: 1px;
5603
- text-align: left;
5604
- white-space: normal;
5605
- background-color: #fff;
5606
- -webkit-background-clip: padding-box;
5607
- background-clip: padding-box;
5608
- border: 1px solid #ccc;
5609
- border: 1px solid rgba(0, 0, 0, .2);
5610
- border-radius: 6px;
5611
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
5612
- box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
5613
-}
5614
-.popover.top {
5615
- margin-top: -10px;
5616
-}
5617
-.popover.right {
5618
- margin-left: 10px;
5619
-}
5620
-.popover.bottom {
5621
- margin-top: 10px;
5622
-}
5623
-.popover.left {
5624
- margin-left: -10px;
5625
-}
5626
-.popover-title {
5627
- padding: 8px 14px;
5628
- margin: 0;
5629
- font-size: 14px;
5630
- font-weight: normal;
5631
- line-height: 18px;
5632
- background-color: #f7f7f7;
5633
- border-bottom: 1px solid #ebebeb;
5634
- border-radius: 5px 5px 0 0;
5635
-}
5636
-.popover-content {
5637
- padding: 9px 14px;
5638
-}
5639
-.popover > .arrow,
5640
-.popover > .arrow:after {
5641
- position: absolute;
5642
- display: block;
5643
- width: 0;
5644
- height: 0;
5645
- border-color: transparent;
5646
- border-style: solid;
5647
-}
5648
-.popover > .arrow {
5649
- border-width: 11px;
5650
-}
5651
-.popover > .arrow:after {
5652
- content: "";
5653
- border-width: 10px;
5654
-}
5655
-.popover.top > .arrow {
5656
- bottom: -11px;
5657
- left: 50%;
5658
- margin-left: -11px;
5659
- border-top-color: #999;
5660
- border-top-color: rgba(0, 0, 0, .25);
5661
- border-bottom-width: 0;
5662
-}
5663
-.popover.top > .arrow:after {
5664
- bottom: 1px;
5665
- margin-left: -10px;
5666
- content: " ";
5667
- border-top-color: #fff;
5668
- border-bottom-width: 0;
5669
-}
5670
-.popover.right > .arrow {
5671
- top: 50%;
5672
- left: -11px;
5673
- margin-top: -11px;
5674
- border-right-color: #999;
5675
- border-right-color: rgba(0, 0, 0, .25);
5676
- border-left-width: 0;
5677
-}
5678
-.popover.right > .arrow:after {
5679
- bottom: -10px;
5680
- left: 1px;
5681
- content: " ";
5682
- border-right-color: #fff;
5683
- border-left-width: 0;
5684
-}
5685
-.popover.bottom > .arrow {
5686
- top: -11px;
5687
- left: 50%;
5688
- margin-left: -11px;
5689
- border-top-width: 0;
5690
- border-bottom-color: #999;
5691
- border-bottom-color: rgba(0, 0, 0, .25);
5692
-}
5693
-.popover.bottom > .arrow:after {
5694
- top: 1px;
5695
- margin-left: -10px;
5696
- content: " ";
5697
- border-top-width: 0;
5698
- border-bottom-color: #fff;
5699
-}
5700
-.popover.left > .arrow {
5701
- top: 50%;
5702
- right: -11px;
5703
- margin-top: -11px;
5704
- border-right-width: 0;
5705
- border-left-color: #999;
5706
- border-left-color: rgba(0, 0, 0, .25);
5707
-}
5708
-.popover.left > .arrow:after {
5709
- right: 1px;
5710
- bottom: -10px;
5711
- content: " ";
5712
- border-right-width: 0;
5713
- border-left-color: #fff;
5714
-}
5715
-.carousel {
5716
- position: relative;
5717
-}
5718
-.carousel-inner {
5719
- position: relative;
5720
- width: 100%;
5721
- overflow: hidden;
5722
-}
5723
-.carousel-inner > .item {
5724
- position: relative;
5725
- display: none;
5726
- -webkit-transition: .6s ease-in-out left;
5727
- -o-transition: .6s ease-in-out left;
5728
- transition: .6s ease-in-out left;
5729
-}
5730
-.carousel-inner > .item > img,
5731
-.carousel-inner > .item > a > img {
5732
- line-height: 1;
5733
-}
5734
-.carousel-inner > .active,
5735
-.carousel-inner > .next,
5736
-.carousel-inner > .prev {
5737
- display: block;
5738
-}
5739
-.carousel-inner > .active {
5740
- left: 0;
5741
-}
5742
-.carousel-inner > .next,
5743
-.carousel-inner > .prev {
5744
- position: absolute;
5745
- top: 0;
5746
- width: 100%;
5747
-}
5748
-.carousel-inner > .next {
5749
- left: 100%;
5750
-}
5751
-.carousel-inner > .prev {
5752
- left: -100%;
5753
-}
5754
-.carousel-inner > .next.left,
5755
-.carousel-inner > .prev.right {
5756
- left: 0;
5757
-}
5758
-.carousel-inner > .active.left {
5759
- left: -100%;
5760
-}
5761
-.carousel-inner > .active.right {
5762
- left: 100%;
5763
-}
5764
-.carousel-control {
5765
- position: absolute;
5766
- top: 0;
5767
- bottom: 0;
5768
- left: 0;
5769
- width: 15%;
5770
- font-size: 20px;
5771
- color: #fff;
5772
- text-align: center;
5773
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
5774
- filter: alpha(opacity=50);
5775
- opacity: .5;
5776
-}
5777
-.carousel-control.left {
5778
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5779
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5780
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
5781
- background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5782
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
5783
- background-repeat: repeat-x;
5784
-}
5785
-.carousel-control.right {
5786
- right: 0;
5787
- left: auto;
5788
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5789
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5790
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
5791
- background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5792
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
5793
- background-repeat: repeat-x;
5794
-}
5795
-.carousel-control:hover,
5796
-.carousel-control:focus {
5797
- color: #fff;
5798
- text-decoration: none;
5799
- filter: alpha(opacity=90);
5800
- outline: 0;
5801
- opacity: .9;
5802
-}
5803
-.carousel-control .icon-prev,
5804
-.carousel-control .icon-next,
5805
-.carousel-control .glyphicon-chevron-left,
5806
-.carousel-control .glyphicon-chevron-right {
5807
- position: absolute;
5808
- top: 50%;
5809
- z-index: 5;
5810
- display: inline-block;
5811
-}
5812
-.carousel-control .icon-prev,
5813
-.carousel-control .glyphicon-chevron-left {
5814
- left: 50%;
5815
- margin-left: -10px;
5816
-}
5817
-.carousel-control .icon-next,
5818
-.carousel-control .glyphicon-chevron-right {
5819
- right: 50%;
5820
- margin-right: -10px;
5821
-}
5822
-.carousel-control .icon-prev,
5823
-.carousel-control .icon-next {
5824
- width: 20px;
5825
- height: 20px;
5826
- margin-top: -10px;
5827
- font-family: serif;
5828
-}
5829
-.carousel-control .icon-prev:before {
5830
- content: '\2039';
5831
-}
5832
-.carousel-control .icon-next:before {
5833
- content: '\203a';
5834
-}
5835
-.carousel-indicators {
5836
- position: absolute;
5837
- bottom: 10px;
5838
- left: 50%;
5839
- z-index: 15;
5840
- width: 60%;
5841
- padding-left: 0;
5842
- margin-left: -30%;
5843
- text-align: center;
5844
- list-style: none;
5845
-}
5846
-.carousel-indicators li {
5847
- display: inline-block;
5848
- width: 10px;
5849
- height: 10px;
5850
- margin: 1px;
5851
- text-indent: -999px;
5852
- cursor: pointer;
5853
- background-color: #000 \9;
5854
- background-color: rgba(0, 0, 0, 0);
5855
- border: 1px solid #fff;
5856
- border-radius: 10px;
5857
-}
5858
-.carousel-indicators .active {
5859
- width: 12px;
5860
- height: 12px;
5861
- margin: 0;
5862
- background-color: #fff;
5863
-}
5864
-.carousel-caption {
5865
- position: absolute;
5866
- right: 15%;
5867
- bottom: 20px;
5868
- left: 15%;
5869
- z-index: 10;
5870
- padding-top: 20px;
5871
- padding-bottom: 20px;
5872
- color: #fff;
5873
- text-align: center;
5874
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
5875
-}
5876
-.carousel-caption .btn {
5877
- text-shadow: none;
5878
-}
5879
-@media screen and (min-width: 768px) {
5880
- .carousel-control .glyphicon-chevron-left,
5881
- .carousel-control .glyphicon-chevron-right,
5882
- .carousel-control .icon-prev,
5883
- .carousel-control .icon-next {
5884
- width: 30px;
5885
- height: 30px;
5886
- margin-top: -15px;
5887
- font-size: 30px;
5888
- }
5889
- .carousel-control .glyphicon-chevron-left,
5890
- .carousel-control .icon-prev {
5891
- margin-left: -15px;
5892
- }
5893
- .carousel-control .glyphicon-chevron-right,
5894
- .carousel-control .icon-next {
5895
- margin-right: -15px;
5896
- }
5897
- .carousel-caption {
5898
- right: 20%;
5899
- left: 20%;
5900
- padding-bottom: 30px;
5901
- }
5902
- .carousel-indicators {
5903
- bottom: 20px;
5904
- }
5905
-}
5906
-.clearfix:before,
5907
-.clearfix:after,
5908
-.dl-horizontal dd:before,
5909
-.dl-horizontal dd:after,
5910
-.container:before,
5911
-.container:after,
5912
-.container-fluid:before,
5913
-.container-fluid:after,
5914
-.row:before,
5915
-.row:after,
5916
-.form-horizontal .form-group:before,
5917
-.form-horizontal .form-group:after,
5918
-.btn-toolbar:before,
5919
-.btn-toolbar:after,
5920
-.btn-group-vertical > .btn-group:before,
5921
-.btn-group-vertical > .btn-group:after,
5922
-.nav:before,
5923
-.nav:after,
5924
-.navbar:before,
5925
-.navbar:after,
5926
-.navbar-header:before,
5927
-.navbar-header:after,
5928
-.navbar-collapse:before,
5929
-.navbar-collapse:after,
5930
-.pager:before,
5931
-.pager:after,
5932
-.panel-body:before,
5933
-.panel-body:after,
5934
-.modal-footer:before,
5935
-.modal-footer:after {
5936
- display: table;
5937
- content: " ";
5938
-}
5939
-.clearfix:after,
5940
-.dl-horizontal dd:after,
5941
-.container:after,
5942
-.container-fluid:after,
5943
-.row:after,
5944
-.form-horizontal .form-group:after,
5945
-.btn-toolbar:after,
5946
-.btn-group-vertical > .btn-group:after,
5947
-.nav:after,
5948
-.navbar:after,
5949
-.navbar-header:after,
5950
-.navbar-collapse:after,
5951
-.pager:after,
5952
-.panel-body:after,
5953
-.modal-footer:after {
5954
- clear: both;
5955
-}
5956
-.center-block {
5957
- display: block;
5958
- margin-right: auto;
5959
- margin-left: auto;
5960
-}
5961
-.pull-right {
5962
- float: right !important;
5963
-}
5964
-.pull-left {
5965
- float: left !important;
5966
-}
5967
-.hide {
5968
- display: none !important;
5969
-}
5970
-.show {
5971
- display: block !important;
5972
-}
5973
-.invisible {
5974
- visibility: hidden;
5975
-}
5976
-.text-hide {
5977
- font: 0/0 a;
5978
- color: transparent;
5979
- text-shadow: none;
5980
- background-color: transparent;
5981
- border: 0;
5982
-}
5983
-.hidden {
5984
- display: none !important;
5985
- visibility: hidden !important;
5986
-}
5987
-.affix {
5988
- position: fixed;
5989
- -webkit-transform: translate3d(0, 0, 0);
5990
- -o-transform: translate3d(0, 0, 0);
5991
- transform: translate3d(0, 0, 0);
5992
-}
5993
-@-ms-viewport {
5994
- width: device-width;
5995
-}
5996
-.visible-xs,
5997
-.visible-sm,
5998
-.visible-md,
5999
-.visible-lg {
6000
- display: none !important;
6001
-}
6002
-.visible-xs-block,
6003
-.visible-xs-inline,
6004
-.visible-xs-inline-block,
6005
-.visible-sm-block,
6006
-.visible-sm-inline,
6007
-.visible-sm-inline-block,
6008
-.visible-md-block,
6009
-.visible-md-inline,
6010
-.visible-md-inline-block,
6011
-.visible-lg-block,
6012
-.visible-lg-inline,
6013
-.visible-lg-inline-block {
6014
- display: none !important;
6015
-}
6016
-@media (max-width: 767px) {
6017
- .visible-xs {
6018
- display: block !important;
6019
- }
6020
- table.visible-xs {
6021
- display: table;
6022
- }
6023
- tr.visible-xs {
6024
- display: table-row !important;
6025
- }
6026
- th.visible-xs,
6027
- td.visible-xs {
6028
- display: table-cell !important;
6029
- }
6030
-}
6031
-@media (max-width: 767px) {
6032
- .visible-xs-block {
6033
- display: block !important;
6034
- }
6035
-}
6036
-@media (max-width: 767px) {
6037
- .visible-xs-inline {
6038
- display: inline !important;
6039
- }
6040
-}
6041
-@media (max-width: 767px) {
6042
- .visible-xs-inline-block {
6043
- display: inline-block !important;
6044
- }
6045
-}
6046
-@media (min-width: 768px) and (max-width: 991px) {
6047
- .visible-sm {
6048
- display: block !important;
6049
- }
6050
- table.visible-sm {
6051
- display: table;
6052
- }
6053
- tr.visible-sm {
6054
- display: table-row !important;
6055
- }
6056
- th.visible-sm,
6057
- td.visible-sm {
6058
- display: table-cell !important;
6059
- }
6060
-}
6061
-@media (min-width: 768px) and (max-width: 991px) {
6062
- .visible-sm-block {
6063
- display: block !important;
6064
- }
6065
-}
6066
-@media (min-width: 768px) and (max-width: 991px) {
6067
- .visible-sm-inline {
6068
- display: inline !important;
6069
- }
6070
-}
6071
-@media (min-width: 768px) and (max-width: 991px) {
6072
- .visible-sm-inline-block {
6073
- display: inline-block !important;
6074
- }
6075
-}
6076
-@media (min-width: 992px) and (max-width: 1199px) {
6077
- .visible-md {
6078
- display: block !important;
6079
- }
6080
- table.visible-md {
6081
- display: table;
6082
- }
6083
- tr.visible-md {
6084
- display: table-row !important;
6085
- }
6086
- th.visible-md,
6087
- td.visible-md {
6088
- display: table-cell !important;
6089
- }
6090
-}
6091
-@media (min-width: 992px) and (max-width: 1199px) {
6092
- .visible-md-block {
6093
- display: block !important;
6094
- }
6095
-}
6096
-@media (min-width: 992px) and (max-width: 1199px) {
6097
- .visible-md-inline {
6098
- display: inline !important;
6099
- }
6100
-}
6101
-@media (min-width: 992px) and (max-width: 1199px) {
6102
- .visible-md-inline-block {
6103
- display: inline-block !important;
6104
- }
6105
-}
6106
-@media (min-width: 1200px) {
6107
- .visible-lg {
6108
- display: block !important;
6109
- }
6110
- table.visible-lg {
6111
- display: table;
6112
- }
6113
- tr.visible-lg {
6114
- display: table-row !important;
6115
- }
6116
- th.visible-lg,
6117
- td.visible-lg {
6118
- display: table-cell !important;
6119
- }
6120
-}
6121
-@media (min-width: 1200px) {
6122
- .visible-lg-block {
6123
- display: block !important;
6124
- }
6125
-}
6126
-@media (min-width: 1200px) {
6127
- .visible-lg-inline {
6128
- display: inline !important;
6129
- }
6130
-}
6131
-@media (min-width: 1200px) {
6132
- .visible-lg-inline-block {
6133
- display: inline-block !important;
6134
- }
6135
-}
6136
-@media (max-width: 767px) {
6137
- .hidden-xs {
6138
- display: none !important;
6139
- }
6140
-}
6141
-@media (min-width: 768px) and (max-width: 991px) {
6142
- .hidden-sm {
6143
- display: none !important;
6144
- }
6145
-}
6146
-@media (min-width: 992px) and (max-width: 1199px) {
6147
- .hidden-md {
6148
- display: none !important;
6149
- }
6150
-}
6151
-@media (min-width: 1200px) {
6152
- .hidden-lg {
6153
- display: none !important;
6154
- }
6155
-}
6156
-.visible-print {
6157
- display: none !important;
6158
-}
6159
-@media print {
6160
- .visible-print {
6161
- display: block !important;
6162
- }
6163
- table.visible-print {
6164
- display: table;
6165
- }
6166
- tr.visible-print {
6167
- display: table-row !important;
6168
- }
6169
- th.visible-print,
6170
- td.visible-print {
6171
- display: table-cell !important;
6172
- }
6173
-}
6174
-.visible-print-block {
6175
- display: none !important;
6176
-}
6177
-@media print {
6178
- .visible-print-block {
6179
- display: block !important;
6180
- }
6181
-}
6182
-.visible-print-inline {
6183
- display: none !important;
6184
-}
6185
-@media print {
6186
- .visible-print-inline {
6187
- display: inline !important;
6188
- }
6189
-}
6190
-.visible-print-inline-block {
6191
- display: none !important;
6192
-}
6193
-@media print {
6194
- .visible-print-inline-block {
6195
- display: inline-block !important;
6196
- }
6197
-}
6198
-@media print {
6199
- .hidden-print {
6200
- display: none !important;
6201
- }
6202
-}
6203
-/*# sourceMappingURL=bootstrap.css.map */
securis/src/main/webapp/css/bootstrap.css.map
deleted file mode 100644
....@@ -1 +0,0 @@
1
-{"version":3,"file":"bootstrap.css","sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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;EAAW,kBAAA;EHoR9C;AGnRmC;EAAW,kBAAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EAAW,kBAAA;EHgjB9C;AG/iBmC;EAAW,kBAAA;EHkjB9C;AGjjBmC;EAAW,kBAAA;EHojB9C;AGnjBmC;EAAW,kBAAA;EHsjB9C;AGrjBmC;EAAW,kBAAA;EHwjB9C;AGvjBmC;EAAW,kBAAA;EH0jB9C;AGzjBmC;EAAW,kBAAA;EH4jB9C;AG3jBmC;EAAW,kBAAA;EH8jB9C;AG7jBmC;EAAW,kBAAA;EHgkB9C;AG/jBmC;EAAW,kBAAA;EHkkB9C;AGjkBmC;EAAW,kBAAA;EHokB9C;AGnkBmC;EAAW,kBAAA;EHskB9C;AGrkBmC;EAAW,kBAAA;EHwkB9C;AGvkBmC;EAAW,kBAAA;EH0kB9C;AGzkBmC;EAAW,kBAAA;EH4kB9C;AG3kBmC;EAAW,kBAAA;EH8kB9C;AG7kBmC;EAAW,kBAAA;EHglB9C;AG/kBmC;EAAW,kBAAA;EHklB9C;AGjlBmC;EAAW,kBAAA;EHolB9C;AGnlBmC;EAAW,kBAAA;EHslB9C;AGrlBmC;EAAW,kBAAA;EHwlB9C;AGvlBmC;EAAW,kBAAA;EH0lB9C;AGzlBmC;EAAW,kBAAA;EH4lB9C;AG3lBmC;EAAW,kBAAA;EH8lB9C;AG7lBmC;EAAW,kBAAA;EHgmB9C;AG/lBmC;EAAW,kBAAA;EHkmB9C;AGjmBmC;EAAW,kBAAA;EHomB9C;AGnmBmC;EAAW,kBAAA;EHsmB9C;AGrmBmC;EAAW,kBAAA;EHwmB9C;AGvmBmC;EAAW,kBAAA;EH0mB9C;AGzmBmC;EAAW,kBAAA;EH4mB9C;AG3mBmC;EAAW,kBAAA;EH8mB9C;AG7mBmC;EAAW,kBAAA;EHgnB9C;AG/mBmC;EAAW,kBAAA;EHknB9C;AGjnBmC;EAAW,kBAAA;EHonB9C;AGnnBmC;EAAW,kBAAA;EHsnB9C;AGrnBmC;EAAW,kBAAA;EHwnB9C;AGvnBmC;EAAW,kBAAA;EH0nB9C;AIx1BD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL2xBT;AI11BD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELiyBT;AIx1BD;EACE,iBAAA;EACA,+CAAA;EJ01BD;AIv1BD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJy1BD;AIr1BD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJu1BD;AIj1BD;EACE,gBAAA;EACA,uBAAA;EJm1BD;AIj1BC;;EAEE,gBAAA;EACA,4BAAA;EJm1BH;AIh1BC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENu4BD;AI10BD;EACE,WAAA;EJ40BD;AIt0BD;EACE,wBAAA;EJw0BD;AIp0BD;;;;;EGvEE,gBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPk5BD;AIz0BD;EACE,oBAAA;EJ20BD;AIr0BD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC0FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEpLR,uBAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EPm6BD;AIt0BD;EACE,oBAAA;EJw0BD;AIl0BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJo0BD;AI5zBD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ8zBD;AItzBC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJwzBH;AQn8BD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+8BD;AQp9BD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERq+BH;AQj+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERs+BD;AQ1+BD;;;;;;;;;;;;EAQI,gBAAA;ERg/BH;AQ7+BD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERk/BD;AQt/BD;;;;;;;;;;;;EAQI,gBAAA;ER4/BH;AQx/BD;;EAAU,iBAAA;ER4/BT;AQ3/BD;;EAAU,iBAAA;ER+/BT;AQ9/BD;;EAAU,iBAAA;ERkgCT;AQjgCD;;EAAU,iBAAA;ERqgCT;AQpgCD;;EAAU,iBAAA;ERwgCT;AQvgCD;;EAAU,iBAAA;ER2gCT;AQrgCD;EACE,kBAAA;ERugCD;AQpgCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERsgCD;AQjgCD;EAAA;IAFI,iBAAA;IRugCD;EACF;AQ//BD;;EAEE,gBAAA;ERigCD;AQ7/BD;EACE,oBAAA;ER+/BD;AQ5/BD;;EAEE,2BAAA;EACA,eAAA;ER8/BD;AQ1/BD;EAAuB,kBAAA;ER6/BtB;AQ5/BD;EAAuB,mBAAA;ER+/BtB;AQ9/BD;EAAuB,oBAAA;ERigCtB;AQhgCD;EAAuB,qBAAA;ERmgCtB;AQlgCD;EAAuB,qBAAA;ERqgCtB;AQlgCD;EAAuB,2BAAA;ERqgCtB;AQpgCD;EAAuB,2BAAA;ERugCtB;AQtgCD;EAAuB,4BAAA;ERygCtB;AQtgCD;EACE,gBAAA;ERwgCD;AQtgCD;EC1GE,gBAAA;ETmnCD;ASlnCC;EACE,gBAAA;ETonCH;AQzgCD;EC7GE,gBAAA;ETynCD;ASxnCC;EACE,gBAAA;ET0nCH;AQ5gCD;EChHE,gBAAA;ET+nCD;AS9nCC;EACE,gBAAA;ETgoCH;AQ/gCD;ECnHE,gBAAA;ETqoCD;ASpoCC;EACE,gBAAA;ETsoCH;AQlhCD;ECtHE,gBAAA;ET2oCD;AS1oCC;EACE,gBAAA;ET4oCH;AQjhCD;EAGE,aAAA;EEhIA,2BAAA;EVkpCD;AUjpCC;EACE,2BAAA;EVmpCH;AQlhCD;EEnIE,2BAAA;EVwpCD;AUvpCC;EACE,2BAAA;EVypCH;AQrhCD;EEtIE,2BAAA;EV8pCD;AU7pCC;EACE,2BAAA;EV+pCH;AQxhCD;EEzIE,2BAAA;EVoqCD;AUnqCC;EACE,2BAAA;EVqqCH;AQ3hCD;EE5IE,2BAAA;EV0qCD;AUzqCC;EACE,2BAAA;EV2qCH;AQzhCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER2hCD;AQnhCD;;EAEE,eAAA;EACA,qBAAA;ERqhCD;AQxhCD;;;;EAMI,kBAAA;ERwhCH;AQjhCD;EACE,iBAAA;EACA,kBAAA;ERmhCD;AQ/gCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERkhCD;AQphCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERkhCH;AQ7gCD;EACE,eAAA;EACA,qBAAA;ER+gCD;AQ7gCD;;EAEE,yBAAA;ER+gCD;AQ7gCD;EACE,mBAAA;ER+gCD;AQ7gCD;EACE,gBAAA;ER+gCD;AQt/BD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IG3NJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IXguCC;EQhgCH;IAHM,oBAAA;IRsgCH;EACF;AQ7/BD;;EAGE,cAAA;EACA,mCAAA;ER8/BD;AQ5/BD;EACE,gBAAA;EACA,2BAAA;ER8/BD;AQ1/BD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER4/BD;AQv/BG;;;EACE,kBAAA;ER2/BL;AQrgCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERu/BH;AQr/BG;;;EACE,wBAAA;ERy/BL;AQj/BD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERm/BD;AQ7+BG;;;;;;EAAW,aAAA;ERq/Bd;AQp/BG;;;;;;EACE,wBAAA;ER2/BL;AQr/BD;;EAEE,aAAA;ERu/BD;AQn/BD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERq/BD;AYtyCD;;;;EAIE,gEAAA;EZwyCD;AYpyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZsyCD;AYlyCD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;EAAA,gDAAA;EZoyCD;AY1yCD;EASI,YAAA;EACA,iBAAA;EACA,0BAAA;EAAA,kBAAA;EZoyCH;AY/xCD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZiyCD;AY5yCD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZgyCH;AY3xCD;EACE,mBAAA;EACA,oBAAA;EZ6xCD;Aat1CD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed41CD;Aat1CC;EAAA;IAFE,cAAA;Ib41CD;EACF;Aax1CC;EAAA;IAFE,cAAA;Ib81CD;EACF;Aa11CD;EAAA;IAFI,eAAA;Ibg2CD;EACF;Aav1CD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Edi3CD;Aap1CD;ECvBE,oBAAA;EACA,qBAAA;Ed82CD;Ae92CG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;Ef82CL;Ae91CG;EACE,aAAA;Efg2CL;Aez1CC;EACE,aAAA;Ef21CH;Ae51CC;EACE,qBAAA;Ef81CH;Ae/1CC;EACE,qBAAA;Efi2CH;Ael2CC;EACE,YAAA;Efo2CH;Aer2CC;EACE,qBAAA;Efu2CH;Aex2CC;EACE,qBAAA;Ef02CH;Ae32CC;EACE,YAAA;Ef62CH;Ae92CC;EACE,qBAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,YAAA;Efs3CH;Aev3CC;EACE,qBAAA;Efy3CH;Ae13CC;EACE,oBAAA;Ef43CH;Ae92CC;EACE,aAAA;Efg3CH;Aej3CC;EACE,qBAAA;Efm3CH;Aep3CC;EACE,qBAAA;Efs3CH;Aev3CC;EACE,YAAA;Efy3CH;Ae13CC;EACE,qBAAA;Ef43CH;Ae73CC;EACE,qBAAA;Ef+3CH;Aeh4CC;EACE,YAAA;Efk4CH;Aen4CC;EACE,qBAAA;Efq4CH;Aet4CC;EACE,qBAAA;Efw4CH;Aez4CC;EACE,YAAA;Ef24CH;Ae54CC;EACE,qBAAA;Ef84CH;Ae/4CC;EACE,oBAAA;Efi5CH;Ae74CC;EACE,aAAA;Ef+4CH;Ae/5CC;EACE,YAAA;Efi6CH;Ael6CC;EACE,oBAAA;Efo6CH;Aer6CC;EACE,oBAAA;Efu6CH;Aex6CC;EACE,WAAA;Ef06CH;Ae36CC;EACE,oBAAA;Ef66CH;Ae96CC;EACE,oBAAA;Efg7CH;Aej7CC;EACE,WAAA;Efm7CH;Aep7CC;EACE,oBAAA;Efs7CH;Aev7CC;EACE,oBAAA;Efy7CH;Ae17CC;EACE,WAAA;Ef47CH;Ae77CC;EACE,oBAAA;Ef+7CH;Aeh8CC;EACE,mBAAA;Efk8CH;Ae97CC;EACE,YAAA;Efg8CH;Ael7CC;EACE,mBAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,2BAAA;Ef07CH;Ae37CC;EACE,kBAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,2BAAA;Efm8CH;Aep8CC;EACE,kBAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,2BAAA;Ef48CH;Ae78CC;EACE,kBAAA;Ef+8CH;Aeh9CC;EACE,2BAAA;Efk9CH;Aen9CC;EACE,0BAAA;Efq9CH;Aet9CC;EACE,iBAAA;Efw9CH;Aa59CD;EE9BI;IACE,aAAA;If6/CH;Eet/CD;IACE,aAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,qBAAA;If8/CD;Ee//CD;IACE,YAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,qBAAA;IfugDD;EexgDD;IACE,YAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,oBAAA;IfyhDD;Ee3gDD;IACE,aAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,YAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,qBAAA;If4hDD;Ee7hDD;IACE,YAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,qBAAA;IfqiDD;EetiDD;IACE,YAAA;IfwiDD;EeziDD;IACE,qBAAA;If2iDD;Ee5iDD;IACE,oBAAA;If8iDD;Ee1iDD;IACE,aAAA;If4iDD;Ee5jDD;IACE,YAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,oBAAA;IfokDD;EerkDD;IACE,WAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,oBAAA;If6kDD;Ee9kDD;IACE,WAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,oBAAA;IfslDD;EevlDD;IACE,WAAA;IfylDD;Ee1lDD;IACE,oBAAA;If4lDD;Ee7lDD;IACE,mBAAA;If+lDD;Ee3lDD;IACE,YAAA;If6lDD;Ee/kDD;IACE,mBAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,2BAAA;IfulDD;EexlDD;IACE,kBAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,2BAAA;IfgmDD;EejmDD;IACE,kBAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,2BAAA;IfymDD;Ee1mDD;IACE,kBAAA;If4mDD;Ee7mDD;IACE,2BAAA;If+mDD;EehnDD;IACE,0BAAA;IfknDD;EennDD;IACE,iBAAA;IfqnDD;EACF;AajnDD;EEvCI;IACE,aAAA;If2pDH;EeppDD;IACE,aAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,qBAAA;If4pDD;Ee7pDD;IACE,YAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,qBAAA;IfqqDD;EetqDD;IACE,YAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,oBAAA;IfurDD;EezqDD;IACE,aAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,YAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,qBAAA;If0rDD;Ee3rDD;IACE,YAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,qBAAA;IfmsDD;EepsDD;IACE,YAAA;IfssDD;EevsDD;IACE,qBAAA;IfysDD;Ee1sDD;IACE,oBAAA;If4sDD;EexsDD;IACE,aAAA;If0sDD;Ee1tDD;IACE,YAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,oBAAA;IfkuDD;EenuDD;IACE,WAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,oBAAA;If2uDD;Ee5uDD;IACE,WAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,oBAAA;IfovDD;EervDD;IACE,WAAA;IfuvDD;EexvDD;IACE,oBAAA;If0vDD;Ee3vDD;IACE,mBAAA;If6vDD;EezvDD;IACE,YAAA;If2vDD;Ee7uDD;IACE,mBAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,2BAAA;IfqvDD;EetvDD;IACE,kBAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,2BAAA;If8vDD;Ee/vDD;IACE,kBAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,2BAAA;IfuwDD;EexwDD;IACE,kBAAA;If0wDD;Ee3wDD;IACE,2BAAA;If6wDD;Ee9wDD;IACE,0BAAA;IfgxDD;EejxDD;IACE,iBAAA;IfmxDD;EACF;AaxwDD;EE9CI;IACE,aAAA;IfyzDH;EelzDD;IACE,aAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,qBAAA;If0zDD;Ee3zDD;IACE,YAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,qBAAA;Ifm0DD;Eep0DD;IACE,YAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,oBAAA;Ifq1DD;Eev0DD;IACE,aAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,YAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,qBAAA;Ifw1DD;Eez1DD;IACE,YAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,qBAAA;Ifi2DD;Eel2DD;IACE,YAAA;Ifo2DD;Eer2DD;IACE,qBAAA;Ifu2DD;Eex2DD;IACE,oBAAA;If02DD;Eet2DD;IACE,aAAA;Ifw2DD;Eex3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AAA;EACI,uBAAA;ErBqsFT;AoB9qFD;EClBI,gBAAA;EACA,2BAAA;ErBmsFH;AoB/qFD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuuFD;AqBruFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuuFP;AqBruFC;;;EAGE,wBAAA;ErBuuFH;AqBluFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErB8uFT;AoBptFD;ECrBI,gBAAA;EACA,2BAAA;ErB4uFH;AoBptFD;ECzDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBgxFD;AqB9wFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBgxFP;AqB9wFC;;;EAGE,wBAAA;ErBgxFH;AqB3wFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBuxFT;AoBzvFD;ECzBI,gBAAA;EACA,2BAAA;ErBqxFH;AoBzvFD;EC7DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErByzFD;AqBvzFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErByzFP;AqBvzFC;;;EAGE,wBAAA;ErByzFH;AqBpzFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBg0FT;AoB9xFD;EC7BI,gBAAA;EACA,2BAAA;ErB8zFH;AoB9xFD;ECjEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBk2FD;AqBh2FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBk2FP;AqBh2FC;;;EAGE,wBAAA;ErBk2FH;AqB71FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBy2FT;AoBn0FD;ECjCI,gBAAA;EACA,2BAAA;ErBu2FH;AoBn0FD;ECrEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB24FD;AqBz4FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB24FP;AqBz4FC;;;EAGE,wBAAA;ErB24FH;AqBt4FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBk5FT;AoBx2FD;ECrCI,gBAAA;EACA,2BAAA;ErBg5FH;AoBn2FD;EACE,gBAAA;EACA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","sourcesContent":[null,"/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n * {\n text-shadow: none !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links for images, or javascript/internal links\n a[href^=\"javascript:\"]:after,\n a[href^=\"#\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .table {\n td,\n th {\n background-color: #fff !important;\n }\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n width: 100% \\9; // Force IE10 and below to size SVG images correctly\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\n// Undo browser default styling\ncite {\n font-style: normal;\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n content: \"\";\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n > td,\n > th {\n background-color: @table-bg-accent;\n }\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n > td,\n > th {\n background-color: @table-bg-hover;\n }\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n overflow-x: auto;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n -webkit-overflow-scrolling: touch;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: not-allowed;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned.\n// As a workaround, we set a pixel line-height that matches the\n// given height of the input. Since this fucks up everything else, we have to\n// appropriately reset it for Internet Explorer and the size variations.\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n line-height: @input-height-base;\n // IE8+ misaligns the text within date inputs, so we reset\n line-height: @line-height-base ~\"\\0\";\n\n &.input-sm {\n line-height: @input-height-small;\n }\n &.input-lg {\n line-height: @input-height-large;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n min-height: @line-height-computed; // clear the floating input if there is no label text\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: not-allowed;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: not-allowed;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: not-allowed;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n}\n.input-lg + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Reposition feedback icon if label is hidden with \"screenreader only\" state\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match (which also avoids\n // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n right: (@grid-gutter-width / 2);\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n }\n }\n .form-control {\n &:extend(.input-lg);\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n }\n }\n .form-control {\n &:extend(.input-sm);\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: not-allowed;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n cursor: pointer;\n border-radius: 0;\n\n &,\n &:active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition(height .35s ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base solid;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: not-allowed;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base solid;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n &:focus {\n // Remove focus outline when dropdown JS adds it after closing the menu\n outline: 0;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `opacity`. We cannot\n// use `display: none;` or `visibility: hidden;` as that also hides the popover.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 for more.\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n position: absolute;\n z-index: -1;\n .opacity(0);\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n .translate3d(0, 0, 0);\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: 0;\n }\n }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n .translate3d(0, 0, 0);\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: not-allowed;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: not-allowed;\n }\n }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n \n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n .btn-xs & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n a.list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n// Account for lower percentages\n.progress-bar {\n &[aria-valuenow=\"1\"],\n &[aria-valuenow=\"2\"] {\n min-width: 30px;\n }\n\n &[aria-valuenow=\"0\"] {\n color: @gray-light;\n min-width: 30px;\n background-color: transparent;\n background-image: none;\n box-shadow: none;\n }\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n > .pull-left {\n margin-right: 10px;\n }\n > .pull-right {\n margin-left: 10px;\n }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse > .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n\n // Modifier class for 16:9 aspect ratio\n &.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n }\n\n // Modifier class for 4:3 aspect ratio\n &.embed-responsive-4by3 {\n padding-bottom: 75%;\n }\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate3d(0, -25%, 0);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate3d(0, 0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: -15px;\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: -15px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]}
securis/src/main/webapp/css/bootstrap.min.css
deleted file mode 100644
....@@ -1,5 +0,0 @@
1
-/*!
2
- * Bootstrap v3.2.0 (http://getbootstrap.com)
3
- * Copyright 2011-2014 Twitter, Inc.
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
securis/src/main/webapp/css/chosen-spinner.css
deleted file mode 100644
....@@ -1,12 +0,0 @@
1
-/* Additional styles to display a spinner image while options are loading */
2
-.localytics-chosen.loading+.chosen-container-multi .chosen-choices {
3
- background-image: url('spinner.gif');
4
- background-repeat: no-repeat;
5
- background-position: 95%;
6
-}
7
-.localytics-chosen.loading+.chosen-container-single .chosen-single span {
8
- background: url('spinner.gif') no-repeat right;
9
-}
10
-.localytics-chosen.loading+.chosen-container-single .chosen-single .search-choice-close {
11
- display: none;
12
-}
securis/src/main/webapp/css/chosen-sprite.png
deleted file mode 100644Binary files differ
securis/src/main/webapp/css/chosen-sprite@2x.png
deleted file mode 100644Binary files differ
securis/src/main/webapp/css/chosen.css
deleted file mode 100644
....@@ -1,430 +0,0 @@
1
-/* @group Base */
2
-.chosen-container {
3
- position: relative;
4
- display: inline-block;
5
- vertical-align: middle;
6
- font-size: 13px;
7
- zoom: 1;
8
- *display: inline;
9
- -webkit-user-select: none;
10
- -moz-user-select: none;
11
- user-select: none;
12
-}
13
-.chosen-container .chosen-drop {
14
- position: absolute;
15
- top: 100%;
16
- left: -9999px;
17
- z-index: 1010;
18
- -webkit-box-sizing: border-box;
19
- -moz-box-sizing: border-box;
20
- box-sizing: border-box;
21
- width: 100%;
22
- border: 1px solid #aaa;
23
- border-top: 0;
24
- background: #fff;
25
- box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
26
-}
27
-.chosen-container.chosen-with-drop .chosen-drop {
28
- left: 0;
29
-}
30
-.chosen-container a {
31
- cursor: pointer;
32
-}
33
-
34
-/* @end */
35
-/* @group Single Chosen */
36
-.chosen-container-single .chosen-single {
37
- position: relative;
38
- display: block;
39
- overflow: hidden;
40
- padding: 0 0 0 8px;
41
- height: 23px;
42
- border: 1px solid #aaa;
43
- border-radius: 5px;
44
- background-color: #fff;
45
- background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
46
- background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
47
- background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
48
- background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
49
- background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
50
- background-clip: padding-box;
51
- box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
52
- color: #444;
53
- text-decoration: none;
54
- white-space: nowrap;
55
- line-height: 24px;
56
-}
57
-.chosen-container-single .chosen-default {
58
- color: #999;
59
-}
60
-.chosen-container-single .chosen-single span {
61
- display: block;
62
- overflow: hidden;
63
- margin-right: 26px;
64
- text-overflow: ellipsis;
65
- white-space: nowrap;
66
-}
67
-.chosen-container-single .chosen-single-with-deselect span {
68
- margin-right: 38px;
69
-}
70
-.chosen-container-single .chosen-single abbr {
71
- position: absolute;
72
- top: 6px;
73
- right: 26px;
74
- display: block;
75
- width: 12px;
76
- height: 12px;
77
- background: url('chosen-sprite.png') -42px 1px no-repeat;
78
- font-size: 1px;
79
-}
80
-.chosen-container-single .chosen-single abbr:hover {
81
- background-position: -42px -10px;
82
-}
83
-.chosen-container-single.chosen-disabled .chosen-single abbr:hover {
84
- background-position: -42px -10px;
85
-}
86
-.chosen-container-single .chosen-single div {
87
- position: absolute;
88
- top: 0;
89
- right: 0;
90
- display: block;
91
- width: 18px;
92
- height: 100%;
93
-}
94
-.chosen-container-single .chosen-single div b {
95
- display: block;
96
- width: 100%;
97
- height: 100%;
98
- background: url('chosen-sprite.png') no-repeat 0px 2px;
99
-}
100
-.chosen-container-single .chosen-search {
101
- position: relative;
102
- z-index: 1010;
103
- margin: 0;
104
- padding: 3px 4px;
105
- white-space: nowrap;
106
-}
107
-.chosen-container-single .chosen-search input[type="text"] {
108
- -webkit-box-sizing: border-box;
109
- -moz-box-sizing: border-box;
110
- box-sizing: border-box;
111
- margin: 1px 0;
112
- padding: 4px 20px 4px 5px;
113
- width: 100%;
114
- height: auto;
115
- outline: 0;
116
- border: 1px solid #aaa;
117
- background: white url('chosen-sprite.png') no-repeat 100% -20px;
118
- background: url('chosen-sprite.png') no-repeat 100% -20px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
119
- background: url('chosen-sprite.png') no-repeat 100% -20px, -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
120
- background: url('chosen-sprite.png') no-repeat 100% -20px, -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
121
- background: url('chosen-sprite.png') no-repeat 100% -20px, -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
122
- background: url('chosen-sprite.png') no-repeat 100% -20px, linear-gradient(#eeeeee 1%, #ffffff 15%);
123
- font-size: 1em;
124
- font-family: sans-serif;
125
- line-height: normal;
126
- border-radius: 0;
127
-}
128
-.chosen-container-single .chosen-drop {
129
- margin-top: -1px;
130
- border-radius: 0 0 4px 4px;
131
- background-clip: padding-box;
132
-}
133
-.chosen-container-single.chosen-container-single-nosearch .chosen-search {
134
- position: absolute;
135
- left: -9999px;
136
-}
137
-
138
-/* @end */
139
-/* @group Results */
140
-.chosen-container .chosen-results {
141
- position: relative;
142
- overflow-x: hidden;
143
- overflow-y: auto;
144
- margin: 0 4px 4px 0;
145
- padding: 0 0 0 4px;
146
- max-height: 240px;
147
- -webkit-overflow-scrolling: touch;
148
-}
149
-.chosen-container .chosen-results li {
150
- display: none;
151
- margin: 0;
152
- padding: 5px 6px;
153
- list-style: none;
154
- line-height: 15px;
155
-}
156
-.chosen-container .chosen-results li.active-result {
157
- display: list-item;
158
- cursor: pointer;
159
-}
160
-.chosen-container .chosen-results li.disabled-result {
161
- display: list-item;
162
- color: #ccc;
163
- cursor: default;
164
-}
165
-.chosen-container .chosen-results li.highlighted {
166
- background-color: #3875d7;
167
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
168
- background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
169
- background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
170
- background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
171
- background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
172
- color: #fff;
173
-}
174
-.chosen-container .chosen-results li.no-results {
175
- display: list-item;
176
- background: #f4f4f4;
177
-}
178
-.chosen-container .chosen-results li.group-result {
179
- display: list-item;
180
- font-weight: bold;
181
- cursor: default;
182
-}
183
-.chosen-container .chosen-results li.group-option {
184
- padding-left: 15px;
185
-}
186
-.chosen-container .chosen-results li em {
187
- font-style: normal;
188
- text-decoration: underline;
189
-}
190
-
191
-/* @end */
192
-/* @group Multi Chosen */
193
-.chosen-container-multi .chosen-choices {
194
- position: relative;
195
- overflow: hidden;
196
- -webkit-box-sizing: border-box;
197
- -moz-box-sizing: border-box;
198
- box-sizing: border-box;
199
- margin: 0;
200
- padding: 0;
201
- width: 100%;
202
- height: auto !important;
203
- height: 1%;
204
- border: 1px solid #aaa;
205
- background-color: #fff;
206
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
207
- background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
208
- background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
209
- background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
210
- background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
211
- cursor: text;
212
-}
213
-.chosen-container-multi .chosen-choices li {
214
- float: left;
215
- list-style: none;
216
-}
217
-.chosen-container-multi .chosen-choices li.search-field {
218
- margin: 0;
219
- padding: 0;
220
- white-space: nowrap;
221
-}
222
-.chosen-container-multi .chosen-choices li.search-field input[type="text"] {
223
- margin: 1px 0;
224
- padding: 5px;
225
- height: 15px;
226
- outline: 0;
227
- border: 0 !important;
228
- background: transparent !important;
229
- box-shadow: none;
230
- color: #666;
231
- font-size: 100%;
232
- font-family: sans-serif;
233
- line-height: normal;
234
- border-radius: 0;
235
-}
236
-.chosen-container-multi .chosen-choices li.search-field .default {
237
- color: #999;
238
-}
239
-.chosen-container-multi .chosen-choices li.search-choice {
240
- position: relative;
241
- margin: 3px 0 3px 5px;
242
- padding: 3px 20px 3px 5px;
243
- border: 1px solid #aaa;
244
- border-radius: 3px;
245
- background-color: #e4e4e4;
246
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
247
- background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
248
- background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
249
- background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
250
- background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
251
- background-clip: padding-box;
252
- box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
253
- color: #333;
254
- line-height: 13px;
255
- cursor: default;
256
-}
257
-.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
258
- position: absolute;
259
- top: 4px;
260
- right: 3px;
261
- display: block;
262
- width: 12px;
263
- height: 12px;
264
- background: url('chosen-sprite.png') -42px 1px no-repeat;
265
- font-size: 1px;
266
-}
267
-.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
268
- background-position: -42px -10px;
269
-}
270
-.chosen-container-multi .chosen-choices li.search-choice-disabled {
271
- padding-right: 5px;
272
- border: 1px solid #ccc;
273
- background-color: #e4e4e4;
274
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
275
- background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
276
- background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
277
- background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
278
- background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
279
- color: #666;
280
-}
281
-.chosen-container-multi .chosen-choices li.search-choice-focus {
282
- background: #d4d4d4;
283
-}
284
-.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
285
- background-position: -42px -10px;
286
-}
287
-.chosen-container-multi .chosen-results {
288
- margin: 0;
289
- padding: 0;
290
-}
291
-.chosen-container-multi .chosen-drop .result-selected {
292
- display: list-item;
293
- color: #ccc;
294
- cursor: default;
295
-}
296
-
297
-/* @end */
298
-/* @group Active */
299
-.chosen-container-active .chosen-single {
300
- border: 1px solid #5897fb;
301
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
302
-}
303
-.chosen-container-active.chosen-with-drop .chosen-single {
304
- border: 1px solid #aaa;
305
- -moz-border-radius-bottomright: 0;
306
- border-bottom-right-radius: 0;
307
- -moz-border-radius-bottomleft: 0;
308
- border-bottom-left-radius: 0;
309
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
310
- background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
311
- background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
312
- background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
313
- background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
314
- box-shadow: 0 1px 0 #fff inset;
315
-}
316
-.chosen-container-active.chosen-with-drop .chosen-single div {
317
- border-left: none;
318
- background: transparent;
319
-}
320
-.chosen-container-active.chosen-with-drop .chosen-single div b {
321
- background-position: -18px 2px;
322
-}
323
-.chosen-container-active .chosen-choices {
324
- border: 1px solid #5897fb;
325
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
326
-}
327
-.chosen-container-active .chosen-choices li.search-field input[type="text"] {
328
- color: #111 !important;
329
-}
330
-
331
-/* @end */
332
-/* @group Disabled Support */
333
-.chosen-disabled {
334
- opacity: 0.5 !important;
335
- cursor: default;
336
-}
337
-.chosen-disabled .chosen-single {
338
- cursor: default;
339
-}
340
-.chosen-disabled .chosen-choices .search-choice .search-choice-close {
341
- cursor: default;
342
-}
343
-
344
-/* @end */
345
-/* @group Right to Left */
346
-.chosen-rtl {
347
- text-align: right;
348
-}
349
-.chosen-rtl .chosen-single {
350
- overflow: visible;
351
- padding: 0 8px 0 0;
352
-}
353
-.chosen-rtl .chosen-single span {
354
- margin-right: 0;
355
- margin-left: 26px;
356
- direction: rtl;
357
-}
358
-.chosen-rtl .chosen-single-with-deselect span {
359
- margin-left: 38px;
360
-}
361
-.chosen-rtl .chosen-single div {
362
- right: auto;
363
- left: 3px;
364
-}
365
-.chosen-rtl .chosen-single abbr {
366
- right: auto;
367
- left: 26px;
368
-}
369
-.chosen-rtl .chosen-choices li {
370
- float: right;
371
-}
372
-.chosen-rtl .chosen-choices li.search-field input[type="text"] {
373
- direction: rtl;
374
-}
375
-.chosen-rtl .chosen-choices li.search-choice {
376
- margin: 3px 5px 3px 0;
377
- padding: 3px 5px 3px 19px;
378
-}
379
-.chosen-rtl .chosen-choices li.search-choice .search-choice-close {
380
- right: auto;
381
- left: 4px;
382
-}
383
-.chosen-rtl.chosen-container-single-nosearch .chosen-search,
384
-.chosen-rtl .chosen-drop {
385
- left: 9999px;
386
-}
387
-.chosen-rtl.chosen-container-single .chosen-results {
388
- margin: 0 0 4px 4px;
389
- padding: 0 4px 0 0;
390
-}
391
-.chosen-rtl .chosen-results li.group-option {
392
- padding-right: 15px;
393
- padding-left: 0;
394
-}
395
-.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
396
- border-right: none;
397
-}
398
-.chosen-rtl .chosen-search input[type="text"] {
399
- padding: 4px 5px 4px 20px;
400
- background: white url('chosen-sprite.png') no-repeat -30px -20px;
401
- background: url('chosen-sprite.png') no-repeat -30px -20px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
402
- background: url('chosen-sprite.png') no-repeat -30px -20px, -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
403
- background: url('chosen-sprite.png') no-repeat -30px -20px, -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
404
- background: url('chosen-sprite.png') no-repeat -30px -20px, -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
405
- background: url('chosen-sprite.png') no-repeat -30px -20px, linear-gradient(#eeeeee 1%, #ffffff 15%);
406
- direction: rtl;
407
-}
408
-.chosen-rtl.chosen-container-single .chosen-single div b {
409
- background-position: 6px 2px;
410
-}
411
-.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
412
- background-position: -12px 2px;
413
-}
414
-
415
-/* @end */
416
-/* @group Retina compatibility */
417
-@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {
418
- .chosen-rtl .chosen-search input[type="text"],
419
- .chosen-container-single .chosen-single abbr,
420
- .chosen-container-single .chosen-single div b,
421
- .chosen-container-single .chosen-search input[type="text"],
422
- .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
423
- .chosen-container .chosen-results-scroll-down span,
424
- .chosen-container .chosen-results-scroll-up span {
425
- background-image: url('chosen-sprite@2x.png') !important;
426
- background-size: 52px 37px !important;
427
- background-repeat: no-repeat !important;
428
- }
429
-}
430
-/* @end */
securis/src/main/webapp/css/font-awesome.min.css
deleted file mode 100644
....@@ -1,4 +0,0 @@
1
-/*!
2
- * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
3
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4
- */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}
securis/src/main/webapp/css/securis.css
deleted file mode 100644
....@@ -1,90 +0,0 @@
1
-body {
2
- padding-top: 50px;
3
- padding-bottom: 20px;
4
-}
5
-
6
-@media (min-width: 1400px) {
7
- .container {
8
- width: 1350px !important;
9
- }
10
-}
11
-
12
-@media (min-width: 1600px) {
13
- .container {
14
- width: 1550px !important;
15
- }
16
-}
17
-
18
-
19
-a {
20
- cursor: default !important;
21
-}
22
-.animate-show {
23
- -webkit-transition: all linear 0.5s;
24
- transition: all linear 0.5s;
25
- opacity:1;
26
-}
27
-
28
-.animate-show.ng-hide-add,
29
-.animate-show.ng-hide-remove {
30
- -webkit-transition: all linear 0.5s;
31
- transition: all linear 0.5s;
32
- display: block !important;
33
-}
34
-
35
-.animate-show.ng-hide {
36
- opacity: 0;
37
-}
38
-
39
-input.ng-invalid, textarea.ng-invalid {
40
- border: solid 1px red;
41
-}
42
-
43
-input.ng-dirty.ng-valid, textarea.ng-dirty.ng-valid {
44
- border: solid 1px green;
45
-}
46
-
47
-.alert.inline-alert {
48
- padding-top: 5px;
49
- padding-bottom: 5px;
50
- margin-bottom: 5px;
51
-}
52
-
53
-.chosen-choices {
54
- min-width: 100% !important;
55
- height: 34px !important;
56
- padding: 3px 6px;
57
- font-size: 14px;
58
- vertical-align: middle;
59
- border: 1px solid #ccc;
60
- border-radius: 4px;
61
-}
62
-
63
-.chosen-container {
64
- min-width: 100% !important;
65
- border: none;
66
- padding: 0px;
67
-}
68
-.chosen-container-multi li.search-field input[type="text"] {
69
- min-height: 25px !important;
70
- height: 25px !important;
71
-}
72
-
73
-.btn-file {
74
- position: relative;
75
- overflow: hidden;
76
-}
77
-.btn-file input[type=file] {
78
- position: absolute;
79
- top: 0;
80
- right: 0;
81
- min-width: 100%;
82
- min-height: 100%;
83
- font-size: 999px;
84
- text-align: right;
85
- filter: alpha(opacity=0);
86
- opacity: 0;
87
- background: red;
88
- cursor: inherit;
89
- display: block;
90
-}
securis/src/main/webapp/css/spinner.gif
deleted file mode 100644Binary files differ
securis/src/main/webapp/css/toaster.css
deleted file mode 100644
....@@ -1,207 +0,0 @@
1
-/*
2
- * Toastr
3
- * Version 2.0.1
4
- * Copyright 2012 John Papa and Hans Fjällemark.
5
- * All Rights Reserved.
6
- * Use, reproduction, distribution, and modification of this code is subject to the terms and
7
- * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php
8
- *
9
- * Author: John Papa and Hans Fjällemark
10
- * Project: https://github.com/CodeSeven/toastr
11
- */
12
-.toast-title {
13
- font-weight: bold;
14
-}
15
-.toast-message {
16
- -ms-word-wrap: break-word;
17
- word-wrap: break-word;
18
-}
19
-.toast-message a,
20
-.toast-message label {
21
- color: #ffffff;
22
-}
23
-.toast-message a:hover {
24
- color: #cccccc;
25
- text-decoration: none;
26
-}
27
-
28
-.toast-close-button {
29
- position: relative;
30
- right: -0.3em;
31
- top: -0.3em;
32
- float: right;
33
- font-size: 20px;
34
- font-weight: bold;
35
- color: #ffffff;
36
- -webkit-text-shadow: 0 1px 0 #ffffff;
37
- text-shadow: 0 1px 0 #ffffff;
38
- opacity: 0.8;
39
- -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
40
- filter: alpha(opacity=80);
41
-}
42
-.toast-close-button:hover,
43
-.toast-close-button:focus {
44
- color: #000000;
45
- text-decoration: none;
46
- cursor: pointer;
47
- opacity: 0.4;
48
- -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
49
- filter: alpha(opacity=40);
50
-}
51
-
52
-/*Additional properties for button version
53
- iOS requires the button element instead of an anchor tag.
54
- If you want the anchor version, it requires `href="#"`.*/
55
-button.toast-close-button {
56
- padding: 0;
57
- cursor: pointer;
58
- background: transparent;
59
- border: 0;
60
- -webkit-appearance: none;
61
-}
62
-.toast-top-full-width {
63
- top: 0;
64
- right: 0;
65
- width: 100%;
66
-}
67
-.toast-bottom-full-width {
68
- bottom: 0;
69
- right: 0;
70
- width: 100%;
71
-}
72
-.toast-top-left {
73
- top: 12px;
74
- left: 12px;
75
-}
76
-.toast-top-right {
77
- top: 12px;
78
- right: 12px;
79
-}
80
-.toast-bottom-right {
81
- right: 12px;
82
- bottom: 12px;
83
-}
84
-.toast-bottom-left {
85
- bottom: 12px;
86
- left: 12px;
87
-}
88
-#toast-container {
89
- position: fixed;
90
- z-index: 999999;
91
- /*overrides*/
92
-
93
-}
94
-#toast-container * {
95
- -moz-box-sizing: border-box;
96
- -webkit-box-sizing: border-box;
97
- box-sizing: border-box;
98
-}
99
-#toast-container > div {
100
- margin: 0 0 6px;
101
- padding: 15px 15px 15px 50px;
102
- width: 300px;
103
- -moz-border-radius: 3px 3px 3px 3px;
104
- -webkit-border-radius: 3px 3px 3px 3px;
105
- border-radius: 3px 3px 3px 3px;
106
- background-position: 15px center;
107
- background-repeat: no-repeat;
108
- -moz-box-shadow: 0 0 12px #999999;
109
- -webkit-box-shadow: 0 0 12px #999999;
110
- box-shadow: 0 0 12px #999999;
111
- color: #ffffff;
112
- opacity: 0.8;
113
- -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
114
- filter: alpha(opacity=80);
115
-}
116
-#toast-container > :hover {
117
- -moz-box-shadow: 0 0 12px #000000;
118
- -webkit-box-shadow: 0 0 12px #000000;
119
- box-shadow: 0 0 12px #000000;
120
- opacity: 1;
121
- -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
122
- filter: alpha(opacity=100);
123
- cursor: pointer;
124
-}
125
-#toast-container > .toast-info {
126
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
127
-}
128
-#toast-container > .toast-error {
129
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
130
-}
131
-#toast-container > .toast-success {
132
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
133
-}
134
-#toast-container > .toast-warning {
135
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
136
-}
137
-#toast-container.toast-top-full-width > div,
138
-#toast-container.toast-bottom-full-width > div {
139
- width: 96%;
140
- margin: auto;
141
-}
142
-.toast {
143
- background-color: #030303;
144
-}
145
-.toast-success {
146
- background-color: #51a351;
147
-}
148
-.toast-error {
149
- background-color: #bd362f;
150
-}
151
-.toast-info {
152
- background-color: #2f96b4;
153
-}
154
-.toast-warning {
155
- background-color: #f89406;
156
-}
157
-/*Responsive Design*/
158
-@media all and (max-width: 240px) {
159
- #toast-container > div {
160
- padding: 8px 8px 8px 50px;
161
- width: 11em;
162
- }
163
- #toast-container .toast-close-button {
164
- right: -0.2em;
165
- top: -0.2em;
166
-}
167
- }
168
-@media all and (min-width: 241px) and (max-width: 480px) {
169
- #toast-container > div {
170
- padding: 8px 8px 8px 50px;
171
- width: 18em;
172
- }
173
- #toast-container .toast-close-button {
174
- right: -0.2em;
175
- top: -0.2em;
176
-}
177
-}
178
-@media all and (min-width: 481px) and (max-width: 768px) {
179
- #toast-container > div {
180
- padding: 15px 15px 15px 50px;
181
- width: 25em;
182
- }
183
-}
184
-
185
- /*
186
- * AngularJS-Toaster
187
- * Version 0.3
188
- */
189
-#toast-container > div.ng-enter,
190
-#toast-container > div.ng-leave
191
-{
192
- -webkit-transition: 1000ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
193
- -moz-transition: 1000ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
194
- -ms-transition: 1000ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
195
- -o-transition: 1000ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
196
- transition: 1000ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
197
-}
198
-
199
-#toast-container > div.ng-enter.ng-enter-active,
200
-#toast-container > div.ng-leave {
201
- opacity: 0.8;
202
-}
203
-
204
-#toast-container > div.ng-leave.ng-leave-active,
205
-#toast-container > div.ng-enter {
206
- opacity: 0;
207
-}
securis/src/main/webapp/fonts/glyphicons-halflings-regular.eot
deleted file mode 100644Binary files differ
securis/src/main/webapp/fonts/glyphicons-halflings-regular.svg
deleted file mode 100644
....@@ -1,229 +0,0 @@
1
-<?xml version="1.0" standalone="no"?>
2
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
-<svg xmlns="http://www.w3.org/2000/svg">
4
-<metadata></metadata>
5
-<defs>
6
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
7
-<font-face units-per-em="1200" ascent="960" descent="-240" />
8
-<missing-glyph horiz-adv-x="500" />
9
-<glyph />
10
-<glyph />
11
-<glyph unicode="&#xd;" />
12
-<glyph unicode=" " />
13
-<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
14
-<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
15
-<glyph unicode="&#xa0;" />
16
-<glyph unicode="&#x2000;" horiz-adv-x="652" />
17
-<glyph unicode="&#x2001;" horiz-adv-x="1304" />
18
-<glyph unicode="&#x2002;" horiz-adv-x="652" />
19
-<glyph unicode="&#x2003;" horiz-adv-x="1304" />
20
-<glyph unicode="&#x2004;" horiz-adv-x="434" />
21
-<glyph unicode="&#x2005;" horiz-adv-x="326" />
22
-<glyph unicode="&#x2006;" horiz-adv-x="217" />
23
-<glyph unicode="&#x2007;" horiz-adv-x="217" />
24
-<glyph unicode="&#x2008;" horiz-adv-x="163" />
25
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
26
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
27
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
28
-<glyph unicode="&#x205f;" horiz-adv-x="326" />
29
-<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
30
-<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
31
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
32
-<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
33
-<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
34
-<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
35
-<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
36
-<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
37
-<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
38
-<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
39
-<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
40
-<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
41
-<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
42
-<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
43
-<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
44
-<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
45
-<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
46
-<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
47
-<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
48
-<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
49
-<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
50
-<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
51
-<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
52
-<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
53
-<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
54
-<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
55
-<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
56
-<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
57
-<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
58
-<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
59
-<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
60
-<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
61
-<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
62
-<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
63
-<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
64
-<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
65
-<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
66
-<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
67
-<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
68
-<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
69
-<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
70
-<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
71
-<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
72
-<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
73
-<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
74
-<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
75
-<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
76
-<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
77
-<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
78
-<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
79
-<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
80
-<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
81
-<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
82
-<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
83
-<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
84
-<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
85
-<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
86
-<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
87
-<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
88
-<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
89
-<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
90
-<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
91
-<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
92
-<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
93
-<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
94
-<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
95
-<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
96
-<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
97
-<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
98
-<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
99
-<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
100
-<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
101
-<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
102
-<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
103
-<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
104
-<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
105
-<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
106
-<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
107
-<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
108
-<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
109
-<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
110
-<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
111
-<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
112
-<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
113
-<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
114
-<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
115
-<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
116
-<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
117
-<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
118
-<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
119
-<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
120
-<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
121
-<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
122
-<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
123
-<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
124
-<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
125
-<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
126
-<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
127
-<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
128
-<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
129
-<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
130
-<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
131
-<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
132
-<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
133
-<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
134
-<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
135
-<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
136
-<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
137
-<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
138
-<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
139
-<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
140
-<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
141
-<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
142
-<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
143
-<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
144
-<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
145
-<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
146
-<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
147
-<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
148
-<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
149
-<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
150
-<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
151
-<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
152
-<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
153
-<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
154
-<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
155
-<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
156
-<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
157
-<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
158
-<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
159
-<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
160
-<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
161
-<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
162
-<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
163
-<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
164
-<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
165
-<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
166
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
167
-<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
168
-<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
169
-<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
170
-<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
171
-<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
172
-<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
173
-<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
174
-<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
175
-<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
176
-<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
177
-<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
178
-<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
179
-<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
180
-<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
181
-<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
182
-<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
183
-<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
184
-<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
185
-<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
186
-<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
187
-<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
188
-<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
189
-<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
190
-<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
191
-<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
192
-<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
193
-<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
194
-<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
195
-<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
196
-<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
197
-<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
198
-<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
199
-<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
200
-<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
201
-<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
202
-<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
203
-<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
204
-<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
205
-<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
206
-<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
207
-<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
208
-<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
209
-<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
210
-<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
211
-<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
212
-<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
213
-<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
214
-<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
215
-<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
216
-<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
217
-<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
218
-<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
219
-<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
220
-<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
221
-<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
222
-<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
223
-<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
224
-<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
225
-<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
226
-<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
227
-<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
228
-</font>
229
-</defs></svg>
securis/src/main/webapp/fonts/glyphicons-halflings-regular.ttf
deleted file mode 100644Binary files differ
securis/src/main/webapp/fonts/glyphicons-halflings-regular.woff
deleted file mode 100644Binary files differ
securis/src/main/webapp/header.html
deleted file mode 100644
....@@ -1,20 +0,0 @@
1
-
2
- <div class="navbar navbar-inverse navbar-fixed-top">
3
- <div class="container">
4
- <div class="navbar-header">
5
-
6
- <ul class="nav navbar-nav navbar-left">
7
- <li><h3 style="color: #eeeeee; margin-right: 20px;margin-top: 10px;">SeCuris</h2></li>
8
- <li ng-class="{active: $location.path() === '/licenses'}" ><a i18n ng-class="" href="licenses">Licenses</a></li>
9
- <li ng-class="{active: $location.path() === '/admin'}"><a i18n href="admin">Admin</a></li>
10
- </ul>
11
- </div>
12
- <div class="navbar-collapse collapse">
13
- <ul class="nav navbar-nav navbar-right">
14
- <li><a i18n href="#about">About</a></li>
15
- <li><a i18n href="#contact">Contact</a></li>
16
- <li><a i18n ng-click="logout()">Logout</a></li>
17
- </ul>
18
- </div>
19
- </div>
20
- </div>
securis/src/main/webapp/images/securis_100.png
deleted file mode 100644Binary files differ
securis/src/main/webapp/images/securis_40.png
deleted file mode 100644Binary files differ
securis/src/main/webapp/index.html
....@@ -1,5 +1,35 @@
1
+<!DOCTYPE html>
12 <html>
2
- <body>
3
- <h1>SeCuris Server</h1>
4
- </body>
5
-</html>
3
+ <head>
4
+ <title>Angular QuickStart</title>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <base href="/">
8
+ <link rel="stylesheet" href="styles.css">
9
+
10
+<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/2.4.1/core.min.js"></script> -->
11
+
12
+ <!-- Polyfill(s) for older browsers -->
13
+ <script src="node_modules/core-js/client/shim.min.js"></script>
14
+ <script src="node_modules/hammerjs/hammer.min.js"></script>
15
+
16
+ <script src="node_modules/zone.js/dist/zone.js"></script>
17
+ <script src="node_modules/systemjs/dist/system.src.js"></script>
18
+
19
+ <script src="systemjs.config.js"></script>
20
+ <script>
21
+ System.import('main').catch(function(err){ console.error(err); });
22
+ </script>
23
+
24
+ <!-- Load the Covalent platform stylesheet -->
25
+ <link href="https://unpkg.com/@covalent/core@1.0.0-beta.2/common/platform.css" rel="stylesheet">
26
+
27
+ <!-- Load the Covalent/Material prebuilt theme -->
28
+ <link href="https://unpkg.com/@covalent/core@1.0.0-beta.2/theming/prebuilt/blue-orange.css" rel="stylesheet">
29
+
30
+ </head>
31
+
32
+ <body>
33
+ <my-app>Loading AppComponent content here ...</my-app>
34
+ </body>
35
+</html>
securis/src/main/webapp/index.jsp
deleted file mode 100644
....@@ -1,64 +0,0 @@
1
-<!DOCTYPE html>
2
-<html class="no-js" lang="en" ng-app="securis"
3
- xmlns:ng="http://angularjs.org">
4
-<head>
5
-<base href="<%= pageContext.getServletContext().getContextPath() %>/">
6
-<meta charset="utf-8">
7
-<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
8
-<title>SeCuris</title>
9
-<meta name="description" content="">
10
-<meta name="viewport" content="width=device-width">
11
-
12
-<link rel="stylesheet" href="css/bootstrap.min.css">
13
-<link rel="stylesheet" href="css/bootstrap-dialog.css">
14
-<link rel="stylesheet" href="css/toaster.css">
15
-<link rel="stylesheet" href="css/chosen.css">
16
-<link rel="stylesheet" href="css/chosen-spinner.css">
17
-<link rel="stylesheet" href="css/bootstrap-theme.min.css">
18
-<link rel="stylesheet" href="css/font-awesome.min.css">
19
-
20
-<link rel="stylesheet" href="css/securis.css">
21
-
22
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
23
-
24
-</head>
25
-<body>
26
- <div ng-controller="MainCtrl">
27
- <div ng-view></div>
28
-
29
- <hr>
30
- <div>
31
- <footer>
32
- <small i18n style="margin: auto; display: block;"
33
- class="text-center">&copy; CurisTEC 2014</small>
34
- </footer>
35
- </div>
36
- <!-- /container -->
37
- <script src="js/vendor/modernizr-2.6.2.min.js"></script>
38
- <script src="js/vendor/jquery.min.js"></script>
39
- <script type="text/javascript" src="js/vendor/bootstrap.min.js"></script>
40
- <script type="text/javascript" src="js/vendor/bootstrap-dialog.js"></script>
41
- <script type="text/javascript" src="js/angular/angular.js"></script>
42
- <script type="text/javascript" src="js/angular/angular-route.min.js"></script>
43
- <script type="text/javascript"
44
- src="js/angular/angular-resource.min.js"></script>
45
- <script type="text/javascript"
46
- src="js/angular/angular-resource.min.js"></script>
47
- <script type="text/javascript" src="js/angular/toaster.js"></script>
48
- <script type="text/javascript" src="js/angular/toaster.js"></script>
49
- <script type="text/javascript" src="js/vendor/chosen.jquery.js"></script>
50
- <script type="text/javascript" src="js/angular/chosen.js"></script>
51
- <script type="text/javascript" src="js/vendor/store.min.js"></script>
52
- <script type="text/javascript" src="js/vendor/FileSaver.js"></script>
53
-
54
- <script type="text/javascript" src="js/i18n.js"></script>
55
- <script type="text/javascript" src="js/main.js"></script>
56
- <script type="text/javascript" src="js/login.js"></script>
57
- <script type="text/javascript" src="js/catalogs.js"></script>
58
- <script type="text/javascript" src="js/licenses.js"></script>
59
- <script type="text/javascript" src="js/admin.js"></script>
60
-
61
- <toaster-container toaster-options="{'time-out': 5000}"></toaster-container>
62
- </div>
63
-</body>
64
-</html>
securis/src/main/webapp/js/admin.js
deleted file mode 100644
....@@ -1,249 +0,0 @@
1
-(function() {
2
- 'use strict';
3
-
4
- var app = angular.module('securis');
5
-
6
- var HTTP_ERRORS = {
7
- 401: "Unathorized action",
8
- 403: "Forbidden action",
9
- 500: "Server error",
10
- 418: "Application error",
11
- 404: "Element not found"
12
- }
13
-
14
- app.directive(
15
- 'catalogField',
16
- function() {
17
- return {
18
- restrict : 'A', // only activate on element
19
- // attribute
20
- require : '?ngModel', // get a hold of
21
- // NgModelController
22
- link : function(scope, element, attrs, ngModel) {
23
- if (!ngModel)
24
- return; // do nothing if no ng-model
25
- // TODO: Replace the hard-coded form ID ('catalogForm') by the
26
- // appropiate dynamic field
27
- scope.catalogForm[attrs.name] = scope.catalogForm[scope.field.name];
28
- scope.catalogForm[attrs.name].$name = attrs.name;
29
- }
30
- };
31
- });
32
-
33
- app.controller('AdminCtrl', [
34
- '$scope',
35
- '$http',
36
- 'toaster',
37
- 'Catalogs',
38
- '$store',
39
- '$L',
40
- function($scope, $http, toaster, Catalogs, $store, $L) {
41
- $store.set('location', '/admin');
42
-
43
- $scope.showForm = false;
44
- $scope.isNew = false;
45
- $scope.formu = {};
46
- $scope.catalogIndex = 0;
47
- $scope.catalogMetadata = {};
48
- $scope.catalogsList = null;
49
- $scope.list = null;
50
-
51
-
52
- var _changeCatalog = function(index) {
53
- $scope.showForm = false;
54
- $scope.formu = {};
55
- if (!$scope.catalogsList) $scope.catalogsList = Catalogs.getList(); // catalog list is also in index.data
56
- if (typeof index === 'number') $scope.catalogIndex = index;
57
- Catalogs.setCurrent($scope.catalogIndex);
58
- $scope.catalogMetadata = Catalogs.getMetadata();
59
- $scope.list = Catalogs.query();
60
- $scope.refs = {}
61
- Catalogs.loadRefs(function(refs) {
62
- console.log('Updated refs in form');
63
- console.log(refs);
64
- $scope.refs = refs;
65
- });
66
- }
67
-
68
- Catalogs.init().then(_changeCatalog);
69
-
70
- $scope.selectCatalog = _changeCatalog;
71
-
72
- $scope._loadFormu = function(elementData) {
73
- $('select').val(null);
74
- $scope.formu = {}
75
- var fields = Catalogs.getMetadata().fields;
76
- console.log($scope);
77
-
78
- fields.forEach(function(field) {
79
- if (field.type === 'select') {
80
- // next lines are a workaround to avoid an issue where we try to show a form with "select" fields (if select field value doesn't change
81
- $scope.formu[field.name] = null;
82
- setTimeout(function() {
83
- $scope.formu[field.name] = elementData[field.name];
84
- $scope.$apply();
85
- }, 0);
86
- } else {
87
- if (!field.listingOnly) $scope.formu[field.name] = elementData[field.name] || null;
88
- }
89
- })
90
- }
91
-
92
- $scope.edit = function(data) {
93
- $scope.showForm = true;
94
- $scope.isNew = false;
95
- $scope._loadFormu(data);
96
- Catalogs.get(data[Catalogs.getPk()], function(eleData) {
97
- $scope._loadFormu(eleData);
98
- });
99
- // Next line is a workaround due to some issues with values with ID == 0
100
- setTimeout(function() {
101
- $('#'+Catalogs.getFFF()).focus();
102
- }, 0);
103
- }
104
-
105
- $scope.delete = function(data) {
106
- BootstrapDialog.confirm($L.get('The record will be deleted, are you sure?'), function(result){
107
- if(result) {
108
- var promise = Catalogs.remove(data).$promise;
109
- promise.then(function(data) {
110
- $scope.list = Catalogs.query();
111
- Catalogs.refreshRef($scope.refs, Catalogs.getMetadata().resource, $scope.list);
112
- toaster.pop('success', Catalogs.getName(), $L.get("Element deleted successfully"));
113
- },function(error) {
114
- console.log(error);
115
- toaster.pop('error', Catalogs.getName(), $L.get("Error deleting element, reason: {0}. Details: {1}", $L.get(HTTP_ERRORS[error.status]), error.headers('X-SECURIS-ERROR-MSG')), 10000);
116
- });
117
- }
118
- });
119
- $scope.showForm = false;
120
- $scope.isNew = false;
121
- }
122
-
123
- } ]);
124
-
125
- app.controller('CatalogFormCtrl', [ '$scope', '$http', 'toaster', 'Catalogs', '$L',
126
- function($scope, $http, toaster, Catalogs, $L) {
127
- $scope.scope = $scope;
128
- console.log('Form: currentCatalog:' + $scope.cataLogIndex);
129
-
130
- $scope.inputType = function(field) {
131
-
132
- if (field.readOnly && field.type === 'date')
133
- return 'readonly_date';
134
- if (field.readOnly && (!field.pk || !$scope.isNew ))
135
- return 'readonly';
136
- if (field.type === 'select')
137
- return 'select';
138
- if (field.type === 'multiselect')
139
- return 'multiselect';
140
- if (field.type === 'metadata')
141
- return 'metadata';
142
- if (field.type === 'password')
143
- return 'password';
144
- if (!field.multiline)
145
- return 'normal';
146
- if (field.multiline)
147
- return 'textarea';
148
-
149
- }
150
-
151
- $scope.editNew = function() {
152
- $scope.$parent.isNew = true;
153
- $scope.$parent.showForm = true;
154
- $('select').val(null);
155
- $scope.$parent.formu = {};
156
-
157
- var fields = Catalogs.getMetadata().fields;
158
- fields.forEach(function(field) {
159
- if (!field.listingOnly) $scope.$parent.formu[field.name] = null;
160
- })
161
- setTimeout(function() {
162
- $('#'+Catalogs.getFFF()).focus();
163
- }, 0);
164
-
165
- }
166
- $scope.cancel = function() {
167
- $scope.$parent.showForm = false;
168
- $scope.catalogForm.$setPristine();
169
- }
170
-
171
- $scope.saveCatalog = function() {
172
- if ($scope.catalogForm.$invalid) {
173
- toaster.pop('error', Catalogs.getName(), $L.get("There are wrong data in current form, please fix it before to save"));
174
- } else {
175
- var promise = Catalogs.save($scope.formu).$promise;
176
- promise.then(function(data, otro) {
177
- if ($scope.isNew) {
178
- $scope.catalogForm.$setPristine();
179
- $scope.$parent.formu = {}
180
- $('#'+ Catalogs.getFFF()).focus();
181
- } else {
182
- $scope.cancel();
183
- }
184
- $scope.$parent.list = Catalogs.query();
185
- Catalogs.refreshRef($scope.refs, Catalogs.getMetadata().resource, $scope.$parent.list);
186
-
187
- toaster.pop('success', Catalogs.getName(), $L.get("Element saved successfully"));
188
- }, function(error) {
189
- console.log(error);
190
- toaster.pop('error', Catalogs.getName(), $L.get("Error saving element, reason: {0}. Details: {1}", $L.get(HTTP_ERRORS[error.status]), error.headers('X-SECURIS-ERROR-MSG')), 10000);
191
- });
192
- }
193
- }
194
-
195
- $scope.selectFieldChanged = function(onchangehandler) {
196
- if (onchangehandler) {
197
- $scope[onchangehandler]();
198
- }
199
- }
200
- // Metadata management
201
-
202
- $scope.createMetadataRow = function() {
203
- if (!$scope.formu.metadata) {
204
- $scope.formu.metadata = [];
205
- }
206
- $scope.formu.metadata.push({key: '', value: '', mandatory: true});
207
- }
208
- $scope.removeMetadataKey = function(row_md) {
209
- $scope.formu.metadata.splice( $scope.formu.metadata.indexOf(row_md), 1 );
210
- }
211
- $scope.updateMetadata = function() {
212
- // Called when Application ID change in current field
213
- var newAppId = $scope.formu['application_id'];
214
- if (newAppId) {
215
- // Only if there is a "valid" value selected we should update the metadata
216
- Catalogs.getResource('application').get({id: newAppId}).$promise.then(function(app) {
217
- $scope.formu.metadata = [];
218
- app.metadata.forEach(function(md) {
219
- $scope.formu.metadata.push({
220
- key: md.key,
221
- value: md.value,
222
- mandatory: md.mandatory
223
- });
224
- });
225
- });
226
- }
227
- }
228
-
229
- } ]);
230
-
231
- app.controller('CatalogListCtrl', [ '$scope', '$http', '$filter', 'Catalogs',
232
- function($scope, $http, $filter, Catalogs) {
233
-
234
- $scope.print = function(name, row) {
235
- var value = row[name];
236
- var type = Catalogs.getField(name).type;
237
- var printedValue = type === 'date' ? $filter('date')(value, 'yyyy-MM-dd') : value;
238
- if (printedValue !== value) // this line is a work around to allow search in formatted fields
239
- row['_display_'+name] = printedValue;
240
- return printedValue;
241
- }
242
-
243
- $scope.display = function(name) {
244
- return Catalogs.getField(name).display;
245
- }
246
-
247
- } ]);
248
-
249
-})();
securis/src/main/webapp/js/angular/angular-animate.min.js
deleted file mode 100644
....@@ -1,33 +0,0 @@
1
-/*
2
- AngularJS v1.3.6
3
- (c) 2010-2014 Google, Inc. http://angularjs.org
4
- License: MIT
5
-*/
6
-(function(N,f,W){'use strict';f.module("ngAnimate",["ng"]).directive("ngAnimateChildren",function(){return function(X,C,g){g=g.ngAnimateChildren;f.isString(g)&&0===g.length?C.data("$$ngAnimateChildren",!0):X.$watch(g,function(f){C.data("$$ngAnimateChildren",!!f)})}}).factory("$$animateReflow",["$$rAF","$document",function(f,C){return function(g){return f(function(){g()})}}]).config(["$provide","$animateProvider",function(X,C){function g(f){for(var n=0;n<f.length;n++){var g=f[n];if(1==g.nodeType)return g}}
7
-function ba(f,n){return g(f)==g(n)}var t=f.noop,n=f.forEach,da=C.$$selectors,aa=f.isArray,ea=f.isString,ga=f.isObject,r={running:!0},u;X.decorator("$animate",["$delegate","$$q","$injector","$sniffer","$rootElement","$$asyncCallback","$rootScope","$document","$templateRequest","$$jqLite",function(O,N,M,Y,y,H,P,W,Z,Q){function R(a,c){var b=a.data("$$ngAnimateState")||{};c&&(b.running=!0,b.structural=!0,a.data("$$ngAnimateState",b));return b.disabled||b.running&&b.structural}function D(a){var c,b=N.defer();
8
-b.promise.$$cancelFn=function(){c&&c()};P.$$postDigest(function(){c=a(function(){b.resolve()})});return b.promise}function I(a){if(ga(a))return a.tempClasses&&ea(a.tempClasses)&&(a.tempClasses=a.tempClasses.split(/\s+/)),a}function S(a,c,b){b=b||{};var d={};n(b,function(e,a){n(a.split(" "),function(a){d[a]=e})});var h=Object.create(null);n((a.attr("class")||"").split(/\s+/),function(e){h[e]=!0});var f=[],l=[];n(c&&c.classes||[],function(e,a){var b=h[a],c=d[a]||{};!1===e?(b||"addClass"==c.event)&&
9
-l.push(a):!0===e&&(b&&"removeClass"!=c.event||f.push(a))});return 0<f.length+l.length&&[f.join(" "),l.join(" ")]}function T(a){if(a){var c=[],b={};a=a.substr(1).split(".");(Y.transitions||Y.animations)&&c.push(M.get(da[""]));for(var d=0;d<a.length;d++){var f=a[d],k=da[f];k&&!b[f]&&(c.push(M.get(k)),b[f]=!0)}return c}}function U(a,c,b,d){function h(e,a){var b=e[a],c=e["before"+a.charAt(0).toUpperCase()+a.substr(1)];if(b||c)return"leave"==a&&(c=b,b=null),u.push({event:a,fn:b}),J.push({event:a,fn:c}),
10
-!0}function k(c,l,w){var E=[];n(c,function(a){a.fn&&E.push(a)});var m=0;n(E,function(c,f){var p=function(){a:{if(l){(l[f]||t)();if(++m<E.length)break a;l=null}w()}};switch(c.event){case "setClass":l.push(c.fn(a,e,A,p,d));break;case "animate":l.push(c.fn(a,b,d.from,d.to,p));break;case "addClass":l.push(c.fn(a,e||b,p,d));break;case "removeClass":l.push(c.fn(a,A||b,p,d));break;default:l.push(c.fn(a,p,d))}});l&&0===l.length&&w()}var l=a[0];if(l){d&&(d.to=d.to||{},d.from=d.from||{});var e,A;aa(b)&&(e=
11
-b[0],A=b[1],e?A?b=e+" "+A:(b=e,c="addClass"):(b=A,c="removeClass"));var w="setClass"==c,E=w||"addClass"==c||"removeClass"==c||"animate"==c,p=a.attr("class")+" "+b;if(x(p)){var ca=t,m=[],J=[],g=t,s=[],u=[],p=(" "+p).replace(/\s+/g,".");n(T(p),function(a){!h(a,c)&&w&&(h(a,"addClass"),h(a,"removeClass"))});return{node:l,event:c,className:b,isClassBased:E,isSetClassOperation:w,applyStyles:function(){d&&a.css(f.extend(d.from||{},d.to||{}))},before:function(a){ca=a;k(J,m,function(){ca=t;a()})},after:function(a){g=
12
-a;k(u,s,function(){g=t;a()})},cancel:function(){m&&(n(m,function(a){(a||t)(!0)}),ca(!0));s&&(n(s,function(a){(a||t)(!0)}),g(!0))}}}}}function G(a,c,b,d,h,k,l,e){function A(e){var l="$animate:"+e;J&&J[l]&&0<J[l].length&&H(function(){b.triggerHandler(l,{event:a,className:c})})}function w(){A("before")}function E(){A("after")}function p(){p.hasBeenRun||(p.hasBeenRun=!0,k())}function g(){if(!g.hasBeenRun){m&&m.applyStyles();g.hasBeenRun=!0;l&&l.tempClasses&&n(l.tempClasses,function(a){u.removeClass(b,
13
-a)});var w=b.data("$$ngAnimateState");w&&(m&&m.isClassBased?B(b,c):(H(function(){var e=b.data("$$ngAnimateState")||{};fa==e.index&&B(b,c,a)}),b.data("$$ngAnimateState",w)));A("close");e()}}var m=U(b,a,c,l);if(!m)return p(),w(),E(),g(),t;a=m.event;c=m.className;var J=f.element._data(m.node),J=J&&J.events;d||(d=h?h.parent():b.parent());if(z(b,d))return p(),w(),E(),g(),t;d=b.data("$$ngAnimateState")||{};var L=d.active||{},s=d.totalActive||0,q=d.last;h=!1;if(0<s){s=[];if(m.isClassBased)"setClass"==q.event?
14
-(s.push(q),B(b,c)):L[c]&&(v=L[c],v.event==a?h=!0:(s.push(v),B(b,c)));else if("leave"==a&&L["ng-leave"])h=!0;else{for(var v in L)s.push(L[v]);d={};B(b,!0)}0<s.length&&n(s,function(a){a.cancel()})}!m.isClassBased||m.isSetClassOperation||"animate"==a||h||(h="addClass"==a==b.hasClass(c));if(h)return p(),w(),E(),A("close"),e(),t;L=d.active||{};s=d.totalActive||0;if("leave"==a)b.one("$destroy",function(a){a=f.element(this);var e=a.data("$$ngAnimateState");e&&(e=e.active["ng-leave"])&&(e.cancel(),B(a,"ng-leave"))});
15
-u.addClass(b,"ng-animate");l&&l.tempClasses&&n(l.tempClasses,function(a){u.addClass(b,a)});var fa=K++;s++;L[c]=m;b.data("$$ngAnimateState",{last:m,active:L,index:fa,totalActive:s});w();m.before(function(e){var l=b.data("$$ngAnimateState");e=e||!l||!l.active[c]||m.isClassBased&&l.active[c].event!=a;p();!0===e?g():(E(),m.after(g))});return m.cancel}function q(a){if(a=g(a))a=f.isFunction(a.getElementsByClassName)?a.getElementsByClassName("ng-animate"):a.querySelectorAll(".ng-animate"),n(a,function(a){a=
16
-f.element(a);(a=a.data("$$ngAnimateState"))&&a.active&&n(a.active,function(a){a.cancel()})})}function B(a,c){if(ba(a,y))r.disabled||(r.running=!1,r.structural=!1);else if(c){var b=a.data("$$ngAnimateState")||{},d=!0===c;!d&&b.active&&b.active[c]&&(b.totalActive--,delete b.active[c]);if(d||!b.totalActive)u.removeClass(a,"ng-animate"),a.removeData("$$ngAnimateState")}}function z(a,c){if(r.disabled)return!0;if(ba(a,y))return r.running;var b,d,g;do{if(0===c.length)break;var k=ba(c,y),l=k?r:c.data("$$ngAnimateState")||
17
-{};if(l.disabled)return!0;k&&(g=!0);!1!==b&&(k=c.data("$$ngAnimateChildren"),f.isDefined(k)&&(b=k));d=d||l.running||l.last&&!l.last.isClassBased}while(c=c.parent());return!g||!b&&d}u=Q;y.data("$$ngAnimateState",r);var $=P.$watch(function(){return Z.totalPendingRequests},function(a,c){0===a&&($(),P.$$postDigest(function(){P.$$postDigest(function(){r.running=!1})}))}),K=0,V=C.classNameFilter(),x=V?function(a){return V.test(a)}:function(){return!0};return{animate:function(a,c,b,d,h){d=d||"ng-inline-animate";
18
-h=I(h)||{};h.from=b?c:null;h.to=b?b:c;return D(function(b){return G("animate",d,f.element(g(a)),null,null,t,h,b)})},enter:function(a,c,b,d){d=I(d);a=f.element(a);c=c&&f.element(c);b=b&&f.element(b);R(a,!0);O.enter(a,c,b);return D(function(h){return G("enter","ng-enter",f.element(g(a)),c,b,t,d,h)})},leave:function(a,c){c=I(c);a=f.element(a);q(a);R(a,!0);return D(function(b){return G("leave","ng-leave",f.element(g(a)),null,null,function(){O.leave(a)},c,b)})},move:function(a,c,b,d){d=I(d);a=f.element(a);
19
-c=c&&f.element(c);b=b&&f.element(b);q(a);R(a,!0);O.move(a,c,b);return D(function(h){return G("move","ng-move",f.element(g(a)),c,b,t,d,h)})},addClass:function(a,c,b){return this.setClass(a,c,[],b)},removeClass:function(a,c,b){return this.setClass(a,[],c,b)},setClass:function(a,c,b,d){d=I(d);a=f.element(a);a=f.element(g(a));if(R(a))return O.$$setClassImmediately(a,c,b,d);var h,k=a.data("$$animateClasses"),l=!!k;k||(k={classes:{}});h=k.classes;c=aa(c)?c:c.split(" ");n(c,function(a){a&&a.length&&(h[a]=
20
-!0)});b=aa(b)?b:b.split(" ");n(b,function(a){a&&a.length&&(h[a]=!1)});if(l)return d&&k.options&&(k.options=f.extend(k.options||{},d)),k.promise;a.data("$$animateClasses",k={classes:h,options:d});return k.promise=D(function(e){var l=a.parent(),b=g(a),c=b.parentNode;if(!c||c.$$NG_REMOVED||b.$$NG_REMOVED)e();else{b=a.data("$$animateClasses");a.removeData("$$animateClasses");var c=a.data("$$ngAnimateState")||{},d=S(a,b,c.active);return d?G("setClass",d,a,l,null,function(){d[0]&&O.$$addClassImmediately(a,
21
-d[0]);d[1]&&O.$$removeClassImmediately(a,d[1])},b.options,e):e()}})},cancel:function(a){a.$$cancelFn()},enabled:function(a,c){switch(arguments.length){case 2:if(a)B(c);else{var b=c.data("$$ngAnimateState")||{};b.disabled=!0;c.data("$$ngAnimateState",b)}break;case 1:r.disabled=!a;break;default:a=!r.disabled}return!!a}}}]);C.register("",["$window","$sniffer","$timeout","$$animateReflow",function(r,C,M,Y){function y(){b||(b=Y(function(){c=[];b=null;x={}}))}function H(a,e){b&&b();c.push(e);b=Y(function(){n(c,
22
-function(a){a()});c=[];b=null;x={}})}function P(a,e){var b=g(a);a=f.element(b);k.push(a);b=Date.now()+e;b<=h||(M.cancel(d),h=b,d=M(function(){X(k);k=[]},e,!1))}function X(a){n(a,function(a){(a=a.data("$$ngAnimateCSS3Data"))&&n(a.closeAnimationFns,function(a){a()})})}function Z(a,e){var b=e?x[e]:null;if(!b){var c=0,d=0,f=0,g=0;n(a,function(a){if(1==a.nodeType){a=r.getComputedStyle(a)||{};c=Math.max(Q(a[z+"Duration"]),c);d=Math.max(Q(a[z+"Delay"]),d);g=Math.max(Q(a[K+"Delay"]),g);var e=Q(a[K+"Duration"]);
23
-0<e&&(e*=parseInt(a[K+"IterationCount"],10)||1);f=Math.max(e,f)}});b={total:0,transitionDelay:d,transitionDuration:c,animationDelay:g,animationDuration:f};e&&(x[e]=b)}return b}function Q(a){var e=0;a=ea(a)?a.split(/\s*,\s*/):[];n(a,function(a){e=Math.max(parseFloat(a)||0,e)});return e}function R(b,e,c,d){b=0<=["ng-enter","ng-leave","ng-move"].indexOf(c);var f,p=e.parent(),h=p.data("$$ngAnimateKey");h||(p.data("$$ngAnimateKey",++a),h=a);f=h+"-"+g(e).getAttribute("class");var p=f+" "+c,h=x[p]?++x[p].total:
24
-0,m={};if(0<h){var n=c+"-stagger",m=f+" "+n;(f=!x[m])&&u.addClass(e,n);m=Z(e,m);f&&u.removeClass(e,n)}u.addClass(e,c);var n=e.data("$$ngAnimateCSS3Data")||{},k=Z(e,p);f=k.transitionDuration;k=k.animationDuration;if(b&&0===f&&0===k)return u.removeClass(e,c),!1;c=d||b&&0<f;b=0<k&&0<m.animationDelay&&0===m.animationDuration;e.data("$$ngAnimateCSS3Data",{stagger:m,cacheKey:p,running:n.running||0,itemIndex:h,blockTransition:c,closeAnimationFns:n.closeAnimationFns||[]});p=g(e);c&&(I(p,!0),d&&e.css(d));
25
-b&&(p.style[K+"PlayState"]="paused");return!0}function D(a,e,b,c,d){function f(){e.off(D,h);u.removeClass(e,k);u.removeClass(e,t);z&&M.cancel(z);G(e,b);var a=g(e),c;for(c in s)a.style.removeProperty(s[c])}function h(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-H,0)>=C&&b>=x&&c()}var m=g(e);a=e.data("$$ngAnimateCSS3Data");if(-1!=m.getAttribute("class").indexOf(b)&&a){var k="",t="";n(b.split(" "),function(a,
26
-b){var e=(0<b?" ":"")+a;k+=e+"-active";t+=e+"-pending"});var s=[],q=a.itemIndex,v=a.stagger,r=0;if(0<q){r=0;0<v.transitionDelay&&0===v.transitionDuration&&(r=v.transitionDelay*q);var y=0;0<v.animationDelay&&0===v.animationDuration&&(y=v.animationDelay*q,s.push(B+"animation-play-state"));r=Math.round(100*Math.max(r,y))/100}r||(u.addClass(e,k),a.blockTransition&&I(m,!1));var F=Z(e,a.cacheKey+" "+k),x=Math.max(F.transitionDuration,F.animationDuration);if(0===x)u.removeClass(e,k),G(e,b),c();else{!r&&
27
-d&&(F.transitionDuration||(e.css("transition",F.animationDuration+"s linear all"),s.push("transition")),e.css(d));var q=Math.max(F.transitionDelay,F.animationDelay),C=1E3*q;0<s.length&&(v=m.getAttribute("style")||"",";"!==v.charAt(v.length-1)&&(v+=";"),m.setAttribute("style",v+" "));var H=Date.now(),D=V+" "+$,q=1E3*(r+1.5*(q+x)),z;0<r&&(u.addClass(e,t),z=M(function(){z=null;0<F.transitionDuration&&I(m,!1);0<F.animationDuration&&(m.style[K+"PlayState"]="");u.addClass(e,k);u.removeClass(e,t);d&&(0===
28
-F.transitionDuration&&e.css("transition",F.animationDuration+"s linear all"),e.css(d),s.push("transition"))},1E3*r,!1));e.on(D,h);a.closeAnimationFns.push(function(){f();c()});a.running++;P(e,q);return f}}else c()}function I(a,b){a.style[z+"Property"]=b?"none":""}function S(a,b,c,d){if(R(a,b,c,d))return function(a){a&&G(b,c)}}function T(a,b,c,d,f){if(b.data("$$ngAnimateCSS3Data"))return D(a,b,c,d,f);G(b,c);d()}function U(a,b,c,d,f){var g=S(a,b,c,f.from);if(g){var h=g;H(b,function(){h=T(a,b,c,d,f.to)});
29
-return function(a){(h||t)(a)}}y();d()}function G(a,b){u.removeClass(a,b);var c=a.data("$$ngAnimateCSS3Data");c&&(c.running&&c.running--,c.running&&0!==c.running||a.removeData("$$ngAnimateCSS3Data"))}function q(a,b){var c="";a=aa(a)?a:a.split(/\s+/);n(a,function(a,d){a&&0<a.length&&(c+=(0<d?" ":"")+a+b)});return c}var B="",z,$,K,V;N.ontransitionend===W&&N.onwebkittransitionend!==W?(B="-webkit-",z="WebkitTransition",$="webkitTransitionEnd transitionend"):(z="transition",$="transitionend");N.onanimationend===
30
-W&&N.onwebkitanimationend!==W?(B="-webkit-",K="WebkitAnimation",V="webkitAnimationEnd animationend"):(K="animation",V="animationend");var x={},a=0,c=[],b,d=null,h=0,k=[];return{animate:function(a,b,c,d,f,g){g=g||{};g.from=c;g.to=d;return U("animate",a,b,f,g)},enter:function(a,b,c){c=c||{};return U("enter",a,"ng-enter",b,c)},leave:function(a,b,c){c=c||{};return U("leave",a,"ng-leave",b,c)},move:function(a,b,c){c=c||{};return U("move",a,"ng-move",b,c)},beforeSetClass:function(a,b,c,d,f){f=f||{};b=q(c,
31
-"-remove")+" "+q(b,"-add");if(f=S("setClass",a,b,f.from))return H(a,d),f;y();d()},beforeAddClass:function(a,b,c,d){d=d||{};if(b=S("addClass",a,q(b,"-add"),d.from))return H(a,c),b;y();c()},beforeRemoveClass:function(a,b,c,d){d=d||{};if(b=S("removeClass",a,q(b,"-remove"),d.from))return H(a,c),b;y();c()},setClass:function(a,b,c,d,f){f=f||{};c=q(c,"-remove");b=q(b,"-add");return T("setClass",a,c+" "+b,d,f.to)},addClass:function(a,b,c,d){d=d||{};return T("addClass",a,q(b,"-add"),c,d.to)},removeClass:function(a,
32
-b,c,d){d=d||{};return T("removeClass",a,q(b,"-remove"),c,d.to)}}}])}])})(window,window.angular);
33
-//# sourceMappingURL=angular-animate.min.js.map
securis/src/main/webapp/js/angular/angular-animate.min.js.map
deleted file mode 100644
....@@ -1,8 +0,0 @@
1
-{
2
-"version":3,
3
-"file":"angular-animate.min.js",
4
-"lineCount":32,
5
-"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAwYtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,UAAA,CAgBa,mBAhBb,CAgBkC,QAAQ,EAAG,CAEzC,MAAO,SAAQ,CAACC,CAAD,CAAQC,CAAR,CAAiBC,CAAjB,CAAwB,CACjCC,CAAAA,CAAMD,CAAAE,kBACNR,EAAAS,SAAA,CAAiBF,CAAjB,CAAJ,EAA4C,CAA5C,GAA6BA,CAAAG,OAA7B,CACEL,CAAAM,KAAA,CAJsBC,qBAItB,CAAkC,CAAA,CAAlC,CADF,CAGER,CAAAS,OAAA,CAAaN,CAAb,CAAkB,QAAQ,CAACO,CAAD,CAAQ,CAChCT,CAAAM,KAAA,CAPoBC,qBAOpB,CAAkC,CAAEE,CAAAA,CAApC,CADgC,CAAlC,CALmC,CAFE,CAhB7C,CAAAC,QAAA,CAkCW,iBAlCX,CAkC8B,CAAC,OAAD,CAAU,WAAV,CAAuB,QAAQ,CAACC,CAAD,CAAQC,CAAR,CAAmB,CAE5E,MAAO,SAAQ,CAACC,CAAD,CAAK,CAElB,MAAOF,EAAA,CAAM,QAAQ,EAAG,CAOtBE,CAAA,EAPsB,CAAjB,CAFW,CAFwD,CAAlD,CAlC9B,CAAAC,OAAA,CAkDU,CAAC,UAAD,CAAa,kBAAb,CAAiC,QAAQ,CAACC,CAAD,CAAWC,CAAX,CAA6B,CAc5EC,QAASA,EAAkB,CAACjB,CAAD,CAAU,CACnC,IAAS,IAAAkB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBlB,CAAAK,OAApB,CAAoCa,CAAA,EAApC,CAAyC,CACvC,IAAIC,EAAMnB,CAAA,CAAQkB,CAAR,CACV,IATeE,CASf,EAAID,CAAAE,SAAJ,CACE,MAAOF,EAH8B,CADN,CAduC;AA+B5EG,QAASA,GAAiB,CAACC,CAAD,CAAOC,CAAP,CAAa,CACrC,MAAOP,EAAA,CAAmBM,CAAnB,CAAP,EAAmCN,CAAA,CAAmBO,CAAnB,CADE,CA9BvC,IAAIC,EAAO9B,CAAA8B,KAAX,CACIC,EAAU/B,CAAA+B,QADd,CAEIC,GAAYX,CAAAY,YAFhB,CAGIC,GAAUlC,CAAAkC,QAHd,CAIIzB,GAAWT,CAAAS,SAJf,CAKI0B,GAAWnC,CAAAmC,SALf,CAWIC,EAAmB,CAACC,QAAS,CAAA,CAAV,CAXvB,CAiCIC,CACJlB,EAAAmB,UAAA,CAAmB,UAAnB,CACI,CAAC,WAAD,CAAc,KAAd,CAAqB,WAArB,CAAkC,UAAlC,CAA8C,cAA9C,CAA8D,iBAA9D,CAAiF,YAAjF,CAA+F,WAA/F,CAA4G,kBAA5G,CAAgI,UAAhI,CACP,QAAQ,CAACC,CAAD,CAAcC,CAAd,CAAqBC,CAArB,CAAkCC,CAAlC,CAA8CC,CAA9C,CAA8DC,CAA9D,CAAiFC,CAAjF,CAA+F7B,CAA/F,CAA4G8B,CAA5G,CAAgIC,CAAhI,CAA2I,CAsC9IC,QAASA,EAA2B,CAAC5C,CAAD,CAAU6C,CAAV,CAAkB,CACpD,IAAIvC,EAAON,CAAAM,KAAA,CAnEQwC,kBAmER,CAAPxC,EAAyC,EACzCuC,EAAJ,GACEvC,CAAA0B,QAEA,CAFe,CAAA,CAEf,CADA1B,CAAAyC,WACA,CADkB,CAAA,CAClB,CAAA/C,CAAAM,KAAA,CAvEiBwC,kBAuEjB,CAA+BxC,CAA/B,CAHF,CAKA,OAAOA,EAAA0C,SAAP,EAAyB1C,CAAA0B,QAAzB,EAAyC1B,CAAAyC,WAPW,CAUtDE,QAASA,EAAsB,CAACpC,CAAD,CAAK,CAAA,IAC9BqC,CAD8B,CACpBC,EAAQf,CAAAe,MAAA,EACtBA;CAAAC,QAAAC,WAAA,CAA2BC,QAAQ,EAAG,CACpCJ,CAAA,EAAYA,CAAA,EADwB,CAGtCT,EAAAc,aAAA,CAAwB,QAAQ,EAAG,CACjCL,CAAA,CAAWrC,CAAA,CAAG,QAAQ,EAAG,CACvBsC,CAAAK,QAAA,EADuB,CAAd,CADsB,CAAnC,CAKA,OAAOL,EAAAC,QAV2B,CAapCK,QAASA,EAAmB,CAACC,CAAD,CAAU,CAIpC,GAAI5B,EAAA,CAAS4B,CAAT,CAAJ,CAIE,MAHIA,EAAAC,YAGGD,EAHoBtD,EAAA,CAASsD,CAAAC,YAAT,CAGpBD,GAFLA,CAAAC,YAEKD,CAFiBA,CAAAC,YAAAC,MAAA,CAA0B,KAA1B,CAEjBF,EAAAA,CAR2B,CAYtCG,QAASA,EAAqB,CAAC7D,CAAD,CAAU8D,CAAV,CAAiBC,CAAjB,CAAoC,CAChEA,CAAA,CAAoBA,CAApB,EAAyC,EAEzC,KAAIC,EAAS,EACbtC,EAAA,CAAQqC,CAAR,CAA2B,QAAQ,CAACzD,CAAD,CAAO2D,CAAP,CAAiB,CAClDvC,CAAA,CAAQuC,CAAAL,MAAA,CAAe,GAAf,CAAR,CAA6B,QAAQ,CAACM,CAAD,CAAI,CACvCF,CAAA,CAAOE,CAAP,CAAA,CAAU5D,CAD6B,CAAzC,CADkD,CAApD,CAMA,KAAI6D,EAAaC,MAAAC,OAAA,CAAc,IAAd,CACjB3C,EAAA,CAAQkC,CAAC5D,CAAAsE,KAAA,CAAa,OAAb,CAADV,EAA0B,EAA1BA,OAAA,CAAoC,KAApC,CAAR,CAAoD,QAAQ,CAACW,CAAD,CAAY,CACtEJ,CAAA,CAAWI,CAAX,CAAA,CAAwB,CAAA,CAD8C,CAAxE,CAXgE,KAe5DC,EAAQ,EAfoD,CAehDC,EAAW,EAC3B/C,EAAA,CAASoC,CAAT,EAAkBA,CAAAY,QAAlB,EAAoC,EAApC,CAAwC,QAAQ,CAACC,CAAD,CAASJ,CAAT,CAAoB,CAClE,IAAIK,EAAWT,CAAA,CAAWI,CAAX,CAAf,CACIM,EAAoBb,CAAA,CAAOO,CAAP,CAApBM,EAAyC,EAU9B,EAAA,CAAf,GAAIF,CAAJ,EAEMC,CAFN,EAE6C,UAF7C,EAEkBC,CAAAC,MAFlB;AAGIL,CAAAM,KAAA,CAAcR,CAAd,CAHJ,CAKsB,CAAA,CALtB,GAKWI,CALX,GAOOC,CAPP,EAO8C,aAP9C,EAOmBC,CAAAC,MAPnB,EAQIN,CAAAO,KAAA,CAAWR,CAAX,CARJ,CAZkE,CAApE,CAyBA,OAA0C,EAA1C,CAAQC,CAAAnE,OAAR,CAAuBoE,CAAApE,OAAvB,EAA+C,CAACmE,CAAAQ,KAAA,CAAW,GAAX,CAAD,CAAkBP,CAAAO,KAAA,CAAc,GAAd,CAAlB,CAzCiB,CA4ClEhB,QAASA,EAAM,CAACiB,CAAD,CAAO,CACpB,GAAIA,CAAJ,CAAU,CAAA,IACJC,EAAU,EADN,CAEJC,EAAU,EACVT,EAAAA,CAAUO,CAAAG,OAAA,CAAY,CAAZ,CAAAxB,MAAA,CAAqB,GAArB,CAUd,EAAItB,CAAA+C,YAAJ,EAA4B/C,CAAAgD,WAA5B,GACEJ,CAAAH,KAAA,CAAa1C,CAAAkD,IAAA,CAAc5D,EAAA,CAAU,EAAV,CAAd,CAAb,CAGF,KAAS,IAAAT,EAAE,CAAX,CAAcA,CAAd,CAAkBwD,CAAArE,OAAlB,CAAkCa,CAAA,EAAlC,CAAuC,CAAA,IACjCsE,EAAQd,CAAA,CAAQxD,CAAR,CADyB,CAEjCuE,EAAsB9D,EAAA,CAAU6D,CAAV,CACtBC,EAAJ,EAA4B,CAAAN,CAAA,CAAQK,CAAR,CAA5B,GACEN,CAAAH,KAAA,CAAa1C,CAAAkD,IAAA,CAAcE,CAAd,CAAb,CACA,CAAAN,CAAA,CAAQK,CAAR,CAAA,CAAiB,CAAA,CAFnB,CAHqC,CAQvC,MAAON,EAzBC,CADU,CA8BtBQ,QAASA,EAAe,CAAC1F,CAAD,CAAU2F,CAAV,CAA0BpB,CAA1B,CAAqCb,CAArC,CAA8C,CAyDpEkC,QAASA,EAAiB,CAACC,CAAD,CAAmBf,CAAnB,CAA0B,CAClD,IAAIgB,EAAUD,CAAA,CAAiBf,CAAjB,CAAd,CACIiB,EAAWF,CAAA,CAAiB,QAAjB,CAA4Bf,CAAAkB,OAAA,CAAa,CAAb,CAAAC,YAAA,EAA5B,CAA4DnB,CAAAM,OAAA,CAAa,CAAb,CAA5D,CACf,IAAIU,CAAJ,EAAeC,CAAf,CAYE,MAXa,OAWN,EAXHjB,CAWG,GAVLiB,CAEA,CAFWD,CAEX,CAAAA,CAAA,CAAU,IAQL,EANPI,CAAAnB,KAAA,CAAW,CACTD,MAAOA,CADE,CACKjE,GAAIiF,CADT,CAAX,CAMO,CAHPK,CAAApB,KAAA,CAAY,CACVD,MAAOA,CADG,CACIjE,GAAIkF,CADR,CAAZ,CAGO;AAAA,CAAA,CAfyC,CAmBpDK,QAASA,EAAG,CAACC,CAAD,CAAMC,CAAN,CAAqBC,CAArB,CAAoC,CAC9C,IAAIjB,EAAa,EACjB5D,EAAA,CAAQ2E,CAAR,CAAa,QAAQ,CAACG,CAAD,CAAY,CAC/BA,CAAA3F,GAAA,EAAgByE,CAAAP,KAAA,CAAgByB,CAAhB,CADe,CAAjC,CAIA,KAAIC,EAAQ,CAaZ/E,EAAA,CAAQ4D,CAAR,CAAoB,QAAQ,CAACkB,CAAD,CAAYE,CAAZ,CAAmB,CAC7C,IAAIC,EAAWA,QAAQ,EAAG,CAbW,CAAA,CAAA,CACrC,GAAIL,CAAJ,CAAmB,CACjB,CAACA,CAAA,CAYsBI,CAZtB,CAAD,EAAyBjF,CAAzB,GACA,IAAI,EAAEgF,CAAN,CAAcnB,CAAAjF,OAAd,CAAiC,MAAA,CACjCiG,EAAA,CAAgB,IAHC,CAKnBC,CAAA,EANqC,CAaX,CAG1B,QAAQC,CAAA1B,MAAR,EACE,KAAK,UAAL,CACEwB,CAAAvB,KAAA,CAAmByB,CAAA3F,GAAA,CAAab,CAAb,CAAsB4G,CAAtB,CAAoCC,CAApC,CAAqDF,CAArD,CAA+DjD,CAA/D,CAAnB,CACA,MACF,MAAK,SAAL,CACE4C,CAAAvB,KAAA,CAAmByB,CAAA3F,GAAA,CAAab,CAAb,CAAsBuE,CAAtB,CAAiCb,CAAAoD,KAAjC,CAA+CpD,CAAAqD,GAA/C,CAA2DJ,CAA3D,CAAnB,CACA,MACF,MAAK,UAAL,CACEL,CAAAvB,KAAA,CAAmByB,CAAA3F,GAAA,CAAab,CAAb,CAAsB4G,CAAtB,EAAsCrC,CAAtC,CAAqDoC,CAArD,CAA+DjD,CAA/D,CAAnB,CACA,MACF,MAAK,aAAL,CACE4C,CAAAvB,KAAA,CAAmByB,CAAA3F,GAAA,CAAab,CAAb,CAAsB6G,CAAtB,EAAyCtC,CAAzC,CAAqDoC,CAArD,CAA+DjD,CAA/D,CAAnB,CACA,MACF,SACE4C,CAAAvB,KAAA,CAAmByB,CAAA3F,GAAA,CAAab,CAAb,CAAsB2G,CAAtB,CAAgCjD,CAAhC,CAAnB,CAdJ,CAJ6C,CAA/C,CAuBI4C,EAAJ,EAA8C,CAA9C,GAAqBA,CAAAjG,OAArB,EACEkG,CAAA,EA3C4C,CAzEhD,IAAIS,EAAOhH,CAAA,CAAQ,CAAR,CACX,IAAKgH,CAAL,CAAA,CAIItD,CAAJ,GACEA,CAAAqD,GACA,CADarD,CAAAqD,GACb,EAD2B,EAC3B,CAAArD,CAAAoD,KAAA,CAAepD,CAAAoD,KAAf,EAA+B,EAFjC,CAKA,KAAIF,CAAJ,CACIC,CACAhF,GAAA,CAAQ0C,CAAR,CAAJ,GACEqC,CAEA;AAFerC,CAAA,CAAU,CAAV,CAEf,CADAsC,CACA,CADkBtC,CAAA,CAAU,CAAV,CAClB,CAAKqC,CAAL,CAGYC,CAAL,CAILtC,CAJK,CAIOqC,CAJP,CAIsB,GAJtB,CAI4BC,CAJ5B,EACLtC,CACA,CADYqC,CACZ,CAAAjB,CAAA,CAAiB,UAFZ,CAHP,EACEpB,CACA,CADYsC,CACZ,CAAAlB,CAAA,CAAiB,aAFnB,CAHF,CAcA,KAAIsB,EAAwC,UAAxCA,EAAsBtB,CAA1B,CACIuB,EAAeD,CAAfC,EACoC,UADpCA,EACkBvB,CADlBuB,EAEoC,aAFpCA,EAEkBvB,CAFlBuB,EAGoC,SAHpCA,EAGkBvB,CAJtB,CAOIjB,EADmB1E,CAAAsE,KAAA6C,CAAa,OAAbA,CACnBzC,CAA6B,GAA7BA,CAAmCH,CACvC,IAAK6C,CAAA,CAAsB1C,CAAtB,CAAL,CAAA,CArCoE,IAyChE2C,GAAiB5F,CAzC+C,CA0ChE6F,EAAe,EA1CiD,CA2ChEnB,EAAS,EA3CuD,CA4ChEoB,EAAgB9F,CA5CgD,CA6ChE+F,EAAc,EA7CkD,CA8ChEtB,EAAQ,EA9CwD,CAgDhEuB,EAAkBC,CAAC,GAADA,CAAOhD,CAAPgD,SAAA,CAAwB,MAAxB,CAA+B,GAA/B,CACtBhG,EAAA,CAAQsC,CAAA,CAAOyD,CAAP,CAAR,CAAiC,QAAQ,CAAC5B,CAAD,CAAmB,CAC5C8B,CAAA/B,CAAA+B,CAAkB9B,CAAlB8B,CAAoChC,CAApCgC,CACd,EAAgBV,CAAhB,GACErB,CAAA,CAAkBC,CAAlB,CAAoC,UAApC,CACA,CAAAD,CAAA,CAAkBC,CAAlB,CAAoC,aAApC,CAFF,CAF0D,CAA5D,CA0EA,OAAO,CACLmB,KAAMA,CADD,CAELlC,MAAOa,CAFF,CAGLpB,UAAWA,CAHN,CAIL2C,aAAcA,CAJT,CAKLD,oBAAqBA,CALhB,CAMLW,YAAaA,QAAQ,EAAG,CAClBlE,CAAJ,EACE1D,CAAA6H,IAAA,CAAYlI,CAAAmI,OAAA,CAAepE,CAAAoD,KAAf,EAA+B,EAA/B,CAAmCpD,CAAAqD,GAAnC,EAAiD,EAAjD,CAAZ,CAFoB,CANnB,CAWLZ,OAAQA,QAAQ,CAACI,CAAD,CAAgB,CAC9Bc,EAAA,CAAiBd,CACjBH,EAAA,CAAID,CAAJ,CAAYmB,CAAZ,CAA0B,QAAQ,EAAG,CACnCD,EAAA,CAAiB5F,CACjB8E,EAAA,EAFmC,CAArC,CAF8B,CAX3B,CAkBLL,MAAOA,QAAQ,CAACK,CAAD,CAAgB,CAC7BgB,CAAA;AAAgBhB,CAChBH,EAAA,CAAIF,CAAJ,CAAWsB,CAAX,CAAwB,QAAQ,EAAG,CACjCD,CAAA,CAAgB9F,CAChB8E,EAAA,EAFiC,CAAnC,CAF6B,CAlB1B,CAyBLwB,OAAQA,QAAQ,EAAG,CACbT,CAAJ,GACE5F,CAAA,CAAQ4F,CAAR,CAAsB,QAAQ,CAACpE,CAAD,CAAW,CACvC,CAACA,CAAD,EAAazB,CAAb,EAAmB,CAAA,CAAnB,CADuC,CAAzC,CAGA,CAAA4F,EAAA,CAAe,CAAA,CAAf,CAJF,CAMIG,EAAJ,GACE9F,CAAA,CAAQ8F,CAAR,CAAqB,QAAQ,CAACtE,CAAD,CAAW,CACtC,CAACA,CAAD,EAAazB,CAAb,EAAmB,CAAA,CAAnB,CADsC,CAAxC,CAGA,CAAA8F,CAAA,CAAc,CAAA,CAAd,CAJF,CAPiB,CAzBd,CAtFP,CAjCA,CAJoE,CAyoBtES,QAASA,EAAgB,CAACrC,CAAD,CAAiBpB,CAAjB,CAA4BvE,CAA5B,CAAqCiI,CAArC,CAAoDC,CAApD,CAAkEC,CAAlE,CAAgFzE,CAAhF,CAAyF0E,CAAzF,CAAuG,CAmJ9HC,QAASA,EAAe,CAACC,CAAD,CAAiB,CACvC,IAAIC,EAAY,WAAZA,CAA0BD,CAC1BE,EAAJ,EAAqBA,CAAA,CAAcD,CAAd,CAArB,EAAmF,CAAnF,CAAiDC,CAAA,CAAcD,CAAd,CAAAlI,OAAjD,EACEmC,CAAA,CAAgB,QAAQ,EAAG,CACzBxC,CAAAyI,eAAA,CAAuBF,CAAvB,CAAkC,CAChCzD,MAAOa,CADyB,CAEhCpB,UAAWA,CAFqB,CAAlC,CADyB,CAA3B,CAHqC,CAYzCmE,QAASA,EAAuB,EAAG,CACjCL,CAAA,CAAgB,QAAhB,CADiC,CAInCM,QAASA,EAAsB,EAAG,CAChCN,CAAA,CAAgB,OAAhB,CADgC,CAWlCO,QAASA,EAAgB,EAAG,CACrBA,CAAAC,WAAL,GACED,CAAAC,WACA,CAD8B,CAAA,CAC9B,CAAAV,CAAA,EAFF,CAD0B,CAO5BW,QAASA,EAAc,EAAG,CACxB,GAAKD,CAAAC,CAAAD,WAAL,CAAgC,CAC1BE,CAAJ,EACEA,CAAAnB,YAAA,EAGFkB,EAAAD,WAAA,CAA4B,CAAA,CACxBnF,EAAJ,EAAeA,CAAAC,YAAf,EACEjC,CAAA,CAAQgC,CAAAC,YAAR,CAA6B,QAAQ,CAACY,CAAD,CAAY,CAC/CtC,CAAA+G,YAAA,CAAqBhJ,CAArB;AAA8BuE,CAA9B,CAD+C,CAAjD,CAKF,KAAIjE,EAAON,CAAAM,KAAA,CA1/BIwC,kBA0/BJ,CACPxC,EAAJ,GAMMyI,CAAJ,EAAcA,CAAA7B,aAAd,CACE+B,CAAA,CAAQjJ,CAAR,CAAiBuE,CAAjB,CADF,EAGE/B,CAAA,CAAgB,QAAQ,EAAG,CACzB,IAAIlC,EAAON,CAAAM,KAAA,CArgCFwC,kBAqgCE,CAAPxC,EAAyC,EACzC4I,GAAJ,EAA2B5I,CAAAoG,MAA3B,EACEuC,CAAA,CAAQjJ,CAAR,CAAiBuE,CAAjB,CAA4BoB,CAA5B,CAHuB,CAA3B,CAMA,CAAA3F,CAAAM,KAAA,CA1gCWwC,kBA0gCX,CAA+BxC,CAA/B,CATF,CANF,CA3BF+H,EAAA,CAAgB,OAAhB,CACAD,EAAA,EAagC,CADR,CAnL1B,IAAIW,EAASrD,CAAA,CAAgB1F,CAAhB,CAAyB2F,CAAzB,CAAyCpB,CAAzC,CAAoDb,CAApD,CACb,IAAKqF,CAAAA,CAAL,CAKE,MAJAH,EAAA,EAHenH,CAIfiH,CAAA,EAJejH,CAKfkH,CAAA,EALelH,CAMfqH,CAAA,EANerH,CAAAA,CAUjBkE,EAAA,CAAiBoD,CAAAjE,MACjBP,EAAA,CAAYwE,CAAAxE,UACZ,KAAIiE,EAAgB7I,CAAAK,QAAAmJ,MAAA,CAAsBJ,CAAA/B,KAAtB,CAApB,CACAwB,EAAgBA,CAAhBA,EAAiCA,CAAAY,OAE5BnB,EAAL,GACEA,CADF,CACkBC,CAAA,CAAeA,CAAAmB,OAAA,EAAf,CAAuCrJ,CAAAqJ,OAAA,EADzD,CAQA,IAAIC,CAAA,CAAmBtJ,CAAnB,CAA4BiI,CAA5B,CAAJ,CAKE,MAJAW,EAAA,EAxBenH,CAyBfiH,CAAA,EAzBejH,CA0BfkH,CAAA,EA1BelH,CA2BfqH,CAAA,EA3BerH,CAAAA,CA+Bb8H,EAAAA,CAAkBvJ,CAAAM,KAAA,CAx1BHwC,kBAw1BG,CAAlByG,EAAoD,EACxD,KAAIxF,EAAwBwF,CAAAC,OAAxBzF,EAAiD,EAArD,CACI0F,EAAwBF,CAAAG,YAAxBD,EAAsD,CAD1D,CAEIE,EAAwBJ,CAAAK,KACxBC,EAAAA,CAAgB,CAAA,CAEpB,IAA4B,CAA5B,CAAIJ,CAAJ,CAA+B,CACzBK,CAAAA,CAAqB,EACzB,IAAKf,CAAA7B,aAAL,CAWkC,UAA3B,EAAIyC,CAAA7E,MAAJ;CACLgF,CAAA/E,KAAA,CAAwB4E,CAAxB,CACA,CAAAV,CAAA,CAAQjJ,CAAR,CAAiBuE,CAAjB,CAFK,EAIER,CAAA,CAAkBQ,CAAlB,CAJF,GAKDwF,CACJ,CADchG,CAAA,CAAkBQ,CAAlB,CACd,CAAIwF,CAAAjF,MAAJ,EAAqBa,CAArB,CACEkE,CADF,CACkB,CAAA,CADlB,EAGEC,CAAA/E,KAAA,CAAwBgF,CAAxB,CACA,CAAAd,CAAA,CAAQjJ,CAAR,CAAiBuE,CAAjB,CAJF,CANK,CAXP,KACE,IAAsB,OAAtB,EAAIoB,CAAJ,EAAiC5B,CAAA,CAAkB,UAAlB,CAAjC,CACE8F,CAAA,CAAgB,CAAA,CADlB,KAEO,CAEL,IAASrE,IAAAA,CAAT,GAAkBzB,EAAlB,CACE+F,CAAA/E,KAAA,CAAwBhB,CAAA,CAAkByB,CAAlB,CAAxB,CAEF+D,EAAA,CAAiB,EACjBN,EAAA,CAAQjJ,CAAR,CAAiB,CAAA,CAAjB,CANK,CAsBuB,CAAhC,CAAI8J,CAAAzJ,OAAJ,EACEqB,CAAA,CAAQoI,CAAR,CAA4B,QAAQ,CAACE,CAAD,CAAY,CAC9CA,CAAAjC,OAAA,EAD8C,CAAhD,CA5B2B,CAkC3Bb,CAAA6B,CAAA7B,aAAJ,EACQ6B,CAAA9B,oBADR,EAEyB,SAFzB,EAEOtB,CAFP,EAGQkE,CAHR,GAIEA,CAJF,CAIqC,UAJrC,EAImBlE,CAJnB,EAIoD3F,CAAA4E,SAAA,CAAiBL,CAAjB,CAJpD,CAOA,IAAIsF,CAAJ,CAKE,MAJAjB,EAAA,EA/EenH,CAgFfiH,CAAA,EAhFejH,CAiFfkH,CAAA,EAjFelH,CAuKf4G,CAAA,CAAgB,OAAhB,CAvKe5G,CAwKf2G,CAAA,EAxKe3G,CAAAA,CAsFjBsC,EAAA,CAAwBwF,CAAAC,OAAxB,EAAiD,EACjDC,EAAA,CAAwBF,CAAAG,YAAxB,EAAsD,CAEtD,IAAsB,OAAtB,EAAI/D,CAAJ,CAIE3F,CAAAiK,IAAA,CAAY,UAAZ,CAAwB,QAAQ,CAACC,CAAD,CAAI,CAC9BlK,CAAAA,CAAUL,CAAAK,QAAA,CAAgB,IAAhB,CACd,KAAImK,EAAQnK,CAAAM,KAAA,CAx5BGwC,kBAw5BH,CACRqH,EAAJ,GACMC,CADN,CAC6BD,CAAAX,OAAA,CAAa,UAAb,CAD7B,IAGIY,CAAArC,OAAA,EACA,CAAAkB,CAAA,CAAQjJ,CAAR,CAAiB,UAAjB,CAJJ,CAHkC,CAApC,CAeFiC;CAAAoI,SAAA,CAAkBrK,CAAlB,CAn6BwBsK,YAm6BxB,CACI5G,EAAJ,EAAeA,CAAAC,YAAf,EACEjC,CAAA,CAAQgC,CAAAC,YAAR,CAA6B,QAAQ,CAACY,CAAD,CAAY,CAC/CtC,CAAAoI,SAAA,CAAkBrK,CAAlB,CAA2BuE,CAA3B,CAD+C,CAAjD,CAKF,KAAI2E,GAAsBqB,CAAA,EAC1Bd,EAAA,EACA1F,EAAA,CAAkBQ,CAAlB,CAAA,CAA+BwE,CAE/B/I,EAAAM,KAAA,CAh7BmBwC,kBAg7BnB,CAA+B,CAC7B8G,KAAMb,CADuB,CAE7BS,OAAQzF,CAFqB,CAG7B2C,MAAOwC,EAHsB,CAI7BQ,YAAaD,CAJgB,CAA/B,CASAf,EAAA,EACAK,EAAA5C,OAAA,CAAc,QAAQ,CAACqE,CAAD,CAAY,CAChC,IAAIlK,EAAON,CAAAM,KAAA,CA37BMwC,kBA27BN,CACX0H,EAAA,CAAYA,CAAZ,EACc,CAAClK,CADf,EACuB,CAACA,CAAAkJ,OAAA,CAAYjF,CAAZ,CADxB,EAEewE,CAAA7B,aAFf,EAEsC5G,CAAAkJ,OAAA,CAAYjF,CAAZ,CAAAO,MAFtC,EAEsEa,CAEtEiD,EAAA,EACkB,EAAA,CAAlB,GAAI4B,CAAJ,CACE1B,CAAA,EADF,EAGEH,CAAA,EACA,CAAAI,CAAA7C,MAAA,CAAa4C,CAAb,CAJF,CAPgC,CAAlC,CAeA,OAAOC,EAAAhB,OAjJuH,CA0NhI0C,QAASA,EAAqB,CAACzK,CAAD,CAAU,CAEtC,GADIgH,CACJ,CADW/F,CAAA,CAAmBjB,CAAnB,CACX,CACM0K,CAGJ,CAHY/K,CAAAgL,WAAA,CAAmB3D,CAAA4D,uBAAnB,CAAA,CACV5D,CAAA4D,uBAAA,CAphCoBN,YAohCpB,CADU,CAEVtD,CAAA6D,iBAAA,CAAsB,aAAtB,CACF,CAAAnJ,CAAA,CAAQgJ,CAAR,CAAe,QAAQ,CAAC1K,CAAD,CAAU,CAC/BA,CAAA;AAAUL,CAAAK,QAAA,CAAgBA,CAAhB,CAEV,EADIM,CACJ,CADWN,CAAAM,KAAA,CA1hCIwC,kBA0hCJ,CACX,GAAYxC,CAAAkJ,OAAZ,EACE9H,CAAA,CAAQpB,CAAAkJ,OAAR,CAAqB,QAAQ,CAACT,CAAD,CAAS,CACpCA,CAAAhB,OAAA,EADoC,CAAtC,CAJ6B,CAAjC,CANoC,CAkBxCkB,QAASA,EAAO,CAACjJ,CAAD,CAAUuE,CAAV,CAAqB,CACnC,GAAIjD,EAAA,CAAkBtB,CAAlB,CAA2BuC,CAA3B,CAAJ,CACOR,CAAAiB,SAAL,GACEjB,CAAAC,QACA,CAD2B,CAAA,CAC3B,CAAAD,CAAAgB,WAAA,CAA8B,CAAA,CAFhC,CADF,KAKO,IAAIwB,CAAJ,CAAe,CACpB,IAAIjE,EAAON,CAAAM,KAAA,CA3iCMwC,kBA2iCN,CAAPxC,EAAyC,EAA7C,CAEIwK,EAAiC,CAAA,CAAjCA,GAAmBvG,CAClBuG,EAAAA,CAAL,EAAyBxK,CAAAkJ,OAAzB,EAAwClJ,CAAAkJ,OAAA,CAAYjF,CAAZ,CAAxC,GACEjE,CAAAoJ,YAAA,EACA,CAAA,OAAOpJ,CAAAkJ,OAAA,CAAYjF,CAAZ,CAFT,CAKA,IAAIuG,CAAJ,EAAyBpB,CAAApJ,CAAAoJ,YAAzB,CACEzH,CAAA+G,YAAA,CAAqBhJ,CAArB,CAljCoBsK,YAkjCpB,CACA,CAAAtK,CAAA+K,WAAA,CArjCejI,kBAqjCf,CAXkB,CANa,CAsBrCwG,QAASA,EAAkB,CAACtJ,CAAD,CAAUiI,CAAV,CAAyB,CAClD,GAAIlG,CAAAiB,SAAJ,CACE,MAAO,CAAA,CAGT,IAAI1B,EAAA,CAAkBtB,CAAlB,CAA2BuC,CAA3B,CAAJ,CACE,MAAOR,EAAAC,QANyC,KAS9CgJ,CAT8C,CASxBC,CATwB,CASAC,CAClD,GAAG,CAID,GAA6B,CAA7B,GAAIjD,CAAA5H,OAAJ,CAAgC,KAEhC,KAAI8K,EAAS7J,EAAA,CAAkB2G,CAAlB,CAAiC1F,CAAjC,CAAb,CACI4H,EAAQgB,CAAA,CAASpJ,CAAT,CAA6BkG,CAAA3H,KAAA,CA3kCxBwC,kBA2kCwB,CAA7B;AAAqE,EACjF,IAAIqH,CAAAnH,SAAJ,CACE,MAAO,CAAA,CAKLmI,EAAJ,GACED,CADF,CACc,CAAA,CADd,CAM6B,EAAA,CAA7B,GAAIF,CAAJ,GACMI,CACJ,CAD0BnD,CAAA3H,KAAA,CAxlCRC,qBAwlCQ,CAC1B,CAAIZ,CAAA0L,UAAA,CAAkBD,CAAlB,CAAJ,GACEJ,CADF,CACyBI,CADzB,CAFF,CAOAH,EAAA,CAAyBA,CAAzB,EACyBd,CAAAnI,QADzB,EAE0BmI,CAAAP,KAF1B,EAEwC,CAACO,CAAAP,KAAA1C,aA7BxC,CAAH,MA+BOe,CA/BP,CA+BuBA,CAAAoB,OAAA,EA/BvB,CAiCA,OAAO,CAAC6B,CAAR,EAAsB,CAACF,CAAvB,EAA+CC,CA3CG,CA5hCpDhJ,CAAA,CAAWU,CACXJ,EAAAjC,KAAA,CA/BqBwC,kBA+BrB,CAAoCf,CAApC,CAMA,KAAIuJ,EAAkB7I,CAAAjC,OAAA,CACpB,QAAQ,EAAG,CAAE,MAAOkC,EAAA6I,qBAAT,CADS,CAEpB,QAAQ,CAACrL,CAAD,CAAMsL,CAAN,CAAc,CACR,CAAZ,GAAItL,CAAJ,GACAoL,CAAA,EASA,CAAA7I,CAAAc,aAAA,CAAwB,QAAQ,EAAG,CACjCd,CAAAc,aAAA,CAAwB,QAAQ,EAAG,CACjCxB,CAAAC,QAAA,CAA2B,CAAA,CADM,CAAnC,CADiC,CAAnC,CAVA,CADoB,CAFF,CAAtB,CAqBIuI,EAAyB,CArB7B,CAsBIkB,EAAkBzK,CAAAyK,gBAAA,EAtBtB,CAuBIrE,EAAyBqE,CAAD,CAElB,QAAQ,CAAClH,CAAD,CAAY,CACpB,MAAOkH,EAAAC,KAAA,CAAqBnH,CAArB,CADa,CAFF,CAClB,QAAQ,EAAG,CAAE,MAAO,CAAA,CAAT,CAkVrB,OAAO,CAiDLoH,QAASA,QAAQ,CAAC3L,CAAD,CAAU8G,CAAV,CAAgBC,CAAhB,CAAoBxC,CAApB,CAA+Bb,CAA/B,CAAwC,CACvDa,CAAA,CAAYA,CAAZ,EAAyB,mBACzBb;CAAA,CAAUD,CAAA,CAAoBC,CAApB,CAAV,EAA0C,EAC1CA,EAAAoD,KAAA,CAAeC,CAAA,CAAKD,CAAL,CAAY,IAC3BpD,EAAAqD,GAAA,CAAeA,CAAA,CAAKA,CAAL,CAAUD,CAEzB,OAAO7D,EAAA,CAAuB,QAAQ,CAAC2I,CAAD,CAAO,CAC3C,MAAO5D,EAAA,CAAiB,SAAjB,CAA4BzD,CAA5B,CApbN5E,CAAAK,QAAA,CAAgBiB,CAAA,CAobsDjB,CApbtD,CAAhB,CAobM,CAA0E,IAA1E,CAAgF,IAAhF,CAAsFyB,CAAtF,CAA4FiC,CAA5F,CAAqGkI,CAArG,CADoC,CAAtC,CANgD,CAjDpD,CA6FLC,MAAOA,QAAQ,CAAC7L,CAAD,CAAUiI,CAAV,CAAyBC,CAAzB,CAAuCxE,CAAvC,CAAgD,CAC7DA,CAAA,CAAUD,CAAA,CAAoBC,CAApB,CACV1D,EAAA,CAAUL,CAAAK,QAAA,CAAgBA,CAAhB,CACViI,EAAA,CAA+BA,CAA/B,EAhectI,CAAAK,QAAA,CAgeiBiI,CAhejB,CAiedC,EAAA,CAA8BA,CAA9B,EAjecvI,CAAAK,QAAA,CAiegBkI,CAjehB,CAmedtF,EAAA,CAA4B5C,CAA5B,CAAqC,CAAA,CAArC,CACAmC,EAAA0J,MAAA,CAAgB7L,CAAhB,CAAyBiI,CAAzB,CAAwCC,CAAxC,CACA,OAAOjF,EAAA,CAAuB,QAAQ,CAAC2I,CAAD,CAAO,CAC3C,MAAO5D,EAAA,CAAiB,OAAjB,CAA0B,UAA1B,CAleNrI,CAAAK,QAAA,CAAgBiB,CAAA,CAkeqDjB,CAlerD,CAAhB,CAkeM,CAAyEiI,CAAzE,CAAwFC,CAAxF,CAAsGzG,CAAtG,CAA4GiC,CAA5G,CAAqHkI,CAArH,CADoC,CAAtC,CARsD,CA7F1D,CAyILE,MAAOA,QAAQ,CAAC9L,CAAD,CAAU0D,CAAV,CAAmB,CAChCA,CAAA,CAAUD,CAAA,CAAoBC,CAApB,CACV1D,EAAA,CAAUL,CAAAK,QAAA,CAAgBA,CAAhB,CAEVyK,EAAA,CAAsBzK,CAAtB,CACA4C,EAAA,CAA4B5C,CAA5B,CAAqC,CAAA,CAArC,CACA,OAAOiD,EAAA,CAAuB,QAAQ,CAAC2I,CAAD,CAAO,CAC3C,MAAO5D,EAAA,CAAiB,OAAjB,CAA0B,UAA1B,CA5gBNrI,CAAAK,QAAA,CAAgBiB,CAAA,CA4gBqDjB,CA5gBrD,CAAhB,CA4gBM,CAAyE,IAAzE,CAA+E,IAA/E,CAAqF,QAAQ,EAAG,CACrGmC,CAAA2J,MAAA,CAAgB9L,CAAhB,CADqG,CAAhG,CAEJ0D,CAFI,CAEKkI,CAFL,CADoC,CAAtC,CANyB,CAzI7B,CAwLLG,KAAMA,QAAQ,CAAC/L,CAAD,CAAUiI,CAAV,CAAyBC,CAAzB,CAAuCxE,CAAvC,CAAgD,CAC5DA,CAAA,CAAUD,CAAA,CAAoBC,CAApB,CACV1D,EAAA,CAAUL,CAAAK,QAAA,CAAgBA,CAAhB,CACViI;CAAA,CAA+BA,CAA/B,EA3jBctI,CAAAK,QAAA,CA2jBiBiI,CA3jBjB,CA4jBdC,EAAA,CAA8BA,CAA9B,EA5jBcvI,CAAAK,QAAA,CA4jBgBkI,CA5jBhB,CA8jBduC,EAAA,CAAsBzK,CAAtB,CACA4C,EAAA,CAA4B5C,CAA5B,CAAqC,CAAA,CAArC,CACAmC,EAAA4J,KAAA,CAAe/L,CAAf,CAAwBiI,CAAxB,CAAuCC,CAAvC,CACA,OAAOjF,EAAA,CAAuB,QAAQ,CAAC2I,CAAD,CAAO,CAC3C,MAAO5D,EAAA,CAAiB,MAAjB,CAAyB,SAAzB,CA9jBNrI,CAAAK,QAAA,CAAgBiB,CAAA,CA8jBmDjB,CA9jBnD,CAAhB,CA8jBM,CAAuEiI,CAAvE,CAAsFC,CAAtF,CAAoGzG,CAApG,CAA0GiC,CAA1G,CAAmHkI,CAAnH,CADoC,CAAtC,CATqD,CAxLzD,CAoOLvB,SAAUA,QAAQ,CAACrK,CAAD,CAAUuE,CAAV,CAAqBb,CAArB,CAA8B,CAC9C,MAAO,KAAAsI,SAAA,CAAchM,CAAd,CAAuBuE,CAAvB,CAAkC,EAAlC,CAAsCb,CAAtC,CADuC,CApO3C,CAsQLsF,YAAaA,QAAQ,CAAChJ,CAAD,CAAUuE,CAAV,CAAqBb,CAArB,CAA8B,CACjD,MAAO,KAAAsI,SAAA,CAAchM,CAAd,CAAuB,EAAvB,CAA2BuE,CAA3B,CAAsCb,CAAtC,CAD0C,CAtQ9C,CAsSLsI,SAAUA,QAAQ,CAAChM,CAAD,CAAUiM,CAAV,CAAeC,CAAf,CAAuBxI,CAAvB,CAAgC,CAChDA,CAAA,CAAUD,CAAA,CAAoBC,CAApB,CAGV1D,EAAA,CAAUL,CAAAK,QAAA,CAAgBA,CAAhB,CACVA,EAAA,CAvqBGL,CAAAK,QAAA,CAAgBiB,CAAA,CAuqBgBjB,CAvqBhB,CAAhB,CAyqBH,IAAI4C,CAAA,CAA4B5C,CAA5B,CAAJ,CACE,MAAOmC,EAAAgK,sBAAA,CAAgCnM,CAAhC,CAAyCiM,CAAzC,CAA8CC,CAA9C,CAAsDxI,CAAtD,CARuC,KAa5CgB,CAb4C,CAanCZ,EAAQ9D,CAAAM,KAAA,CAVH8L,kBAUG,CAb2B,CAc5CC,EAAW,CAAEvI,CAAAA,CACZA,EAAL,GACEA,CADF,CACU,CACF,QAAU,EADR,CADV,CAIAY,EAAA,CAAUZ,CAAAY,QAEVuH,EAAA,CAAMpK,EAAA,CAAQoK,CAAR,CAAA,CAAeA,CAAf,CAAqBA,CAAArI,MAAA,CAAU,GAAV,CAC3BlC,EAAA,CAAQuK,CAAR,CAAa,QAAQ,CAACK,CAAD,CAAI,CACnBA,CAAJ,EAASA,CAAAjM,OAAT,GACEqE,CAAA,CAAQ4H,CAAR,CADF;AACe,CAAA,CADf,CADuB,CAAzB,CAMAJ,EAAA,CAASrK,EAAA,CAAQqK,CAAR,CAAA,CAAkBA,CAAlB,CAA2BA,CAAAtI,MAAA,CAAa,GAAb,CACpClC,EAAA,CAAQwK,CAAR,CAAgB,QAAQ,CAACI,CAAD,CAAI,CACtBA,CAAJ,EAASA,CAAAjM,OAAT,GACEqE,CAAA,CAAQ4H,CAAR,CADF,CACe,CAAA,CADf,CAD0B,CAA5B,CAMA,IAAID,CAAJ,CAME,MALI3I,EAKGN,EALQU,CAAAJ,QAKRN,GAJLU,CAAAJ,QAIKN,CAJWzD,CAAAmI,OAAA,CAAehE,CAAAJ,QAAf,EAAgC,EAAhC,CAAoCA,CAApC,CAIXN,EAAAU,CAAAV,QAEPpD,EAAAM,KAAA,CAxCgB8L,kBAwChB,CAA0BtI,CAA1B,CAAkC,CAChCY,QAASA,CADuB,CAEhChB,QAASA,CAFuB,CAAlC,CAMF,OAAOI,EAAAV,QAAP,CAAuBH,CAAA,CAAuB,QAAQ,CAAC2I,CAAD,CAAO,CAC3D,IAAI3D,EAAgBjI,CAAAqJ,OAAA,EAApB,CACIkD,EAActL,CAAA,CAAmBjB,CAAnB,CADlB,CAEIwM,EAAaD,CAAAC,WAEjB,IAAKA,CAAAA,CAAL,EAAmBA,CAAA,aAAnB,EAAiDD,CAAA,aAAjD,CACEX,CAAA,EADF,KAAA,CAKI9H,CAAAA,CAAQ9D,CAAAM,KAAA,CAxDI8L,kBAwDJ,CACZpM,EAAA+K,WAAA,CAzDgBqB,kBAyDhB,CAEIjC,KAAAA,EAAQnK,CAAAM,KAAA,CAnvBGwC,kBAmvBH,CAARqH,EAA0C,EAA1CA,CACAzF,EAAUb,CAAA,CAAsB7D,CAAtB,CAA+B8D,CAA/B,CAAsCqG,CAAAX,OAAtC,CACd,OAAQ9E,EAAD,CAEHsD,CAAA,CAAiB,UAAjB,CAA6BtD,CAA7B,CAAsC1E,CAAtC,CAA+CiI,CAA/C,CAA8D,IAA9D,CAAoE,QAAQ,EAAG,CACzEvD,CAAA,CAAQ,CAAR,CAAJ,EAAgBvC,CAAAsK,sBAAA,CAAgCzM,CAAhC;AAAyC0E,CAAA,CAAQ,CAAR,CAAzC,CACZA,EAAA,CAAQ,CAAR,CAAJ,EAAgBvC,CAAAuK,yBAAA,CAAmC1M,CAAnC,CAA4C0E,CAAA,CAAQ,CAAR,CAA5C,CAF6D,CAA/E,CAGGZ,CAAAJ,QAHH,CAGkBkI,CAHlB,CAFG,CACHA,CAAA,EAXJ,CAL2D,CAAtC,CAjDyB,CAtS7C,CAyXL7D,OAAQA,QAAQ,CAAC3E,CAAD,CAAU,CACxBA,CAAAC,WAAA,EADwB,CAzXrB,CA0YLsJ,QAASA,QAAQ,CAAClM,CAAD,CAAQT,CAAR,CAAiB,CAChC,OAAQ4M,SAAAvM,OAAR,EACE,KAAK,CAAL,CACE,GAAII,CAAJ,CACEwI,CAAA,CAAQjJ,CAAR,CADF,KAEO,CACL,IAAIM,EAAON,CAAAM,KAAA,CA/xBAwC,kBA+xBA,CAAPxC,EAAyC,EAC7CA,EAAA0C,SAAA,CAAgB,CAAA,CAChBhD,EAAAM,KAAA,CAjyBWwC,kBAiyBX,CAA+BxC,CAA/B,CAHK,CAKT,KAEA,MAAK,CAAL,CACEyB,CAAAiB,SAAA,CAA4B,CAACvC,CAC/B,MAEA,SACEA,CAAA,CAAQ,CAACsB,CAAAiB,SAhBb,CAmBA,MAAO,CAAEvC,CAAAA,CApBuB,CA1Y7B,CAnXuI,CAD5I,CADJ,CA+kCAO,EAAA6L,SAAA,CAA0B,EAA1B,CAA8B,CAAC,SAAD,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,iBAApC,CACP,QAAQ,CAACC,CAAD,CAAYxK,CAAZ,CAAwByK,CAAxB,CAAoCC,CAApC,CAAqD,CA6ClFC,QAASA,EAAqB,EAAG,CAC1BC,CAAL,GACEA,CADF,CAC0BF,CAAA,CAAgB,QAAQ,EAAG,CACjDG,CAAA,CAAuB,EACvBD,EAAA,CAAwB,IACxBE,EAAA,CAAc,EAHmC,CAA3B,CAD1B,CAD+B,CAUjCC,QAASA,EAAW,CAACrN,CAAD,CAAUsN,CAAV,CAAoB,CAClCJ,CAAJ,EACEA,CAAA,EAEFC,EAAApI,KAAA,CAA0BuI,CAA1B,CACAJ,EAAA,CAAwBF,CAAA,CAAgB,QAAQ,EAAG,CACjDtL,CAAA,CAAQyL,CAAR;AAA8B,QAAQ,CAACtM,CAAD,CAAK,CACzCA,CAAA,EADyC,CAA3C,CAIAsM,EAAA,CAAuB,EACvBD,EAAA,CAAwB,IACxBE,EAAA,CAAc,EAPmC,CAA3B,CALc,CAmBxCG,QAASA,EAAqB,CAACvN,CAAD,CAAUwN,CAAV,CAAqB,CACjD,IAAIxG,EAAO/F,CAAA,CAAmBjB,CAAnB,CACXA,EAAA,CAAUL,CAAAK,QAAA,CAAgBgH,CAAhB,CAIVyG,EAAA1I,KAAA,CAA2B/E,CAA3B,CAII0N,EAAAA,CAAkBC,IAAAC,IAAA,EAAlBF,CAA+BF,CAC/BE,EAAJ,EAAuBG,CAAvB,GAIAd,CAAAhF,OAAA,CAAgB+F,CAAhB,CAGA,CADAD,CACA,CADmBH,CACnB,CAAAI,CAAA,CAAef,CAAA,CAAS,QAAQ,EAAG,CACjCgB,CAAA,CAAmBN,CAAnB,CACAA,EAAA,CAAwB,EAFS,CAApB,CAGZD,CAHY,CAGD,CAAA,CAHC,CAPf,CAXiD,CAwBnDO,QAASA,EAAkB,CAACC,CAAD,CAAW,CACpCtM,CAAA,CAAQsM,CAAR,CAAkB,QAAQ,CAAChO,CAAD,CAAU,CAElC,CADIiO,CACJ,CADkBjO,CAAAM,KAAA,CAhEQ4N,qBAgER,CAClB,GACExM,CAAA,CAAQuM,CAAAE,kBAAR,CAAuC,QAAQ,CAACtN,CAAD,CAAK,CAClDA,CAAA,EADkD,CAApD,CAHgC,CAApC,CADoC,CAWtCuN,QAASA,EAA0B,CAACpO,CAAD,CAAUqO,CAAV,CAAoB,CACrD,IAAI/N,EAAO+N,CAAA,CAAWjB,CAAA,CAAYiB,CAAZ,CAAX,CAAmC,IAC9C,IAAK/N,CAAAA,CAAL,CAAW,CACT,IAAIgO,EAAqB,CAAzB,CACIC,EAAkB,CADtB,CAEIC,EAAoB,CAFxB,CAGIC,EAAiB,CAGrB/M,EAAA,CAAQ1B,CAAR,CAAiB,QAAQ,CAACA,CAAD,CAAU,CACjC,GAluCWoB,CAkuCX,EAAIpB,CAAAqB,SAAJ,CAAsC,CAChCqN,CAAAA,CAAgB5B,CAAA6B,iBAAA,CAAyB3O,CAAzB,CAAhB0O,EAAqD,EAGzDJ,EAAA,CAAqBM,IAAAC,IAAA,CAASC,CAAA,CADAJ,CAAAK,CAAcC,CAAdD,CA5FnBE,UA4FmBF,CACA,CAAT,CAAgDT,CAAhD,CAGrBC,EAAA,CAAmBK,IAAAC,IAAA,CAASC,CAAA,CADDJ,CAAAQ,CAAcF,CAAdE,CA7FnBC,OA6FmBD,CACC,CAAT,CAA6CX,CAA7C,CAGnBE,EAAA,CAAmBG,IAAAC,IAAA,CAASC,CAAA,CAAaJ,CAAA,CAAcU,CAAd,CAjGjCD,OAiGiC,CAAb,CAAT,CAAkEV,CAAlE,CAEnB,KAAIY,EAAaP,CAAA,CAAaJ,CAAA,CAAcU,CAAd,CArGnBH,UAqGmB,CAAb,CAED;CAAhB,CAAII,CAAJ,GACEA,CADF,EACeC,QAAA,CAASZ,CAAA,CAAcU,CAAd,CArGIG,gBAqGJ,CAAT,CAAwE,EAAxE,CADf,EAC8F,CAD9F,CAGAf,EAAA,CAAoBI,IAAAC,IAAA,CAASQ,CAAT,CAAoBb,CAApB,CAjBgB,CADL,CAAnC,CAqBAlO,EAAA,CAAO,CACLkP,MAAO,CADF,CAELjB,gBAAiBA,CAFZ,CAGLD,mBAAoBA,CAHf,CAILG,eAAgBA,CAJX,CAKLD,kBAAmBA,CALd,CAOHH,EAAJ,GACEjB,CAAA,CAAYiB,CAAZ,CADF,CAC0B/N,CAD1B,CAnCS,CAuCX,MAAOA,EAzC8C,CA4CvDwO,QAASA,EAAY,CAACW,CAAD,CAAM,CACzB,IAAIC,EAAW,CACXC,EAAAA,CAASvP,EAAA,CAASqP,CAAT,CAAA,CACXA,CAAA7L,MAAA,CAAU,SAAV,CADW,CAEX,EACFlC,EAAA,CAAQiO,CAAR,CAAgB,QAAQ,CAAClP,CAAD,CAAQ,CAC9BiP,CAAA,CAAWd,IAAAC,IAAA,CAASe,UAAA,CAAWnP,CAAX,CAAT,EAA8B,CAA9B,CAAiCiP,CAAjC,CADmB,CAAhC,CAGA,OAAOA,EARkB,CAqB3BG,QAASA,EAAY,CAAClK,CAAD,CAAiB3F,CAAjB,CAA0BuE,CAA1B,CAAqCuL,CAArC,CAA6C,CAC5D/M,CAAAA,CAAqE,CAArEA,EAAa,CAAC,UAAD,CAAY,UAAZ,CAAuB,SAAvB,CAAAgN,QAAA,CAA0CxL,CAA1C,CAEjB,KAAI8J,CAAJ,CAZIpG,EAYuBjI,CAZPqJ,OAAA,EAYpB,CAXI2G,EAAW/H,CAAA3H,KAAA,CAnIW2P,gBAmIX,CACVD,EAAL,GACE/H,CAAA3H,KAAA,CArIwB2P,gBAqIxB,CAA0C,EAAEC,CAA5C,CACA,CAAAF,CAAA,CAAWE,CAFb,CAIA,EAAA,CAAOF,CAAP,CAAkB,GAAlB,CAAwB/O,CAAA,CAMGjB,CANH,CAAAmQ,aAAA,CAAyC,OAAzC,CAOpBC,KAAAA,EAAgB/B,CAAhB+B,CAA2B,GAA3BA,CAAiC7L,CAAjC6L,CACAC,EAAYjD,CAAA,CAAYgD,CAAZ,CAAA,CAA6B,EAAEhD,CAAA,CAAYgD,CAAZ,CAAAZ,MAA/B;AAAkE,CAD9EY,CAGAE,EAAU,EACd,IAAgB,CAAhB,CAAID,CAAJ,CAAmB,CACjB,IAAIE,EAAmBhM,CAAnBgM,CAA+B,UAAnC,CACIC,EAAkBnC,CAAlBmC,CAA6B,GAA7BA,CAAmCD,CAGvC,EAFIE,CAEJ,CAFmB,CAACrD,CAAA,CAAYoD,CAAZ,CAEpB,GAAgBvO,CAAAoI,SAAA,CAAkBrK,CAAlB,CAA2BuQ,CAA3B,CAEhBD,EAAA,CAAUlC,CAAA,CAA2BpO,CAA3B,CAAoCwQ,CAApC,CAEVC,EAAA,EAAgBxO,CAAA+G,YAAA,CAAqBhJ,CAArB,CAA8BuQ,CAA9B,CATC,CAYnBtO,CAAAoI,SAAA,CAAkBrK,CAAlB,CAA2BuE,CAA3B,CAEImM,KAAAA,EAAa1Q,CAAAM,KAAA,CAhKW4N,qBAgKX,CAAbwC,EAAsD,EAAtDA,CACAC,EAAUvC,CAAA,CAA2BpO,CAA3B,CAAoCoQ,CAApC,CACV9B,EAAAA,CAAqBqC,CAAArC,mBACrBE,EAAAA,CAAoBmC,CAAAnC,kBAExB,IAAIzL,CAAJ,EAAyC,CAAzC,GAAkBuL,CAAlB,EAAoE,CAApE,GAA8CE,CAA9C,CAEE,MADAvM,EAAA+G,YAAA,CAAqBhJ,CAArB,CAA8BuE,CAA9B,CACO,CAAA,CAAA,CAGLqM,EAAAA,CAAkBd,CAAlBc,EAA6B7N,CAA7B6N,EAAgE,CAAhEA,CAA2CtC,CAC3CuC,EAAAA,CAAqC,CAArCA,CAAiBrC,CAAjBqC,EAC0C,CAD1CA,CACiBP,CAAA7B,eADjBoC,EAE+C,CAF/CA,GAEiBP,CAAA9B,kBAGrBxO,EAAAM,KAAA,CAhL4B4N,qBAgL5B,CAAsC,CACpCoC,QAASA,CAD2B,CAEpCjC,SAAU+B,CAF0B,CAGpCpO,QAAS0O,CAAA1O,QAATA,EAA+B,CAHK,CAIpCqO,UAAWA,CAJyB,CAKpCO,gBAAiBA,CALmB,CAMpCzC,kBAPsBuC,CAAAvC,kBAOtBA,EAPsD,EAClB,CAAtC,CASInH,EAAAA,CAAO/F,CAAA,CAAmBjB,CAAnB,CAEP4Q,EAAJ,GACEE,CAAA,CAAiB9J,CAAjB,CAAuB,CAAA,CAAvB,CACA,CAAI8I,CAAJ,EACE9P,CAAA6H,IAAA,CAAYiI,CAAZ,CAHJ,CAOIe;CAAJ,GACkB7J,CAsKlB+J,MAAA,CAAW3B,CAAX,CA3W4B4B,WA2W5B,CAvKA,CAuK8D,QAvK9D,CAIA,OAAO,CAAA,CA5DyD,CA+DlEC,QAASA,EAAU,CAACtL,CAAD,CAAiB3F,CAAjB,CAA0BuE,CAA1B,CAAqC2M,CAArC,CAA8DpB,CAA9D,CAAsE,CAuHvFqB,QAASA,EAAK,EAAG,CACfnR,CAAAoR,IAAA,CAAYC,CAAZ,CAAiCC,CAAjC,CACArP,EAAA+G,YAAA,CAAqBhJ,CAArB,CAA8BuR,CAA9B,CACAtP,EAAA+G,YAAA,CAAqBhJ,CAArB,CAA8BwR,CAA9B,CACIC,EAAJ,EACE1E,CAAAhF,OAAA,CAAgB0J,CAAhB,CAEFC,EAAA,CAAa1R,CAAb,CAAsBuE,CAAtB,CACA,KAAIyC,EAAO/F,CAAA,CAAmBjB,CAAnB,CAAX,CACSkB,CAAT,KAASA,CAAT,GAAcyQ,EAAd,CACE3K,CAAA+J,MAAAa,eAAA,CAA0BD,CAAA,CAAczQ,CAAd,CAA1B,CAVa,CAcjBoQ,QAASA,EAAmB,CAACxM,CAAD,CAAQ,CAClCA,CAAA+M,gBAAA,EACA,KAAIC,EAAKhN,CAAAiN,cAALD,EAA4BhN,CAC5BkN,EAAAA,CAAYF,CAAAG,iBAAZD,EAAmCF,CAAAE,UAAnCA,EAAmDrE,IAAAC,IAAA,EAInDsE,EAAAA,CAActC,UAAA,CAAWkC,CAAAI,YAAAC,QAAA,CApVKC,CAoVL,CAAX,CASdxD,KAAAC,IAAA,CAASmD,CAAT,CAAqBK,CAArB,CAAgC,CAAhC,CAAJ,EAA0CC,CAA1C,EAA0DJ,CAA1D,EAAyEK,CAAzE,EACErB,CAAA,EAjBgC,CApIpC,IAAIlK,EAAO/F,CAAA,CAAmBjB,CAAnB,CACPiO,EAAAA,CAAcjO,CAAAM,KAAA,CA3MU4N,qBA2MV,CAClB,IAAsD,EAAtD,EAAIlH,CAAAmJ,aAAA,CAAkB,OAAlB,CAAAJ,QAAA,CAAmCxL,CAAnC,CAAJ,EAA4D0J,CAA5D,CAAA,CAKA,IAAIsD,EAAkB,EAAtB,CACIC,EAAmB,EACvB9P,EAAA,CAAQ6C,CAAAX,MAAA,CAAgB,GAAhB,CAAR,CAA8B,QAAQ,CAAC4B,CAAD;AAAQtE,CAAR,CAAW,CAC/C,IAAIsR,GAAc,CAAJ,CAAAtR,CAAA,CAAQ,GAAR,CAAc,EAAxBsR,EAA8BhN,CAClC+L,EAAA,EAAmBiB,CAAnB,CAA4B,SAC5BhB,EAAA,EAAoBgB,CAApB,CAA6B,UAHkB,CAAjD,CAOA,KAAIb,EAAgB,EAApB,CACItB,EAAYpC,CAAAoC,UADhB,CAEIC,EAAUrC,CAAAqC,QAFd,CAGImC,EAAc,CAClB,IAAgB,CAAhB,CAAIpC,CAAJ,CAAmB,CACbqC,CAAAA,CAAyB,CACC,EAA9B,CAAIpC,CAAA/B,gBAAJ,EAAkE,CAAlE,GAAmC+B,CAAAhC,mBAAnC,GACEoE,CADF,CAC2BpC,CAAA/B,gBAD3B,CACqD8B,CADrD,CAIA,KAAIsC,EAAwB,CACC,EAA7B,CAAIrC,CAAA7B,eAAJ,EAAgE,CAAhE,GAAkC6B,CAAA9B,kBAAlC,GACEmE,CACA,CADwBrC,CAAA7B,eACxB,CADiD4B,CACjD,CAAAsB,CAAA5M,KAAA,CAAmB6N,CAAnB,CAAgC,sBAAhC,CAFF,CAKAH,EAAA,CAAc7D,IAAAiE,MAAA,CAAqE,GAArE,CAAWjE,IAAAC,IAAA,CAAS6D,CAAT,CAAiCC,CAAjC,CAAX,CAAd,CAA0F,GAZzE,CAedF,CAAL,GACExQ,CAAAoI,SAAA,CAAkBrK,CAAlB,CAA2BuR,CAA3B,CACA,CAAItD,CAAA2C,gBAAJ,EACEE,CAAA,CAAiB9J,CAAjB,CAAuB,CAAA,CAAvB,CAHJ,CAQA,KAAI2J,EAAUvC,CAAA,CAA2BpO,CAA3B,CADMiO,CAAAI,SACN,CAD6B,GAC7B,CADmCkD,CACnC,CAAd,CACIgB,EAAc3D,IAAAC,IAAA,CAAS8B,CAAArC,mBAAT,CAAqCqC,CAAAnC,kBAArC,CAClB,IAAoB,CAApB,GAAI+D,CAAJ,CACEtQ,CAAA+G,YAAA,CAAqBhJ,CAArB,CAA8BuR,CAA9B,CAEA,CADAG,CAAA,CAAa1R,CAAb,CAAsBuE,CAAtB,CACA,CAAA2M,CAAA,EAHF,KAAA,CAOKuB,CAAAA,CAAL;AAAoB3C,CAApB,GACOa,CAAArC,mBAIL,GAHEtO,CAAA6H,IAAA,CAAY,YAAZ,CAA0B8I,CAAAnC,kBAA1B,CAAsD,cAAtD,CACA,CAAAmD,CAAA5M,KAAA,CAAmB,YAAnB,CAEF,EAAA/E,CAAA6H,IAAA,CAAYiI,CAAZ,CALF,CAQIgD,KAAAA,EAAWlE,IAAAC,IAAA,CAAS8B,CAAApC,gBAAT,CAAkCoC,CAAAlC,eAAlC,CAAXqE,CACAR,EApQWS,GAoQXT,CAAeQ,CAEQ,EAA3B,CAAInB,CAAAtR,OAAJ,GAIM2S,CAIJ,CAJehM,CAAAmJ,aAAA,CAAkB,OAAlB,CAIf,EAJ6C,EAI7C,CAH6C,GAG7C,GAHI6C,CAAAhN,OAAA,CAAgBgN,CAAA3S,OAAhB,CAAkC,CAAlC,CAGJ,GAFE2S,CAEF,EAFc,GAEd,EAAAhM,CAAAiM,aAAA,CAAkB,OAAlB,CAA2BD,CAA3B,CAxDUjC,GAwDV,CARF,CAWA,KAAIsB,EAAY1E,IAAAC,IAAA,EAAhB,CACIyD,EAAsB6B,CAAtB7B,CAA2C,GAA3CA,CAAiD8B,CADrD,CAGI3F,EApRWuF,GAoRXvF,EAAqBiF,CAArBjF,CArRoB4F,GAqRpB5F,EADqBsF,CACrBtF,CADgC+E,CAChC/E,EAHJ,CAKIiE,CACc,EAAlB,CAAIgB,CAAJ,GACExQ,CAAAoI,SAAA,CAAkBrK,CAAlB,CAA2BwR,CAA3B,CACA,CAAAC,CAAA,CAAiB1E,CAAA,CAAS,QAAQ,EAAG,CACnC0E,CAAA,CAAiB,IAEgB,EAAjC,CAAId,CAAArC,mBAAJ,EACEwC,CAAA,CAAiB9J,CAAjB,CAAuB,CAAA,CAAvB,CAE8B,EAAhC,CAAI2J,CAAAnC,kBAAJ,GACkBxH,CAsEtB+J,MAAA,CAAW3B,CAAX,CA3W4B4B,WA2W5B,CAvEI,CAuEqE,EAvErE,CAIA/O,EAAAoI,SAAA,CAAkBrK,CAAlB,CAA2BuR,CAA3B,CACAtP,EAAA+G,YAAA,CAAqBhJ,CAArB,CAA8BwR,CAA9B,CAEI1B,EAAJ,GACqC,CAInC;AAJIa,CAAArC,mBAIJ,EAHEtO,CAAA6H,IAAA,CAAY,YAAZ,CAA0B8I,CAAAnC,kBAA1B,CAAsD,cAAtD,CAGF,CADAxO,CAAA6H,IAAA,CAAYiI,CAAZ,CACA,CAAA6B,CAAA5M,KAAA,CAAmB,YAAnB,CALF,CAbmC,CAApB,CAzRJgO,GAyRI,CAoBdN,CApBc,CAoBY,CAAA,CApBZ,CAFnB,CAyBAzS,EAAAqT,GAAA,CAAWhC,CAAX,CAAgCC,CAAhC,CACArD,EAAAE,kBAAApJ,KAAA,CAAmC,QAAQ,EAAG,CAC5CoM,CAAA,EACAD,EAAA,EAF4C,CAA9C,CAKAjD,EAAAjM,QAAA,EACAuL,EAAA,CAAsBvN,CAAtB,CAA+BwN,CAA/B,CACA,OAAO2D,EApEP,CA3CA,CAAA,IACED,EAAA,EAJqF,CA2JzFJ,QAASA,EAAgB,CAAC9J,CAAD,CAAOsM,CAAP,CAAa,CACpCtM,CAAA+J,MAAA,CAAW/B,CAAX,CA1WiBuE,UA0WjB,CAAA,CAA6CD,CAAA,CAAO,MAAP,CAAgB,EADzB,CAQtCE,QAASA,EAAa,CAAC7N,CAAD,CAAiB3F,CAAjB,CAA0BuE,CAA1B,CAAqCuL,CAArC,CAA6C,CACjE,GAAID,CAAA,CAAalK,CAAb,CAA6B3F,CAA7B,CAAsCuE,CAAtC,CAAiDuL,CAAjD,CAAJ,CACE,MAAO,SAAQ,CAACtF,CAAD,CAAY,CACzBA,CAAA,EAAakH,CAAA,CAAa1R,CAAb,CAAsBuE,CAAtB,CADY,CAFoC,CAQnEkP,QAASA,EAAY,CAAC9N,CAAD,CAAiB3F,CAAjB,CAA0BuE,CAA1B,CAAqCmP,CAArC,CAA6D5D,CAA7D,CAAqE,CACxF,GAAI9P,CAAAM,KAAA,CArXwB4N,qBAqXxB,CAAJ,CACE,MAAO+C,EAAA,CAAWtL,CAAX,CAA2B3F,CAA3B,CAAoCuE,CAApC,CAA+CmP,CAA/C,CAAuE5D,CAAvE,CAEP4B,EAAA,CAAa1R,CAAb,CAAsBuE,CAAtB,CACAmP,EAAA,EALsF,CAS1F/H,QAASA,EAAO,CAAChG,CAAD,CAAiB3F,CAAjB,CAA0BuE,CAA1B,CAAqCoP,CAArC,CAAwDjQ,CAAxD,CAAiE,CAI/E,IAAIkQ,EAAwBJ,CAAA,CAAc7N,CAAd,CAA8B3F,CAA9B,CAAuCuE,CAAvC,CAAkDb,CAAAoD,KAAlD,CAC5B,IAAK8M,CAAL,CAAA,CAWA,IAAI7L,EAAS6L,CACbvG,EAAA,CAAYrN,CAAZ,CAAqB,QAAQ,EAAG,CAI9B+H,CAAA,CAAS0L,CAAA,CAAa9N,CAAb,CAA6B3F,CAA7B,CAAsCuE,CAAtC,CAAiDoP,CAAjD,CAAoEjQ,CAAAqD,GAApE,CAJqB,CAAhC,CAOA;MAAO,SAAQ,CAACyD,CAAD,CAAY,CACzB,CAACzC,CAAD,EAAWtG,CAAX,EAAiB+I,CAAjB,CADyB,CAnB3B,CACEyC,CAAA,EACA0G,EAAA,EAP6E,CA6BjFjC,QAASA,EAAY,CAAC1R,CAAD,CAAUuE,CAAV,CAAqB,CACxCtC,CAAA+G,YAAA,CAAqBhJ,CAArB,CAA8BuE,CAA9B,CACA,KAAIjE,EAAON,CAAAM,KAAA,CA5ZiB4N,qBA4ZjB,CACP5N,EAAJ,GACMA,CAAA0B,QAGJ,EAFE1B,CAAA0B,QAAA,EAEF,CAAK1B,CAAA0B,QAAL,EAAsC,CAAtC,GAAqB1B,CAAA0B,QAArB,EACEhC,CAAA+K,WAAA,CAlawBmD,qBAkaxB,CALJ,CAHwC,CA0F1C2F,QAASA,EAAa,CAACnP,CAAD,CAAUoP,CAAV,CAAkB,CACtC,IAAIvP,EAAY,EAChBG,EAAA,CAAU7C,EAAA,CAAQ6C,CAAR,CAAA,CAAmBA,CAAnB,CAA6BA,CAAAd,MAAA,CAAc,KAAd,CACvClC,EAAA,CAAQgD,CAAR,CAAiB,QAAQ,CAACc,CAAD,CAAQtE,CAAR,CAAW,CAC9BsE,CAAJ,EAA4B,CAA5B,CAAaA,CAAAnF,OAAb,GACEkE,CADF,GACoB,CAAJ,CAAArD,CAAA,CAAQ,GAAR,CAAc,EAD9B,EACoCsE,CADpC,CAC4CsO,CAD5C,CADkC,CAApC,CAKA,OAAOvP,EAR+B,CAxhB0C,IAE9EqO,EAAa,EAFiE,CAE7D5D,CAF6D,CAE5CmE,CAF4C,CAEvB/D,CAFuB,CAEP8D,CAUvExT,EAAAqU,gBAAJ,GAA+BnU,CAA/B,EAA4CF,CAAAsU,sBAA5C,GAA6EpU,CAA7E,EACEgT,CAEA,CAFa,UAEb,CADA5D,CACA,CADkB,kBAClB,CAAAmE,CAAA,CAAsB,mCAHxB,GAKEnE,CACA,CADkB,YAClB,CAAAmE,CAAA,CAAsB,eANxB,CASIzT,EAAAuU,eAAJ;AAA8BrU,CAA9B,EAA2CF,CAAAwU,qBAA3C,GAA2EtU,CAA3E,EACEgT,CAEA,CAFa,UAEb,CADAxD,CACA,CADiB,iBACjB,CAAA8D,CAAA,CAAqB,iCAHvB,GAKE9D,CACA,CADiB,WACjB,CAAA8D,CAAA,CAAqB,cANvB,CAoBA,KAAI9F,EAAc,EAAlB,CACI8C,EAAgB,CADpB,CAEI/C,EAAuB,EAF3B,CAGID,CAHJ,CA8BIY,EAAe,IA9BnB,CA+BID,EAAmB,CA/BvB,CAgCIJ,EAAwB,EAkY5B,OAAO,CACL9B,QAASA,QAAQ,CAAC3L,CAAD,CAAUuE,CAAV,CAAqBuC,CAArB,CAA2BC,CAA3B,CAA+BoN,CAA/B,CAAmDzQ,CAAnD,CAA4D,CAC3EA,CAAA,CAAUA,CAAV,EAAqB,EACrBA,EAAAoD,KAAA,CAAeA,CACfpD,EAAAqD,GAAA,CAAaA,CACb,OAAO4E,EAAA,CAAQ,SAAR,CAAmB3L,CAAnB,CAA4BuE,CAA5B,CAAuC4P,CAAvC,CAA2DzQ,CAA3D,CAJoE,CADxE,CAQLmI,MAAOA,QAAQ,CAAC7L,CAAD,CAAUmU,CAAV,CAA8BzQ,CAA9B,CAAuC,CACpDA,CAAA,CAAUA,CAAV,EAAqB,EACrB,OAAOiI,EAAA,CAAQ,OAAR,CAAiB3L,CAAjB,CAA0B,UAA1B,CAAsCmU,CAAtC,CAA0DzQ,CAA1D,CAF6C,CARjD,CAaLoI,MAAOA,QAAQ,CAAC9L,CAAD,CAAUmU,CAAV,CAA8BzQ,CAA9B,CAAuC,CACpDA,CAAA,CAAUA,CAAV,EAAqB,EACrB,OAAOiI,EAAA,CAAQ,OAAR,CAAiB3L,CAAjB,CAA0B,UAA1B,CAAsCmU,CAAtC,CAA0DzQ,CAA1D,CAF6C,CAbjD,CAkBLqI,KAAMA,QAAQ,CAAC/L,CAAD,CAAUmU,CAAV,CAA8BzQ,CAA9B,CAAuC,CACnDA,CAAA,CAAUA,CAAV,EAAqB,EACrB,OAAOiI,EAAA,CAAQ,MAAR,CAAgB3L,CAAhB,CAAyB,SAAzB,CAAoCmU,CAApC,CAAwDzQ,CAAxD,CAF4C,CAlBhD,CAuBL0Q,eAAgBA,QAAQ,CAACpU,CAAD,CAAUiM,CAAV,CAAeC,CAAf,CAAuBiI,CAAvB,CAA2CzQ,CAA3C,CAAoD,CAC1EA,CAAA,CAAUA,CAAV,EAAqB,EACjBa,EAAAA,CAAYsP,CAAA,CAAc3H,CAAd;AAAsB,SAAtB,CAAZ3H,CAA+C,GAA/CA,CACYsP,CAAA,CAAc5H,CAAd,CAAmB,MAAnB,CAEhB,IADIoI,CACJ,CADyBb,CAAA,CAAc,UAAd,CAA0BxT,CAA1B,CAAmCuE,CAAnC,CAA8Cb,CAAAoD,KAA9C,CACzB,CAEE,MADAuG,EAAA,CAAYrN,CAAZ,CAAqBmU,CAArB,CACOE,CAAAA,CAETpH,EAAA,EACAkH,EAAA,EAV0E,CAvBvE,CAoCLG,eAAgBA,QAAQ,CAACtU,CAAD,CAAUuE,CAAV,CAAqB4P,CAArB,CAAyCzQ,CAAzC,CAAkD,CACxEA,CAAA,CAAUA,CAAV,EAAqB,EAErB,IADI2Q,CACJ,CADyBb,CAAA,CAAc,UAAd,CAA0BxT,CAA1B,CAAmC6T,CAAA,CAActP,CAAd,CAAyB,MAAzB,CAAnC,CAAqEb,CAAAoD,KAArE,CACzB,CAEE,MADAuG,EAAA,CAAYrN,CAAZ,CAAqBmU,CAArB,CACOE,CAAAA,CAETpH,EAAA,EACAkH,EAAA,EARwE,CApCrE,CA+CLI,kBAAmBA,QAAQ,CAACvU,CAAD,CAAUuE,CAAV,CAAqB4P,CAArB,CAAyCzQ,CAAzC,CAAkD,CAC3EA,CAAA,CAAUA,CAAV,EAAqB,EAErB,IADI2Q,CACJ,CADyBb,CAAA,CAAc,aAAd,CAA6BxT,CAA7B,CAAsC6T,CAAA,CAActP,CAAd,CAAyB,SAAzB,CAAtC,CAA2Eb,CAAAoD,KAA3E,CACzB,CAEE,MADAuG,EAAA,CAAYrN,CAAZ,CAAqBmU,CAArB,CACOE,CAAAA,CAETpH,EAAA,EACAkH,EAAA,EAR2E,CA/CxE,CA0DLnI,SAAUA,QAAQ,CAAChM,CAAD,CAAUiM,CAAV,CAAeC,CAAf,CAAuBiI,CAAvB,CAA2CzQ,CAA3C,CAAoD,CACpEA,CAAA,CAAUA,CAAV,EAAqB,EACrBwI,EAAA,CAAS2H,CAAA,CAAc3H,CAAd,CAAsB,SAAtB,CACTD,EAAA,CAAM4H,CAAA,CAAc5H,CAAd,CAAmB,MAAnB,CAEN,OAAOwH,EAAA,CAAa,UAAb,CAAyBzT,CAAzB,CADSkM,CACT,CADkB,GAClB,CADwBD,CACxB,CAA6CkI,CAA7C,CAAiEzQ,CAAAqD,GAAjE,CAL6D,CA1DjE,CAkELsD,SAAUA,QAAQ,CAACrK,CAAD,CAAUuE,CAAV,CAAqB4P,CAArB,CAAyCzQ,CAAzC,CAAkD,CAClEA,CAAA,CAAUA,CAAV,EAAqB,EACrB,OAAO+P,EAAA,CAAa,UAAb,CAAyBzT,CAAzB,CAAkC6T,CAAA,CAActP,CAAd,CAAyB,MAAzB,CAAlC,CAAoE4P,CAApE,CAAwFzQ,CAAAqD,GAAxF,CAF2D,CAlE/D,CAuELiC,YAAaA,QAAQ,CAAChJ,CAAD;AAAUuE,CAAV,CAAqB4P,CAArB,CAAyCzQ,CAAzC,CAAkD,CACrEA,CAAA,CAAUA,CAAV,EAAqB,EACrB,OAAO+P,EAAA,CAAa,aAAb,CAA4BzT,CAA5B,CAAqC6T,CAAA,CAActP,CAAd,CAAyB,SAAzB,CAArC,CAA0E4P,CAA1E,CAA8FzQ,CAAAqD,GAA9F,CAF8D,CAvElE,CA3c2E,CADtD,CAA9B,CAlnC4E,CAAtE,CAlDV,CAxYsC,CAArC,CAAD,CAmlEGrH,MAnlEH,CAmlEWA,MAAAC,QAnlEX;",
6
-"sources":["angular-animate.js"],
7
-"names":["window","angular","undefined","module","directive","scope","element","attrs","val","ngAnimateChildren","isString","length","data","NG_ANIMATE_CHILDREN","$watch","value","factory","$$rAF","$document","fn","config","$provide","$animateProvider","extractElementNode","i","elm","ELEMENT_NODE","nodeType","isMatchingElement","elm1","elm2","noop","forEach","selectors","$$selectors","isArray","isObject","rootAnimateState","running","$$jqLite","decorator","$delegate","$$q","$injector","$sniffer","$rootElement","$$asyncCallback","$rootScope","$templateRequest","$$$jqLite","classBasedAnimationsBlocked","setter","NG_ANIMATE_STATE","structural","disabled","runAnimationPostDigest","cancelFn","defer","promise","$$cancelFn","defer.promise.$$cancelFn","$$postDigest","resolve","parseAnimateOptions","options","tempClasses","split","resolveElementClasses","cache","runningAnimations","lookup","selector","s","hasClasses","Object","create","attr","className","toAdd","toRemove","classes","status","hasClass","matchingAnimation","event","push","join","name","matches","flagMap","substr","transitions","animations","get","klass","selectorFactoryName","animationRunner","animationEvent","registerAnimation","animationFactory","afterFn","beforeFn","charAt","toUpperCase","after","before","run","fns","cancellations","allCompleteFn","animation","count","index","progress","classNameAdd","classNameRemove","from","to","node","isSetClassOperation","isClassBased","currentClassName","isAnimatableClassName","beforeComplete","beforeCancel","afterComplete","afterCancel","animationLookup","replace","created","applyStyles","css","extend","cancel","performAnimation","parentElement","afterElement","domOperation","doneCallback","fireDOMCallback","animationPhase","eventName","elementEvents","triggerHandler","fireBeforeCallbackAsync","fireAfterCallbackAsync","fireDOMOperation","hasBeenRun","closeAnimation","runner","removeClass","cleanup","localAnimationCount","_data","events","parent","animationsDisabled","ngAnimateState","active","totalActiveAnimations","totalActive","lastAnimation","last","skipAnimation","animationsToCancel","current","operation","one","e","state","activeLeaveAnimation","addClass","NG_ANIMATE_CLASS_NAME","globalAnimationCounter","cancelled","cancelChildAnimations","nodes","isFunction","getElementsByClassName","querySelectorAll","removeAnimations","removeData","allowChildAnimations","parentRunningAnimation","hasParent","isRoot","animateChildrenFlag","isDefined","deregisterWatch","totalPendingRequests","oldVal","classNameFilter","test","animate","done","enter","leave","move","setClass","add","remove","$$setClassImmediately","STORAGE_KEY","hasCache","c","elementNode","parentNode","$$addClassImmediately","$$removeClassImmediately","enabled","arguments","register","$window","$timeout","$$animateReflow","clearCacheAfterReflow","cancelAnimationReflow","animationReflowQueue","lookupCache","afterReflow","callback","animationCloseHandler","totalTime","animationElementQueue","futureTimestamp","Date","now","closingTimestamp","closingTimer","closeAllAnimations","elements","elementData","NG_ANIMATE_CSS_DATA_KEY","closeAnimationFns","getElementAnimationDetails","cacheKey","transitionDuration","transitionDelay","animationDuration","animationDelay","elementStyles","getComputedStyle","Math","max","parseMaxTime","transitionDurationStyle","TRANSITION_PROP","DURATION_KEY","transitionDelayStyle","DELAY_KEY","ANIMATION_PROP","aDuration","parseInt","ANIMATION_ITERATION_COUNT_KEY","total","str","maxValue","values","parseFloat","animateSetup","styles","indexOf","parentID","NG_ANIMATE_PARENT_KEY","parentCounter","getAttribute","eventCacheKey","itemIndex","stagger","staggerClassName","staggerCacheKey","applyClasses","formerData","timings","blockTransition","blockAnimation","blockTransitions","style","ANIMATION_PLAYSTATE_KEY","animateRun","activeAnimationComplete","onEnd","off","css3AnimationEvents","onAnimationProgress","activeClassName","pendingClassName","staggerTimeout","animateClose","appliedStyles","removeProperty","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","maxDuration","prefix","staggerTime","transitionStaggerDelay","animationStaggerDelay","CSS_PREFIX","round","maxDelay","ONE_SECOND","oldStyle","setAttribute","ANIMATIONEND_EVENT","TRANSITIONEND_EVENT","CLOSING_TIME_BUFFER","on","bool","PROPERTY_KEY","animateBefore","animateAfter","afterAnimationComplete","animationComplete","preReflowCancellation","suffixClasses","suffix","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","animationCompleted","beforeSetClass","cancellationMethod","beforeAddClass","beforeRemoveClass"]
8
-}
securis/src/main/webapp/js/angular/angular-resource.min.js
deleted file mode 100644
....@@ -1,13 +0,0 @@
1
-/*
2
- AngularJS v1.3.6
3
- (c) 2010-2014 Google, Inc. http://angularjs.org
4
- License: MIT
5
-*/
6
-(function(I,d,B){'use strict';function D(f,q){q=q||{};d.forEach(q,function(d,h){delete q[h]});for(var h in f)!f.hasOwnProperty(h)||"$"===h.charAt(0)&&"$"===h.charAt(1)||(q[h]=f[h]);return q}var w=d.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;d.module("ngResource",["ng"]).provider("$resource",function(){var f=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}};
7
-this.$get=["$http","$q",function(q,h){function t(d,g){this.template=d;this.defaults=s({},f.defaults,g);this.urlParams={}}function v(x,g,l,m){function c(b,k){var c={};k=s({},g,k);r(k,function(a,k){u(a)&&(a=a());var d;if(a&&a.charAt&&"@"==a.charAt(0)){d=b;var e=a.substr(1);if(null==e||""===e||"hasOwnProperty"===e||!C.test("."+e))throw w("badmember",e);for(var e=e.split("."),n=0,g=e.length;n<g&&d!==B;n++){var h=e[n];d=null!==d?d[h]:B}}else d=a;c[k]=d});return c}function F(b){return b.resource}function e(b){D(b||
8
-{},this)}var G=new t(x,m);l=s({},f.defaults.actions,l);e.prototype.toJSON=function(){var b=s({},this);delete b.$promise;delete b.$resolved;return b};r(l,function(b,k){var g=/^(POST|PUT|PATCH)$/i.test(b.method);e[k]=function(a,y,m,x){var n={},f,l,z;switch(arguments.length){case 4:z=x,l=m;case 3:case 2:if(u(y)){if(u(a)){l=a;z=y;break}l=y;z=m}else{n=a;f=y;l=m;break}case 1:u(a)?l=a:g?f=a:n=a;break;case 0:break;default:throw w("badargs",arguments.length);}var t=this instanceof e,p=t?f:b.isArray?[]:new e(f),
9
-A={},v=b.interceptor&&b.interceptor.response||F,C=b.interceptor&&b.interceptor.responseError||B;r(b,function(b,a){"params"!=a&&"isArray"!=a&&"interceptor"!=a&&(A[a]=H(b))});g&&(A.data=f);G.setUrlParams(A,s({},c(f,b.params||{}),n),b.url);n=q(A).then(function(a){var c=a.data,g=p.$promise;if(c){if(d.isArray(c)!==!!b.isArray)throw w("badcfg",k,b.isArray?"array":"object",d.isArray(c)?"array":"object");b.isArray?(p.length=0,r(c,function(a){"object"===typeof a?p.push(new e(a)):p.push(a)})):(D(c,p),p.$promise=
10
-g)}p.$resolved=!0;a.resource=p;return a},function(a){p.$resolved=!0;(z||E)(a);return h.reject(a)});n=n.then(function(a){var b=v(a);(l||E)(b,a.headers);return b},C);return t?n:(p.$promise=n,p.$resolved=!1,p)};e.prototype["$"+k]=function(a,b,c){u(a)&&(c=b,b=a,a={});a=e[k].call(this,a,this,b,c);return a.$promise||a}});e.bind=function(b){return v(x,s({},g,b),l)};return e}var E=d.noop,r=d.forEach,s=d.extend,H=d.copy,u=d.isFunction;t.prototype={setUrlParams:function(f,g,l){var m=this,c=l||m.template,h,
11
-e,q=m.urlParams={};r(c.split(/\W/),function(b){if("hasOwnProperty"===b)throw w("badname");!/^\d+$/.test(b)&&b&&(new RegExp("(^|[^\\\\]):"+b+"(\\W|$)")).test(c)&&(q[b]=!0)});c=c.replace(/\\:/g,":");g=g||{};r(m.urlParams,function(b,k){h=g.hasOwnProperty(k)?g[k]:m.defaults[k];d.isDefined(h)&&null!==h?(e=encodeURIComponent(h).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),c=c.replace(new RegExp(":"+
12
-k+"(\\W|$)","g"),function(b,a){return e+a})):c=c.replace(new RegExp("(/?):"+k+"(\\W|$)","g"),function(b,a,c){return"/"==c.charAt(0)?c:a+c})});m.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");f.url=c.replace(/\/\\\./,"/.");r(g,function(b,c){m.urlParams[c]||(f.params=f.params||{},f.params[c]=b)})}};return v}]})})(window,window.angular);
13
-//# sourceMappingURL=angular-resource.min.js.map
securis/src/main/webapp/js/angular/angular-resource.min.js.map
deleted file mode 100644
....@@ -1,8 +0,0 @@
1
-{
2
-"version":3,
3
-"file":"angular-resource.min.js",
4
-"lineCount":12,
5
-"mappings":"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",
6
-"sources":["angular-resource.js"],
7
-"names":["window","angular","undefined","shallowClearAndCopy","src","dst","forEach","value","key","hasOwnProperty","charAt","$resourceMinErr","$$minErr","MEMBER_NAME_REGEX","module","provider","defaults","stripTrailingSlashes","actions","method","isArray","$get","$http","$q","Route","template","extend","urlParams","resourceFactory","url","paramDefaults","options","extractParams","data","actionParams","ids","isFunction","path","test","keys","split","i","ii","length","obj","defaultResponseInterceptor","response","resource","Resource","route","prototype","toJSON","Resource.prototype.toJSON","$promise","$resolved","action","name","hasBody","a1","a2","a3","a4","params","success","error","arguments","isInstanceCall","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseError","copy","setUrlParams","promise","then","item","push","noop","reject","headers","result","call","bind","Resource.bind","additionalParamDefaults","config","actionUrl","self","val","encodedVal","param","RegExp","replace","_","urlParam","isDefined","encodeURIComponent","match","p1","leadingSlashes","tail"]
8
-}
securis/src/main/webapp/js/angular/angular-route.min.js
deleted file mode 100644
....@@ -1,15 +0,0 @@
1
-/*
2
- AngularJS v1.3.6
3
- (c) 2010-2014 Google, Inc. http://angularjs.org
4
- License: MIT
5
-*/
6
-(function(p,d,C){'use strict';function v(r,h,g){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,y){function z(){k&&(g.cancel(k),k=null);l&&(l.$destroy(),l=null);m&&(k=g.leave(m),k.then(function(){k=null}),m=null)}function x(){var b=r.current&&r.current.locals;if(d.isDefined(b&&b.$template)){var b=a.$new(),f=r.current;m=y(b,function(b){g.enter(b,null,m||c).then(function(){!d.isDefined(t)||t&&!a.$eval(t)||h()});z()});l=f.scope=b;l.$emit("$viewContentLoaded");
7
-l.$eval(w)}else z()}var l,m,k,t=b.autoscroll,w=b.onload||"";a.$on("$routeChangeSuccess",x);x()}}}function A(d,h,g){return{restrict:"ECA",priority:-400,link:function(a,c){var b=g.current,f=b.locals;c.html(f.$template);var y=d(c.contents());b.controller&&(f.$scope=a,f=h(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));y(a)}}}p=d.module("ngRoute",["ng"]).provider("$route",function(){function r(a,c){return d.extend(Object.create(a),
8
-c)}function h(a,d){var b=d.caseInsensitiveMatch,f={originalPath:a,regexp:a},g=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,d,b,c){a="?"===c?c:null;c="*"===c?c:null;g.push({name:b,optional:!!a});d=d||"";return""+(a?"":d)+"(?:"+(a?d:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=new RegExp("^"+a+"$",b?"i":"");return f}var g={};this.when=function(a,c){var b=d.copy(c);d.isUndefined(b.reloadOnSearch)&&(b.reloadOnSearch=!0);
9
-d.isUndefined(b.caseInsensitiveMatch)&&(b.caseInsensitiveMatch=this.caseInsensitiveMatch);g[a]=d.extend(b,a&&h(a,b));if(a){var f="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";g[f]=d.extend({redirectTo:a},h(f,b))}return this};this.caseInsensitiveMatch=!1;this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce",function(a,c,b,f,h,p,x){function l(b){var e=s.current;
10
-(v=(n=k())&&e&&n.$$route===e.$$route&&d.equals(n.pathParams,e.pathParams)&&!n.reloadOnSearch&&!w)||!e&&!n||a.$broadcast("$routeChangeStart",n,e).defaultPrevented&&b&&b.preventDefault()}function m(){var u=s.current,e=n;if(v)u.params=e.params,d.copy(u.params,b),a.$broadcast("$routeUpdate",u);else if(e||u)w=!1,(s.current=e)&&e.redirectTo&&(d.isString(e.redirectTo)?c.path(t(e.redirectTo,e.params)).search(e.params).replace():c.url(e.redirectTo(e.pathParams,c.path(),c.search())).replace()),f.when(e).then(function(){if(e){var a=
11
-d.extend({},e.resolve),b,c;d.forEach(a,function(b,e){a[e]=d.isString(b)?h.get(b):h.invoke(b,null,null,e)});d.isDefined(b=e.template)?d.isFunction(b)&&(b=b(e.params)):d.isDefined(c=e.templateUrl)&&(d.isFunction(c)&&(c=c(e.params)),c=x.getTrustedResourceUrl(c),d.isDefined(c)&&(e.loadedTemplateUrl=c,b=p(c)));d.isDefined(b)&&(a.$template=b);return f.all(a)}}).then(function(c){e==s.current&&(e&&(e.locals=c,d.copy(e.params,b)),a.$broadcast("$routeChangeSuccess",e,u))},function(b){e==s.current&&a.$broadcast("$routeChangeError",
12
-e,u,b)})}function k(){var a,b;d.forEach(g,function(f,g){var q;if(q=!b){var h=c.path();q=f.keys;var l={};if(f.regexp)if(h=f.regexp.exec(h)){for(var k=1,m=h.length;k<m;++k){var n=q[k-1],p=h[k];n&&p&&(l[n.name]=p)}q=l}else q=null;else q=null;q=a=q}q&&(b=r(f,{params:d.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||g[null]&&r(g[null],{params:{},pathParams:{}})}function t(a,b){var c=[];d.forEach((a||"").split(":"),function(a,d){if(0===d)c.push(a);else{var f=a.match(/(\w+)(?:[?*])?(.*)/),
13
-g=f[1];c.push(b[g]);c.push(f[2]||"");delete b[g]}});return c.join("")}var w=!1,n,v,s={routes:g,reload:function(){w=!0;a.$evalAsync(function(){l();m()})},updateParams:function(a){if(this.current&&this.current.$$route){var b={},f=this;d.forEach(Object.keys(a),function(c){f.current.pathParams[c]||(b[c]=a[c])});a=d.extend({},this.current.params,a);c.path(t(this.current.$$route.originalPath,a));c.search(d.extend({},c.search(),b))}else throw B("norout");}};a.$on("$locationChangeStart",l);a.$on("$locationChangeSuccess",
14
-m);return s}]});var B=d.$$minErr("ngRoute");p.provider("$routeParams",function(){this.$get=function(){return{}}});p.directive("ngView",v);p.directive("ngView",A);v.$inject=["$route","$anchorScroll","$animate"];A.$inject=["$compile","$controller","$route"]})(window,window.angular);
15
-//# sourceMappingURL=angular-route.min.js.map
securis/src/main/webapp/js/angular/angular-route.min.js.map
deleted file mode 100644
....@@ -1,8 +0,0 @@
1
-{
2
-"version":3,
3
-"file":"angular-route.min.js",
4
-"lineCount":14,
5
-"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAo3BtCC,QAASA,EAAa,CAACC,CAAD,CAASC,CAAT,CAAwBC,CAAxB,CAAkC,CACtD,MAAO,CACLC,SAAU,KADL,CAELC,SAAU,CAAA,CAFL,CAGLC,SAAU,GAHL,CAILC,WAAY,SAJP,CAKLC,KAAMA,QAAQ,CAACC,CAAD,CAAQC,CAAR,CAAkBC,CAAlB,CAAwBC,CAAxB,CAA8BC,CAA9B,CAA2C,CAUrDC,QAASA,EAAe,EAAG,CACrBC,CAAJ,GACEZ,CAAAa,OAAA,CAAgBD,CAAhB,CACA,CAAAA,CAAA,CAAyB,IAF3B,CAKIE,EAAJ,GACEA,CAAAC,SAAA,EACA,CAAAD,CAAA,CAAe,IAFjB,CAIIE,EAAJ,GACEJ,CAIA,CAJyBZ,CAAAiB,MAAA,CAAeD,CAAf,CAIzB,CAHAJ,CAAAM,KAAA,CAA4B,QAAQ,EAAG,CACrCN,CAAA,CAAyB,IADY,CAAvC,CAGA,CAAAI,CAAA,CAAiB,IALnB,CAVyB,CAmB3BG,QAASA,EAAM,EAAG,CAAA,IACZC,EAAStB,CAAAuB,QAATD,EAA2BtB,CAAAuB,QAAAD,OAG/B,IAAIzB,CAAA2B,UAAA,CAFWF,CAEX,EAFqBA,CAAAG,UAErB,CAAJ,CAAiC,CAC3BC,IAAAA,EAAWlB,CAAAmB,KAAA,EAAXD,CACAH,EAAUvB,CAAAuB,QAkBdL,EAAA,CAVYN,CAAAgB,CAAYF,CAAZE,CAAsB,QAAQ,CAACA,CAAD,CAAQ,CAChD1B,CAAA2B,MAAA,CAAeD,CAAf,CAAsB,IAAtB,CAA4BV,CAA5B,EAA8CT,CAA9C,CAAAW,KAAA,CAA6DU,QAAsB,EAAG,CAChF,CAAAjC,CAAA2B,UAAA,CAAkBO,CAAlB,CAAJ,EACOA,CADP,EACwB,CAAAvB,CAAAwB,MAAA,CAAYD,CAAZ,CADxB,EAEE9B,CAAA,EAHkF,CAAtF,CAMAY,EAAA,EAPgD,CAAtCe,CAWZZ,EAAA,CAAeO,CAAAf,MAAf,CAA+BkB,CAC/BV,EAAAiB,MAAA,CAAmB,oBAAnB,CACAjB;CAAAgB,MAAA,CAAmBE,CAAnB,CAvB+B,CAAjC,IAyBErB,EAAA,EA7Bc,CA7BmC,IACjDG,CADiD,CAEjDE,CAFiD,CAGjDJ,CAHiD,CAIjDiB,EAAgBrB,CAAAyB,WAJiC,CAKjDD,EAAYxB,CAAA0B,OAAZF,EAA2B,EAE/B1B,EAAA6B,IAAA,CAAU,qBAAV,CAAiChB,CAAjC,CACAA,EAAA,EARqD,CALpD,CAD+C,CA6ExDiB,QAASA,EAAwB,CAACC,CAAD,CAAWC,CAAX,CAAwBxC,CAAxB,CAAgC,CAC/D,MAAO,CACLG,SAAU,KADL,CAELE,SAAW,IAFN,CAGLE,KAAMA,QAAQ,CAACC,CAAD,CAAQC,CAAR,CAAkB,CAAA,IAC1Bc,EAAUvB,CAAAuB,QADgB,CAE1BD,EAASC,CAAAD,OAEbb,EAAAgC,KAAA,CAAcnB,CAAAG,UAAd,CAEA,KAAIlB,EAAOgC,CAAA,CAAS9B,CAAAiC,SAAA,EAAT,CAEPnB,EAAAoB,WAAJ,GACErB,CAAAsB,OAMA,CANgBpC,CAMhB,CALImC,CAKJ,CALiBH,CAAA,CAAYjB,CAAAoB,WAAZ,CAAgCrB,CAAhC,CAKjB,CAJIC,CAAAsB,aAIJ,GAHErC,CAAA,CAAMe,CAAAsB,aAAN,CAGF,CAHgCF,CAGhC,EADAlC,CAAAqC,KAAA,CAAc,yBAAd,CAAyCH,CAAzC,CACA,CAAAlC,CAAAsC,SAAA,EAAAD,KAAA,CAAyB,yBAAzB,CAAoDH,CAApD,CAPF,CAUApC,EAAA,CAAKC,CAAL,CAlB8B,CAH3B,CADwD,CA/6B7DwC,CAAAA,CAAgBnD,CAAAoD,OAAA,CAAe,SAAf,CAA0B,CAAC,IAAD,CAA1B,CAAAC,SAAA,CACa,QADb,CAkBpBC,QAAuB,EAAG,CACxBC,QAASA,EAAO,CAACC,CAAD,CAASC,CAAT,CAAgB,CAC9B,MAAOzD,EAAA0D,OAAA,CAAeC,MAAAC,OAAA,CAAcJ,CAAd,CAAf;AAAsCC,CAAtC,CADuB,CA4JhCI,QAASA,EAAU,CAACC,CAAD,CAAOC,CAAP,CAAa,CAAA,IAC1BC,EAAcD,CAAAE,qBADY,CAE1BC,EAAM,CACJC,aAAcL,CADV,CAEJM,OAAQN,CAFJ,CAFoB,CAM1BO,EAAOH,CAAAG,KAAPA,CAAkB,EAEtBP,EAAA,CAAOA,CAAAQ,QAAA,CACI,UADJ,CACgB,MADhB,CAAAA,QAAA,CAEI,uBAFJ,CAE6B,QAAQ,CAACC,CAAD,CAAIC,CAAJ,CAAWC,CAAX,CAAgBC,CAAhB,CAAwB,CAC5DC,CAAAA,CAAsB,GAAX,GAAAD,CAAA,CAAiBA,CAAjB,CAA0B,IACrCE,EAAAA,CAAkB,GAAX,GAAAF,CAAA,CAAiBA,CAAjB,CAA0B,IACrCL,EAAAQ,KAAA,CAAU,CAAEC,KAAML,CAAR,CAAaE,SAAU,CAAEA,CAAAA,CAAzB,CAAV,CACAH,EAAA,CAAQA,CAAR,EAAiB,EACjB,OAAO,EAAP,EACKG,CAAA,CAAW,EAAX,CAAgBH,CADrB,EAEI,KAFJ,EAGKG,CAAA,CAAWH,CAAX,CAAmB,EAHxB,GAIKI,CAJL,EAIa,OAJb,EAIwB,SAJxB,GAKKD,CALL,EAKiB,EALjB,EAMI,GANJ,EAOKA,CAPL,EAOiB,EAPjB,CALgE,CAF7D,CAAAL,QAAA,CAgBI,YAhBJ,CAgBkB,MAhBlB,CAkBPJ,EAAAE,OAAA,CAAa,IAAIW,MAAJ,CAAW,GAAX,CAAiBjB,CAAjB,CAAwB,GAAxB,CAA6BE,CAAA,CAAc,GAAd,CAAoB,EAAjD,CACb,OAAOE,EA3BuB,CAxJhC,IAAIc,EAAS,EAqGb,KAAAC,KAAA,CAAYC,QAAQ,CAACpB,CAAD,CAAOqB,CAAP,CAAc,CAEhC,IAAIC,EAAYpF,CAAAqF,KAAA,CAAaF,CAAb,CACZnF,EAAAsF,YAAA,CAAoBF,CAAAG,eAApB,CAAJ,GACEH,CAAAG,eADF,CAC6B,CAAA,CAD7B,CAGIvF;CAAAsF,YAAA,CAAoBF,CAAAnB,qBAApB,CAAJ,GACEmB,CAAAnB,qBADF,CACmC,IAAAA,qBADnC,CAGAe,EAAA,CAAOlB,CAAP,CAAA,CAAe9D,CAAA0D,OAAA,CACb0B,CADa,CAEbtB,CAFa,EAELD,CAAA,CAAWC,CAAX,CAAiBsB,CAAjB,CAFK,CAMf,IAAItB,CAAJ,CAAU,CACR,IAAI0B,EAAyC,GAA1B,EAAC1B,CAAA,CAAKA,CAAA2B,OAAL,CAAmB,CAAnB,CAAD,CACX3B,CAAA4B,OAAA,CAAY,CAAZ,CAAe5B,CAAA2B,OAAf,CAA6B,CAA7B,CADW,CAEX3B,CAFW,CAEJ,GAEfkB,EAAA,CAAOQ,CAAP,CAAA,CAAuBxF,CAAA0D,OAAA,CACrB,CAACiC,WAAY7B,CAAb,CADqB,CAErBD,CAAA,CAAW2B,CAAX,CAAyBJ,CAAzB,CAFqB,CALf,CAWV,MAAO,KA1ByB,CAsClC,KAAAnB,qBAAA,CAA4B,CAAA,CAuD5B,KAAA2B,UAAA,CAAiBC,QAAQ,CAACC,CAAD,CAAS,CACV,QAAtB,GAAI,MAAOA,EAAX,GACEA,CADF,CACW,CAACH,WAAYG,CAAb,CADX,CAGA,KAAAb,KAAA,CAAU,IAAV,CAAgBa,CAAhB,CACA,OAAO,KALyB,CASlC,KAAAC,KAAA,CAAY,CAAC,YAAD,CACC,WADD,CAEC,cAFD,CAGC,IAHD,CAIC,WAJD,CAKC,kBALD,CAMC,MAND,CAOR,QAAQ,CAACC,CAAD,CAAaC,CAAb,CAAwBC,CAAxB,CAAsCC,CAAtC,CAA0CC,CAA1C,CAAqDC,CAArD,CAAuEC,CAAvE,CAA6E,CA+RvFC,QAASA,EAAY,CAACC,CAAD,CAAiB,CACpC,IAAIC,EAAYtG,CAAAuB,QAOhB;CAJAgF,CAIA,EALAC,CAKA,CALgBC,CAAA,EAKhB,GAJ6CH,CAI7C,EAJ0DE,CAAAE,QAI1D,GAJoFJ,CAAAI,QAIpF,EAHO7G,CAAA8G,OAAA,CAAeH,CAAAI,WAAf,CAAyCN,CAAAM,WAAzC,CAGP,EAFO,CAACJ,CAAApB,eAER,EAFwC,CAACyB,CAEzC,GAAmCP,CAAAA,CAAnC,EAAgDE,CAAAA,CAAhD,EACMX,CAAAiB,WAAA,CAAsB,mBAAtB,CAA2CN,CAA3C,CAA0DF,CAA1D,CAAAS,iBADN,EAEQV,CAFR,EAGMA,CAAAW,eAAA,EAX8B,CAiBtCC,QAASA,EAAW,EAAG,CACrB,IAAIX,EAAYtG,CAAAuB,QAAhB,CACI2F,EAAYV,CAEhB,IAAID,CAAJ,CACED,CAAAX,OAEA,CAFmBuB,CAAAvB,OAEnB,CADA9F,CAAAqF,KAAA,CAAaoB,CAAAX,OAAb,CAA+BI,CAA/B,CACA,CAAAF,CAAAiB,WAAA,CAAsB,cAAtB,CAAsCR,CAAtC,CAHF,KAIO,IAAIY,CAAJ,EAAiBZ,CAAjB,CACLO,CAcA,CAdc,CAAA,CAcd,EAbA7G,CAAAuB,QAaA,CAbiB2F,CAajB,GAXMA,CAAA1B,WAWN,GAVQ3F,CAAAsH,SAAA,CAAiBD,CAAA1B,WAAjB,CAAJ,CACEM,CAAAnC,KAAA,CAAeyD,CAAA,CAAYF,CAAA1B,WAAZ,CAAkC0B,CAAAvB,OAAlC,CAAf,CAAA0B,OAAA,CAA2EH,CAAAvB,OAA3E,CAAAxB,QAAA,EADF,CAIE2B,CAAAwB,IAAA,CAAcJ,CAAA1B,WAAA,CAAqB0B,CAAAN,WAArB,CAA2Cd,CAAAnC,KAAA,EAA3C,CAA6DmC,CAAAuB,OAAA,EAA7D,CAAd,CAAAlD,QAAA,EAMN,EAAA6B,CAAAlB,KAAA,CAAQoC,CAAR,CAAA9F,KAAA,CACO,QAAQ,EAAG,CACd,GAAI8F,CAAJ,CAAe,CAAA,IACT5F;AAASzB,CAAA0D,OAAA,CAAe,EAAf,CAAmB2D,CAAAK,QAAnB,CADA,CAETC,CAFS,CAECC,CAEd5H,EAAA6H,QAAA,CAAgBpG,CAAhB,CAAwB,QAAQ,CAACqG,CAAD,CAAQrD,CAAR,CAAa,CAC3ChD,CAAA,CAAOgD,CAAP,CAAA,CAAczE,CAAAsH,SAAA,CAAiBQ,CAAjB,CAAA,CACV1B,CAAA2B,IAAA,CAAcD,CAAd,CADU,CACa1B,CAAA4B,OAAA,CAAiBF,CAAjB,CAAwB,IAAxB,CAA8B,IAA9B,CAAoCrD,CAApC,CAFgB,CAA7C,CAKIzE,EAAA2B,UAAA,CAAkBgG,CAAlB,CAA6BN,CAAAM,SAA7B,CAAJ,CACM3H,CAAAiI,WAAA,CAAmBN,CAAnB,CADN,GAEIA,CAFJ,CAEeA,CAAA,CAASN,CAAAvB,OAAT,CAFf,EAIW9F,CAAA2B,UAAA,CAAkBiG,CAAlB,CAAgCP,CAAAO,YAAhC,CAJX,GAKM5H,CAAAiI,WAAA,CAAmBL,CAAnB,CAIJ,GAHEA,CAGF,CAHgBA,CAAA,CAAYP,CAAAvB,OAAZ,CAGhB,EADA8B,CACA,CADctB,CAAA4B,sBAAA,CAA2BN,CAA3B,CACd,CAAI5H,CAAA2B,UAAA,CAAkBiG,CAAlB,CAAJ,GACEP,CAAAc,kBACA,CAD8BP,CAC9B,CAAAD,CAAA,CAAWtB,CAAA,CAAiBuB,CAAjB,CAFb,CATF,CAcI5H,EAAA2B,UAAA,CAAkBgG,CAAlB,CAAJ,GACElG,CAAA,UADF,CACwBkG,CADxB,CAGA,OAAOxB,EAAAiC,IAAA,CAAO3G,CAAP,CA1BM,CADD,CADlB,CAAAF,KAAA,CAgCO,QAAQ,CAACE,CAAD,CAAS,CAChB4F,CAAJ,EAAiBlH,CAAAuB,QAAjB,GACM2F,CAIJ,GAHEA,CAAA5F,OACA,CADmBA,CACnB,CAAAzB,CAAAqF,KAAA,CAAagC,CAAAvB,OAAb,CAA+BI,CAA/B,CAEF,EAAAF,CAAAiB,WAAA,CAAsB,qBAAtB,CAA6CI,CAA7C,CAAwDZ,CAAxD,CALF,CADoB,CAhCxB,CAwCK,QAAQ,CAAC4B,CAAD,CAAQ,CACbhB,CAAJ,EAAiBlH,CAAAuB,QAAjB,EACEsE,CAAAiB,WAAA,CAAsB,mBAAtB;AAA2CI,CAA3C,CAAsDZ,CAAtD,CAAiE4B,CAAjE,CAFe,CAxCrB,CAvBmB,CA2EvBzB,QAASA,EAAU,EAAG,CAAA,IAEhBd,CAFgB,CAERwC,CACZtI,EAAA6H,QAAA,CAAgB7C,CAAhB,CAAwB,QAAQ,CAACG,CAAD,CAAQrB,CAAR,CAAc,CACxC,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,IAAA,EAAA,CAAA,KAAA,EApHbO,EAAAA,CAoHac,CApHNd,KAAX,KACIyB,EAAS,EAEb,IAiHiBX,CAjHZf,OAAL,CAGA,GADImE,CACJ,CA8GiBpD,CA/GTf,OAAAoE,KAAA,CAAkBC,CAAlB,CACR,CAAA,CAEA,IATqC,IAS5BC,EAAI,CATwB,CASrBC,EAAMJ,CAAA9C,OAAtB,CAAgCiD,CAAhC,CAAoCC,CAApC,CAAyC,EAAED,CAA3C,CAA8C,CAC5C,IAAIjE,EAAMJ,CAAA,CAAKqE,CAAL,CAAS,CAAT,CAAV,CAEIE,EAAML,CAAA,CAAEG,CAAF,CAENjE,EAAJ,EAAWmE,CAAX,GACE9C,CAAA,CAAOrB,CAAAK,KAAP,CADF,CACqB8D,CADrB,CAL4C,CAS9C,CAAA,CAAO9C,CAXP,CAAA,IAAQ,EAAA,CAAO,IAHf,KAAmB,EAAA,CAAO,IAiHT,EAAA,CAAA,CAAA,CAAA,CAAX,CAAA,CAAJ,GACEwC,CAGA,CAHQ/E,CAAA,CAAQ4B,CAAR,CAAe,CACrBW,OAAQ9F,CAAA0D,OAAA,CAAe,EAAf,CAAmBuC,CAAAuB,OAAA,EAAnB,CAAuC1B,CAAvC,CADa,CAErBiB,WAAYjB,CAFS,CAAf,CAGR,CAAAwC,CAAAzB,QAAA,CAAgB1B,CAJlB,CAD4C,CAA9C,CASA,OAAOmD,EAAP,EAAgBtD,CAAA,CAAO,IAAP,CAAhB,EAAgCzB,CAAA,CAAQyB,CAAA,CAAO,IAAP,CAAR,CAAsB,CAACc,OAAQ,EAAT,CAAaiB,WAAW,EAAxB,CAAtB,CAZZ,CAkBtBQ,QAASA,EAAW,CAACsB,CAAD,CAAS/C,CAAT,CAAiB,CACnC,IAAIgD,EAAS,EACb9I,EAAA6H,QAAA,CAAgBkB,CAACF,CAADE,EAAW,EAAXA,OAAA,CAAqB,GAArB,CAAhB,CAA2C,QAAQ,CAACC,CAAD,CAAUN,CAAV,CAAa,CAC9D,GAAU,CAAV,GAAIA,CAAJ,CACEI,CAAAjE,KAAA,CAAYmE,CAAZ,CADF,KAEO,CACL,IAAIC,EAAeD,CAAAV,MAAA,CAAc,oBAAd,CAAnB;AACI7D,EAAMwE,CAAA,CAAa,CAAb,CACVH,EAAAjE,KAAA,CAAYiB,CAAA,CAAOrB,CAAP,CAAZ,CACAqE,EAAAjE,KAAA,CAAYoE,CAAA,CAAa,CAAb,CAAZ,EAA+B,EAA/B,CACA,QAAOnD,CAAA,CAAOrB,CAAP,CALF,CAHuD,CAAhE,CAWA,OAAOqE,EAAAI,KAAA,CAAY,EAAZ,CAb4B,CA7YkD,IA+LnFlC,EAAc,CAAA,CA/LqE,CAgMnFL,CAhMmF,CAiMnFD,CAjMmF,CAkMnFvG,EAAS,CACP6E,OAAQA,CADD,CAcPmE,OAAQA,QAAQ,EAAG,CACjBnC,CAAA,CAAc,CAAA,CACdhB,EAAAoD,WAAA,CAAsB,QAAQ,EAAG,CAE/B7C,CAAA,EACAa,EAAA,EAH+B,CAAjC,CAFiB,CAdZ,CAoCPiC,aAAcA,QAAQ,CAACC,CAAD,CAAY,CAChC,GAAI,IAAA5H,QAAJ,EAAoB,IAAAA,QAAAmF,QAApB,CAA0C,CAAA,IACpC0C,EAAe,EADqB,CACjBC,EAAK,IAE5BxJ,EAAA6H,QAAA,CAAgBlE,MAAAU,KAAA,CAAYiF,CAAZ,CAAhB,CAAwC,QAAQ,CAAC7E,CAAD,CAAM,CAC/C+E,CAAA9H,QAAAqF,WAAA,CAAwBtC,CAAxB,CAAL,GAAmC8E,CAAA,CAAa9E,CAAb,CAAnC,CAAuD6E,CAAA,CAAU7E,CAAV,CAAvD,CADoD,CAAtD,CAIA6E,EAAA,CAAYtJ,CAAA0D,OAAA,CAAe,EAAf,CAAmB,IAAAhC,QAAAoE,OAAnB,CAAwCwD,CAAxC,CACZrD,EAAAnC,KAAA,CAAeyD,CAAA,CAAY,IAAA7F,QAAAmF,QAAA1C,aAAZ,CAA+CmF,CAA/C,CAAf,CACArD,EAAAuB,OAAA,CAAiBxH,CAAA0D,OAAA,CAAe,EAAf,CAAmBuC,CAAAuB,OAAA,EAAnB,CAAuC+B,CAAvC,CAAjB,CATwC,CAA1C,IAYE,MAAME,EAAA,CAAa,QAAb,CAAN,CAb8B,CApC3B,CAsDbzD,EAAAxD,IAAA,CAAe,sBAAf,CAAuC+D,CAAvC,CACAP,EAAAxD,IAAA,CAAe,wBAAf;AAAyC4E,CAAzC,CAEA,OAAOjH,EA3PgF,CAP7E,CAhNY,CAlBN,CAApB,KAEIsJ,EAAezJ,CAAA0J,SAAA,CAAiB,SAAjB,CAsoBnBvG,EAAAE,SAAA,CAAuB,cAAvB,CAoCAsG,QAA6B,EAAG,CAC9B,IAAA5D,KAAA,CAAY6D,QAAQ,EAAG,CAAE,MAAO,EAAT,CADO,CApChC,CAwCAzG,EAAA0G,UAAA,CAAwB,QAAxB,CAAkC3J,CAAlC,CACAiD,EAAA0G,UAAA,CAAwB,QAAxB,CAAkCpH,CAAlC,CAgLAvC,EAAA4J,QAAA,CAAwB,CAAC,QAAD,CAAW,eAAX,CAA4B,UAA5B,CA6ExBrH,EAAAqH,QAAA,CAAmC,CAAC,UAAD,CAAa,aAAb,CAA4B,QAA5B,CAh8BG,CAArC,CAAD,CA69BG/J,MA79BH,CA69BWA,MAAAC,QA79BX;",
6
-"sources":["angular-route.js"],
7
-"names":["window","angular","undefined","ngViewFactory","$route","$anchorScroll","$animate","restrict","terminal","priority","transclude","link","scope","$element","attr","ctrl","$transclude","cleanupLastView","previousLeaveAnimation","cancel","currentScope","$destroy","currentElement","leave","then","update","locals","current","isDefined","$template","newScope","$new","clone","enter","onNgViewEnter","autoScrollExp","$eval","$emit","onloadExp","autoscroll","onload","$on","ngViewFillContentFactory","$compile","$controller","html","contents","controller","$scope","controllerAs","data","children","ngRouteModule","module","provider","$RouteProvider","inherit","parent","extra","extend","Object","create","pathRegExp","path","opts","insensitive","caseInsensitiveMatch","ret","originalPath","regexp","keys","replace","_","slash","key","option","optional","star","push","name","RegExp","routes","when","this.when","route","routeCopy","copy","isUndefined","reloadOnSearch","redirectPath","length","substr","redirectTo","otherwise","this.otherwise","params","$get","$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce","prepareRoute","$locationEvent","lastRoute","preparedRouteIsUpdateOnly","preparedRoute","parseRoute","$$route","equals","pathParams","forceReload","$broadcast","defaultPrevented","preventDefault","commitRoute","nextRoute","isString","interpolate","search","url","resolve","template","templateUrl","forEach","value","get","invoke","isFunction","getTrustedResourceUrl","loadedTemplateUrl","all","error","match","m","exec","on","i","len","val","string","result","split","segment","segmentMatch","join","reload","$evalAsync","updateParams","newParams","searchParams","self","$routeMinErr","$$minErr","$RouteParamsProvider","this.$get","directive","$inject"]
8
-}
securis/src/main/webapp/js/angular/angular.js
deleted file mode 100644
....@@ -1,26000 +0,0 @@
1
-/**
2
- * @license AngularJS v1.3.6
3
- * (c) 2010-2014 Google, Inc. http://angularjs.org
4
- * License: MIT
5
- */
6
-(function(window, document, undefined) {'use strict';
7
-
8
-/**
9
- * @description
10
- *
11
- * This object provides a utility for producing rich Error messages within
12
- * Angular. It can be called as follows:
13
- *
14
- * var exampleMinErr = minErr('example');
15
- * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
16
- *
17
- * The above creates an instance of minErr in the example namespace. The
18
- * resulting error will have a namespaced error code of example.one. The
19
- * resulting error will replace {0} with the value of foo, and {1} with the
20
- * value of bar. The object is not restricted in the number of arguments it can
21
- * take.
22
- *
23
- * If fewer arguments are specified than necessary for interpolation, the extra
24
- * interpolation markers will be preserved in the final string.
25
- *
26
- * Since data will be parsed statically during a build step, some restrictions
27
- * are applied with respect to how minErr instances are created and called.
28
- * Instances should have names of the form namespaceMinErr for a minErr created
29
- * using minErr('namespace') . Error codes, namespaces and template strings
30
- * should all be static strings, not variables or general expressions.
31
- *
32
- * @param {string} module The namespace to use for the new minErr instance.
33
- * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
34
- * error from returned function, for cases when a particular type of error is useful.
35
- * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
36
- */
37
-
38
-function minErr(module, ErrorConstructor) {
39
- ErrorConstructor = ErrorConstructor || Error;
40
- return function() {
41
- var code = arguments[0],
42
- prefix = '[' + (module ? module + ':' : '') + code + '] ',
43
- template = arguments[1],
44
- templateArgs = arguments,
45
-
46
- message, i;
47
-
48
- message = prefix + template.replace(/\{\d+\}/g, function(match) {
49
- var index = +match.slice(1, -1), arg;
50
-
51
- if (index + 2 < templateArgs.length) {
52
- return toDebugString(templateArgs[index + 2]);
53
- }
54
- return match;
55
- });
56
-
57
- message = message + '\nhttp://errors.angularjs.org/1.3.6/' +
58
- (module ? module + '/' : '') + code;
59
- for (i = 2; i < arguments.length; i++) {
60
- message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
61
- encodeURIComponent(toDebugString(arguments[i]));
62
- }
63
- return new ErrorConstructor(message);
64
- };
65
-}
66
-
67
-/* We need to tell jshint what variables are being exported */
68
-/* global angular: true,
69
- msie: true,
70
- jqLite: true,
71
- jQuery: true,
72
- slice: true,
73
- splice: true,
74
- push: true,
75
- toString: true,
76
- ngMinErr: true,
77
- angularModule: true,
78
- uid: true,
79
- REGEX_STRING_REGEXP: true,
80
- VALIDITY_STATE_PROPERTY: true,
81
-
82
- lowercase: true,
83
- uppercase: true,
84
- manualLowercase: true,
85
- manualUppercase: true,
86
- nodeName_: true,
87
- isArrayLike: true,
88
- forEach: true,
89
- sortedKeys: true,
90
- forEachSorted: true,
91
- reverseParams: true,
92
- nextUid: true,
93
- setHashKey: true,
94
- extend: true,
95
- int: true,
96
- inherit: true,
97
- noop: true,
98
- identity: true,
99
- valueFn: true,
100
- isUndefined: true,
101
- isDefined: true,
102
- isObject: true,
103
- isString: true,
104
- isNumber: true,
105
- isDate: true,
106
- isArray: true,
107
- isFunction: true,
108
- isRegExp: true,
109
- isWindow: true,
110
- isScope: true,
111
- isFile: true,
112
- isBlob: true,
113
- isBoolean: true,
114
- isPromiseLike: true,
115
- trim: true,
116
- escapeForRegexp: true,
117
- isElement: true,
118
- makeMap: true,
119
- includes: true,
120
- arrayRemove: true,
121
- copy: true,
122
- shallowCopy: true,
123
- equals: true,
124
- csp: true,
125
- concat: true,
126
- sliceArgs: true,
127
- bind: true,
128
- toJsonReplacer: true,
129
- toJson: true,
130
- fromJson: true,
131
- startingTag: true,
132
- tryDecodeURIComponent: true,
133
- parseKeyValue: true,
134
- toKeyValue: true,
135
- encodeUriSegment: true,
136
- encodeUriQuery: true,
137
- angularInit: true,
138
- bootstrap: true,
139
- getTestability: true,
140
- snake_case: true,
141
- bindJQuery: true,
142
- assertArg: true,
143
- assertArgFn: true,
144
- assertNotHasOwnProperty: true,
145
- getter: true,
146
- getBlockNodes: true,
147
- hasOwnProperty: true,
148
- createMap: true,
149
-
150
- NODE_TYPE_ELEMENT: true,
151
- NODE_TYPE_TEXT: true,
152
- NODE_TYPE_COMMENT: true,
153
- NODE_TYPE_DOCUMENT: true,
154
- NODE_TYPE_DOCUMENT_FRAGMENT: true,
155
-*/
156
-
157
-////////////////////////////////////
158
-
159
-/**
160
- * @ngdoc module
161
- * @name ng
162
- * @module ng
163
- * @description
164
- *
165
- * # ng (core module)
166
- * The ng module is loaded by default when an AngularJS application is started. The module itself
167
- * contains the essential components for an AngularJS application to function. The table below
168
- * lists a high level breakdown of each of the services/factories, filters, directives and testing
169
- * components available within this core module.
170
- *
171
- * <div doc-module-components="ng"></div>
172
- */
173
-
174
-var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
175
-
176
-// The name of a form control's ValidityState property.
177
-// This is used so that it's possible for internal tests to create mock ValidityStates.
178
-var VALIDITY_STATE_PROPERTY = 'validity';
179
-
180
-/**
181
- * @ngdoc function
182
- * @name angular.lowercase
183
- * @module ng
184
- * @kind function
185
- *
186
- * @description Converts the specified string to lowercase.
187
- * @param {string} string String to be converted to lowercase.
188
- * @returns {string} Lowercased string.
189
- */
190
-var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
191
-var hasOwnProperty = Object.prototype.hasOwnProperty;
192
-
193
-/**
194
- * @ngdoc function
195
- * @name angular.uppercase
196
- * @module ng
197
- * @kind function
198
- *
199
- * @description Converts the specified string to uppercase.
200
- * @param {string} string String to be converted to uppercase.
201
- * @returns {string} Uppercased string.
202
- */
203
-var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};
204
-
205
-
206
-var manualLowercase = function(s) {
207
- /* jshint bitwise: false */
208
- return isString(s)
209
- ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
210
- : s;
211
-};
212
-var manualUppercase = function(s) {
213
- /* jshint bitwise: false */
214
- return isString(s)
215
- ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
216
- : s;
217
-};
218
-
219
-
220
-// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
221
-// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
222
-// with correct but slower alternatives.
223
-if ('i' !== 'I'.toLowerCase()) {
224
- lowercase = manualLowercase;
225
- uppercase = manualUppercase;
226
-}
227
-
228
-
229
-var
230
- msie, // holds major version number for IE, or NaN if UA is not IE.
231
- jqLite, // delay binding since jQuery could be loaded after us.
232
- jQuery, // delay binding
233
- slice = [].slice,
234
- splice = [].splice,
235
- push = [].push,
236
- toString = Object.prototype.toString,
237
- ngMinErr = minErr('ng'),
238
-
239
- /** @name angular */
240
- angular = window.angular || (window.angular = {}),
241
- angularModule,
242
- uid = 0;
243
-
244
-/**
245
- * documentMode is an IE-only property
246
- * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
247
- */
248
-msie = document.documentMode;
249
-
250
-
251
-/**
252
- * @private
253
- * @param {*} obj
254
- * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,
255
- * String ...)
256
- */
257
-function isArrayLike(obj) {
258
- if (obj == null || isWindow(obj)) {
259
- return false;
260
- }
261
-
262
- var length = obj.length;
263
-
264
- if (obj.nodeType === NODE_TYPE_ELEMENT && length) {
265
- return true;
266
- }
267
-
268
- return isString(obj) || isArray(obj) || length === 0 ||
269
- typeof length === 'number' && length > 0 && (length - 1) in obj;
270
-}
271
-
272
-/**
273
- * @ngdoc function
274
- * @name angular.forEach
275
- * @module ng
276
- * @kind function
277
- *
278
- * @description
279
- * Invokes the `iterator` function once for each item in `obj` collection, which can be either an
280
- * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`
281
- * is the value of an object property or an array element, `key` is the object property key or
282
- * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.
283
- *
284
- * It is worth noting that `.forEach` does not iterate over inherited properties because it filters
285
- * using the `hasOwnProperty` method.
286
- *
287
- * Unlike ES262's
288
- * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),
289
- * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just
290
- * return the value provided.
291
- *
292
- ```js
293
- var values = {name: 'misko', gender: 'male'};
294
- var log = [];
295
- angular.forEach(values, function(value, key) {
296
- this.push(key + ': ' + value);
297
- }, log);
298
- expect(log).toEqual(['name: misko', 'gender: male']);
299
- ```
300
- *
301
- * @param {Object|Array} obj Object to iterate over.
302
- * @param {Function} iterator Iterator function.
303
- * @param {Object=} context Object to become context (`this`) for the iterator function.
304
- * @returns {Object|Array} Reference to `obj`.
305
- */
306
-
307
-function forEach(obj, iterator, context) {
308
- var key, length;
309
- if (obj) {
310
- if (isFunction(obj)) {
311
- for (key in obj) {
312
- // Need to check if hasOwnProperty exists,
313
- // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
314
- if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
315
- iterator.call(context, obj[key], key, obj);
316
- }
317
- }
318
- } else if (isArray(obj) || isArrayLike(obj)) {
319
- var isPrimitive = typeof obj !== 'object';
320
- for (key = 0, length = obj.length; key < length; key++) {
321
- if (isPrimitive || key in obj) {
322
- iterator.call(context, obj[key], key, obj);
323
- }
324
- }
325
- } else if (obj.forEach && obj.forEach !== forEach) {
326
- obj.forEach(iterator, context, obj);
327
- } else {
328
- for (key in obj) {
329
- if (obj.hasOwnProperty(key)) {
330
- iterator.call(context, obj[key], key, obj);
331
- }
332
- }
333
- }
334
- }
335
- return obj;
336
-}
337
-
338
-function sortedKeys(obj) {
339
- return Object.keys(obj).sort();
340
-}
341
-
342
-function forEachSorted(obj, iterator, context) {
343
- var keys = sortedKeys(obj);
344
- for (var i = 0; i < keys.length; i++) {
345
- iterator.call(context, obj[keys[i]], keys[i]);
346
- }
347
- return keys;
348
-}
349
-
350
-
351
-/**
352
- * when using forEach the params are value, key, but it is often useful to have key, value.
353
- * @param {function(string, *)} iteratorFn
354
- * @returns {function(*, string)}
355
- */
356
-function reverseParams(iteratorFn) {
357
- return function(value, key) { iteratorFn(key, value); };
358
-}
359
-
360
-/**
361
- * A consistent way of creating unique IDs in angular.
362
- *
363
- * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
364
- * we hit number precision issues in JavaScript.
365
- *
366
- * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
367
- *
368
- * @returns {number} an unique alpha-numeric string
369
- */
370
-function nextUid() {
371
- return ++uid;
372
-}
373
-
374
-
375
-/**
376
- * Set or clear the hashkey for an object.
377
- * @param obj object
378
- * @param h the hashkey (!truthy to delete the hashkey)
379
- */
380
-function setHashKey(obj, h) {
381
- if (h) {
382
- obj.$$hashKey = h;
383
- }
384
- else {
385
- delete obj.$$hashKey;
386
- }
387
-}
388
-
389
-/**
390
- * @ngdoc function
391
- * @name angular.extend
392
- * @module ng
393
- * @kind function
394
- *
395
- * @description
396
- * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
397
- * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
398
- * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
399
- * Note: Keep in mind that `angular.extend` does not support recursive merge (deep copy).
400
- *
401
- * @param {Object} dst Destination object.
402
- * @param {...Object} src Source object(s).
403
- * @returns {Object} Reference to `dst`.
404
- */
405
-function extend(dst) {
406
- var h = dst.$$hashKey;
407
-
408
- for (var i = 1, ii = arguments.length; i < ii; i++) {
409
- var obj = arguments[i];
410
- if (obj) {
411
- var keys = Object.keys(obj);
412
- for (var j = 0, jj = keys.length; j < jj; j++) {
413
- var key = keys[j];
414
- dst[key] = obj[key];
415
- }
416
- }
417
- }
418
-
419
- setHashKey(dst, h);
420
- return dst;
421
-}
422
-
423
-function int(str) {
424
- return parseInt(str, 10);
425
-}
426
-
427
-
428
-function inherit(parent, extra) {
429
- return extend(Object.create(parent), extra);
430
-}
431
-
432
-/**
433
- * @ngdoc function
434
- * @name angular.noop
435
- * @module ng
436
- * @kind function
437
- *
438
- * @description
439
- * A function that performs no operations. This function can be useful when writing code in the
440
- * functional style.
441
- ```js
442
- function foo(callback) {
443
- var result = calculateResult();
444
- (callback || angular.noop)(result);
445
- }
446
- ```
447
- */
448
-function noop() {}
449
-noop.$inject = [];
450
-
451
-
452
-/**
453
- * @ngdoc function
454
- * @name angular.identity
455
- * @module ng
456
- * @kind function
457
- *
458
- * @description
459
- * A function that returns its first argument. This function is useful when writing code in the
460
- * functional style.
461
- *
462
- ```js
463
- function transformer(transformationFn, value) {
464
- return (transformationFn || angular.identity)(value);
465
- };
466
- ```
467
- */
468
-function identity($) {return $;}
469
-identity.$inject = [];
470
-
471
-
472
-function valueFn(value) {return function() {return value;};}
473
-
474
-/**
475
- * @ngdoc function
476
- * @name angular.isUndefined
477
- * @module ng
478
- * @kind function
479
- *
480
- * @description
481
- * Determines if a reference is undefined.
482
- *
483
- * @param {*} value Reference to check.
484
- * @returns {boolean} True if `value` is undefined.
485
- */
486
-function isUndefined(value) {return typeof value === 'undefined';}
487
-
488
-
489
-/**
490
- * @ngdoc function
491
- * @name angular.isDefined
492
- * @module ng
493
- * @kind function
494
- *
495
- * @description
496
- * Determines if a reference is defined.
497
- *
498
- * @param {*} value Reference to check.
499
- * @returns {boolean} True if `value` is defined.
500
- */
501
-function isDefined(value) {return typeof value !== 'undefined';}
502
-
503
-
504
-/**
505
- * @ngdoc function
506
- * @name angular.isObject
507
- * @module ng
508
- * @kind function
509
- *
510
- * @description
511
- * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
512
- * considered to be objects. Note that JavaScript arrays are objects.
513
- *
514
- * @param {*} value Reference to check.
515
- * @returns {boolean} True if `value` is an `Object` but not `null`.
516
- */
517
-function isObject(value) {
518
- // http://jsperf.com/isobject4
519
- return value !== null && typeof value === 'object';
520
-}
521
-
522
-
523
-/**
524
- * @ngdoc function
525
- * @name angular.isString
526
- * @module ng
527
- * @kind function
528
- *
529
- * @description
530
- * Determines if a reference is a `String`.
531
- *
532
- * @param {*} value Reference to check.
533
- * @returns {boolean} True if `value` is a `String`.
534
- */
535
-function isString(value) {return typeof value === 'string';}
536
-
537
-
538
-/**
539
- * @ngdoc function
540
- * @name angular.isNumber
541
- * @module ng
542
- * @kind function
543
- *
544
- * @description
545
- * Determines if a reference is a `Number`.
546
- *
547
- * @param {*} value Reference to check.
548
- * @returns {boolean} True if `value` is a `Number`.
549
- */
550
-function isNumber(value) {return typeof value === 'number';}
551
-
552
-
553
-/**
554
- * @ngdoc function
555
- * @name angular.isDate
556
- * @module ng
557
- * @kind function
558
- *
559
- * @description
560
- * Determines if a value is a date.
561
- *
562
- * @param {*} value Reference to check.
563
- * @returns {boolean} True if `value` is a `Date`.
564
- */
565
-function isDate(value) {
566
- return toString.call(value) === '[object Date]';
567
-}
568
-
569
-
570
-/**
571
- * @ngdoc function
572
- * @name angular.isArray
573
- * @module ng
574
- * @kind function
575
- *
576
- * @description
577
- * Determines if a reference is an `Array`.
578
- *
579
- * @param {*} value Reference to check.
580
- * @returns {boolean} True if `value` is an `Array`.
581
- */
582
-var isArray = Array.isArray;
583
-
584
-/**
585
- * @ngdoc function
586
- * @name angular.isFunction
587
- * @module ng
588
- * @kind function
589
- *
590
- * @description
591
- * Determines if a reference is a `Function`.
592
- *
593
- * @param {*} value Reference to check.
594
- * @returns {boolean} True if `value` is a `Function`.
595
- */
596
-function isFunction(value) {return typeof value === 'function';}
597
-
598
-
599
-/**
600
- * Determines if a value is a regular expression object.
601
- *
602
- * @private
603
- * @param {*} value Reference to check.
604
- * @returns {boolean} True if `value` is a `RegExp`.
605
- */
606
-function isRegExp(value) {
607
- return toString.call(value) === '[object RegExp]';
608
-}
609
-
610
-
611
-/**
612
- * Checks if `obj` is a window object.
613
- *
614
- * @private
615
- * @param {*} obj Object to check
616
- * @returns {boolean} True if `obj` is a window obj.
617
- */
618
-function isWindow(obj) {
619
- return obj && obj.window === obj;
620
-}
621
-
622
-
623
-function isScope(obj) {
624
- return obj && obj.$evalAsync && obj.$watch;
625
-}
626
-
627
-
628
-function isFile(obj) {
629
- return toString.call(obj) === '[object File]';
630
-}
631
-
632
-
633
-function isBlob(obj) {
634
- return toString.call(obj) === '[object Blob]';
635
-}
636
-
637
-
638
-function isBoolean(value) {
639
- return typeof value === 'boolean';
640
-}
641
-
642
-
643
-function isPromiseLike(obj) {
644
- return obj && isFunction(obj.then);
645
-}
646
-
647
-
648
-var trim = function(value) {
649
- return isString(value) ? value.trim() : value;
650
-};
651
-
652
-// Copied from:
653
-// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
654
-// Prereq: s is a string.
655
-var escapeForRegexp = function(s) {
656
- return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
657
- replace(/\x08/g, '\\x08');
658
-};
659
-
660
-
661
-/**
662
- * @ngdoc function
663
- * @name angular.isElement
664
- * @module ng
665
- * @kind function
666
- *
667
- * @description
668
- * Determines if a reference is a DOM element (or wrapped jQuery element).
669
- *
670
- * @param {*} value Reference to check.
671
- * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).
672
- */
673
-function isElement(node) {
674
- return !!(node &&
675
- (node.nodeName // we are a direct element
676
- || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API
677
-}
678
-
679
-/**
680
- * @param str 'key1,key2,...'
681
- * @returns {object} in the form of {key1:true, key2:true, ...}
682
- */
683
-function makeMap(str) {
684
- var obj = {}, items = str.split(","), i;
685
- for (i = 0; i < items.length; i++)
686
- obj[ items[i] ] = true;
687
- return obj;
688
-}
689
-
690
-
691
-function nodeName_(element) {
692
- return lowercase(element.nodeName || (element[0] && element[0].nodeName));
693
-}
694
-
695
-function includes(array, obj) {
696
- return Array.prototype.indexOf.call(array, obj) != -1;
697
-}
698
-
699
-function arrayRemove(array, value) {
700
- var index = array.indexOf(value);
701
- if (index >= 0)
702
- array.splice(index, 1);
703
- return value;
704
-}
705
-
706
-/**
707
- * @ngdoc function
708
- * @name angular.copy
709
- * @module ng
710
- * @kind function
711
- *
712
- * @description
713
- * Creates a deep copy of `source`, which should be an object or an array.
714
- *
715
- * * If no destination is supplied, a copy of the object or array is created.
716
- * * If a destination is provided, all of its elements (for array) or properties (for objects)
717
- * are deleted and then all elements/properties from the source are copied to it.
718
- * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
719
- * * If `source` is identical to 'destination' an exception will be thrown.
720
- *
721
- * @param {*} source The source that will be used to make a copy.
722
- * Can be any type, including primitives, `null`, and `undefined`.
723
- * @param {(Object|Array)=} destination Destination into which the source is copied. If
724
- * provided, must be of the same type as `source`.
725
- * @returns {*} The copy or updated `destination`, if `destination` was specified.
726
- *
727
- * @example
728
- <example module="copyExample">
729
- <file name="index.html">
730
- <div ng-controller="ExampleController">
731
- <form novalidate class="simple-form">
732
- Name: <input type="text" ng-model="user.name" /><br />
733
- E-mail: <input type="email" ng-model="user.email" /><br />
734
- Gender: <input type="radio" ng-model="user.gender" value="male" />male
735
- <input type="radio" ng-model="user.gender" value="female" />female<br />
736
- <button ng-click="reset()">RESET</button>
737
- <button ng-click="update(user)">SAVE</button>
738
- </form>
739
- <pre>form = {{user | json}}</pre>
740
- <pre>master = {{master | json}}</pre>
741
- </div>
742
-
743
- <script>
744
- angular.module('copyExample', [])
745
- .controller('ExampleController', ['$scope', function($scope) {
746
- $scope.master= {};
747
-
748
- $scope.update = function(user) {
749
- // Example with 1 argument
750
- $scope.master= angular.copy(user);
751
- };
752
-
753
- $scope.reset = function() {
754
- // Example with 2 arguments
755
- angular.copy($scope.master, $scope.user);
756
- };
757
-
758
- $scope.reset();
759
- }]);
760
- </script>
761
- </file>
762
- </example>
763
- */
764
-function copy(source, destination, stackSource, stackDest) {
765
- if (isWindow(source) || isScope(source)) {
766
- throw ngMinErr('cpws',
767
- "Can't copy! Making copies of Window or Scope instances is not supported.");
768
- }
769
-
770
- if (!destination) {
771
- destination = source;
772
- if (source) {
773
- if (isArray(source)) {
774
- destination = copy(source, [], stackSource, stackDest);
775
- } else if (isDate(source)) {
776
- destination = new Date(source.getTime());
777
- } else if (isRegExp(source)) {
778
- destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
779
- destination.lastIndex = source.lastIndex;
780
- } else if (isObject(source)) {
781
- var emptyObject = Object.create(Object.getPrototypeOf(source));
782
- destination = copy(source, emptyObject, stackSource, stackDest);
783
- }
784
- }
785
- } else {
786
- if (source === destination) throw ngMinErr('cpi',
787
- "Can't copy! Source and destination are identical.");
788
-
789
- stackSource = stackSource || [];
790
- stackDest = stackDest || [];
791
-
792
- if (isObject(source)) {
793
- var index = stackSource.indexOf(source);
794
- if (index !== -1) return stackDest[index];
795
-
796
- stackSource.push(source);
797
- stackDest.push(destination);
798
- }
799
-
800
- var result;
801
- if (isArray(source)) {
802
- destination.length = 0;
803
- for (var i = 0; i < source.length; i++) {
804
- result = copy(source[i], null, stackSource, stackDest);
805
- if (isObject(source[i])) {
806
- stackSource.push(source[i]);
807
- stackDest.push(result);
808
- }
809
- destination.push(result);
810
- }
811
- } else {
812
- var h = destination.$$hashKey;
813
- if (isArray(destination)) {
814
- destination.length = 0;
815
- } else {
816
- forEach(destination, function(value, key) {
817
- delete destination[key];
818
- });
819
- }
820
- for (var key in source) {
821
- if (source.hasOwnProperty(key)) {
822
- result = copy(source[key], null, stackSource, stackDest);
823
- if (isObject(source[key])) {
824
- stackSource.push(source[key]);
825
- stackDest.push(result);
826
- }
827
- destination[key] = result;
828
- }
829
- }
830
- setHashKey(destination,h);
831
- }
832
-
833
- }
834
- return destination;
835
-}
836
-
837
-/**
838
- * Creates a shallow copy of an object, an array or a primitive.
839
- *
840
- * Assumes that there are no proto properties for objects.
841
- */
842
-function shallowCopy(src, dst) {
843
- if (isArray(src)) {
844
- dst = dst || [];
845
-
846
- for (var i = 0, ii = src.length; i < ii; i++) {
847
- dst[i] = src[i];
848
- }
849
- } else if (isObject(src)) {
850
- dst = dst || {};
851
-
852
- for (var key in src) {
853
- if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
854
- dst[key] = src[key];
855
- }
856
- }
857
- }
858
-
859
- return dst || src;
860
-}
861
-
862
-
863
-/**
864
- * @ngdoc function
865
- * @name angular.equals
866
- * @module ng
867
- * @kind function
868
- *
869
- * @description
870
- * Determines if two objects or two values are equivalent. Supports value types, regular
871
- * expressions, arrays and objects.
872
- *
873
- * Two objects or values are considered equivalent if at least one of the following is true:
874
- *
875
- * * Both objects or values pass `===` comparison.
876
- * * Both objects or values are of the same type and all of their properties are equal by
877
- * comparing them with `angular.equals`.
878
- * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)
879
- * * Both values represent the same regular expression (In JavaScript,
880
- * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
881
- * representation matches).
882
- *
883
- * During a property comparison, properties of `function` type and properties with names
884
- * that begin with `$` are ignored.
885
- *
886
- * Scope and DOMWindow objects are being compared only by identify (`===`).
887
- *
888
- * @param {*} o1 Object or value to compare.
889
- * @param {*} o2 Object or value to compare.
890
- * @returns {boolean} True if arguments are equal.
891
- */
892
-function equals(o1, o2) {
893
- if (o1 === o2) return true;
894
- if (o1 === null || o2 === null) return false;
895
- if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
896
- var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
897
- if (t1 == t2) {
898
- if (t1 == 'object') {
899
- if (isArray(o1)) {
900
- if (!isArray(o2)) return false;
901
- if ((length = o1.length) == o2.length) {
902
- for (key = 0; key < length; key++) {
903
- if (!equals(o1[key], o2[key])) return false;
904
- }
905
- return true;
906
- }
907
- } else if (isDate(o1)) {
908
- if (!isDate(o2)) return false;
909
- return equals(o1.getTime(), o2.getTime());
910
- } else if (isRegExp(o1) && isRegExp(o2)) {
911
- return o1.toString() == o2.toString();
912
- } else {
913
- if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;
914
- keySet = {};
915
- for (key in o1) {
916
- if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
917
- if (!equals(o1[key], o2[key])) return false;
918
- keySet[key] = true;
919
- }
920
- for (key in o2) {
921
- if (!keySet.hasOwnProperty(key) &&
922
- key.charAt(0) !== '$' &&
923
- o2[key] !== undefined &&
924
- !isFunction(o2[key])) return false;
925
- }
926
- return true;
927
- }
928
- }
929
- }
930
- return false;
931
-}
932
-
933
-var csp = function() {
934
- if (isDefined(csp.isActive_)) return csp.isActive_;
935
-
936
- var active = !!(document.querySelector('[ng-csp]') ||
937
- document.querySelector('[data-ng-csp]'));
938
-
939
- if (!active) {
940
- try {
941
- /* jshint -W031, -W054 */
942
- new Function('');
943
- /* jshint +W031, +W054 */
944
- } catch (e) {
945
- active = true;
946
- }
947
- }
948
-
949
- return (csp.isActive_ = active);
950
-};
951
-
952
-
953
-
954
-function concat(array1, array2, index) {
955
- return array1.concat(slice.call(array2, index));
956
-}
957
-
958
-function sliceArgs(args, startIndex) {
959
- return slice.call(args, startIndex || 0);
960
-}
961
-
962
-
963
-/* jshint -W101 */
964
-/**
965
- * @ngdoc function
966
- * @name angular.bind
967
- * @module ng
968
- * @kind function
969
- *
970
- * @description
971
- * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
972
- * `fn`). You can supply optional `args` that are prebound to the function. This feature is also
973
- * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as
974
- * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).
975
- *
976
- * @param {Object} self Context which `fn` should be evaluated in.
977
- * @param {function()} fn Function to be bound.
978
- * @param {...*} args Optional arguments to be prebound to the `fn` function call.
979
- * @returns {function()} Function that wraps the `fn` with all the specified bindings.
980
- */
981
-/* jshint +W101 */
982
-function bind(self, fn) {
983
- var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
984
- if (isFunction(fn) && !(fn instanceof RegExp)) {
985
- return curryArgs.length
986
- ? function() {
987
- return arguments.length
988
- ? fn.apply(self, concat(curryArgs, arguments, 0))
989
- : fn.apply(self, curryArgs);
990
- }
991
- : function() {
992
- return arguments.length
993
- ? fn.apply(self, arguments)
994
- : fn.call(self);
995
- };
996
- } else {
997
- // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
998
- return fn;
999
- }
1000
-}
1001
-
1002
-
1003
-function toJsonReplacer(key, value) {
1004
- var val = value;
1005
-
1006
- if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
1007
- val = undefined;
1008
- } else if (isWindow(value)) {
1009
- val = '$WINDOW';
1010
- } else if (value && document === value) {
1011
- val = '$DOCUMENT';
1012
- } else if (isScope(value)) {
1013
- val = '$SCOPE';
1014
- }
1015
-
1016
- return val;
1017
-}
1018
-
1019
-
1020
-/**
1021
- * @ngdoc function
1022
- * @name angular.toJson
1023
- * @module ng
1024
- * @kind function
1025
- *
1026
- * @description
1027
- * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
1028
- * stripped since angular uses this notation internally.
1029
- *
1030
- * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
1031
- * @param {boolean|number=} pretty If set to true, the JSON output will contain newlines and whitespace.
1032
- * If set to an integer, the JSON output will contain that many spaces per indentation (the default is 2).
1033
- * @returns {string|undefined} JSON-ified string representing `obj`.
1034
- */
1035
-function toJson(obj, pretty) {
1036
- if (typeof obj === 'undefined') return undefined;
1037
- if (!isNumber(pretty)) {
1038
- pretty = pretty ? 2 : null;
1039
- }
1040
- return JSON.stringify(obj, toJsonReplacer, pretty);
1041
-}
1042
-
1043
-
1044
-/**
1045
- * @ngdoc function
1046
- * @name angular.fromJson
1047
- * @module ng
1048
- * @kind function
1049
- *
1050
- * @description
1051
- * Deserializes a JSON string.
1052
- *
1053
- * @param {string} json JSON string to deserialize.
1054
- * @returns {Object|Array|string|number} Deserialized thingy.
1055
- */
1056
-function fromJson(json) {
1057
- return isString(json)
1058
- ? JSON.parse(json)
1059
- : json;
1060
-}
1061
-
1062
-
1063
-/**
1064
- * @returns {string} Returns the string representation of the element.
1065
- */
1066
-function startingTag(element) {
1067
- element = jqLite(element).clone();
1068
- try {
1069
- // turns out IE does not let you set .html() on elements which
1070
- // are not allowed to have children. So we just ignore it.
1071
- element.empty();
1072
- } catch (e) {}
1073
- var elemHtml = jqLite('<div>').append(element).html();
1074
- try {
1075
- return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
1076
- elemHtml.
1077
- match(/^(<[^>]+>)/)[1].
1078
- replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
1079
- } catch (e) {
1080
- return lowercase(elemHtml);
1081
- }
1082
-
1083
-}
1084
-
1085
-
1086
-/////////////////////////////////////////////////
1087
-
1088
-/**
1089
- * Tries to decode the URI component without throwing an exception.
1090
- *
1091
- * @private
1092
- * @param str value potential URI component to check.
1093
- * @returns {boolean} True if `value` can be decoded
1094
- * with the decodeURIComponent function.
1095
- */
1096
-function tryDecodeURIComponent(value) {
1097
- try {
1098
- return decodeURIComponent(value);
1099
- } catch (e) {
1100
- // Ignore any invalid uri component
1101
- }
1102
-}
1103
-
1104
-
1105
-/**
1106
- * Parses an escaped url query string into key-value pairs.
1107
- * @returns {Object.<string,boolean|Array>}
1108
- */
1109
-function parseKeyValue(/**string*/keyValue) {
1110
- var obj = {}, key_value, key;
1111
- forEach((keyValue || "").split('&'), function(keyValue) {
1112
- if (keyValue) {
1113
- key_value = keyValue.replace(/\+/g,'%20').split('=');
1114
- key = tryDecodeURIComponent(key_value[0]);
1115
- if (isDefined(key)) {
1116
- var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
1117
- if (!hasOwnProperty.call(obj, key)) {
1118
- obj[key] = val;
1119
- } else if (isArray(obj[key])) {
1120
- obj[key].push(val);
1121
- } else {
1122
- obj[key] = [obj[key],val];
1123
- }
1124
- }
1125
- }
1126
- });
1127
- return obj;
1128
-}
1129
-
1130
-function toKeyValue(obj) {
1131
- var parts = [];
1132
- forEach(obj, function(value, key) {
1133
- if (isArray(value)) {
1134
- forEach(value, function(arrayValue) {
1135
- parts.push(encodeUriQuery(key, true) +
1136
- (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
1137
- });
1138
- } else {
1139
- parts.push(encodeUriQuery(key, true) +
1140
- (value === true ? '' : '=' + encodeUriQuery(value, true)));
1141
- }
1142
- });
1143
- return parts.length ? parts.join('&') : '';
1144
-}
1145
-
1146
-
1147
-/**
1148
- * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
1149
- * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
1150
- * segments:
1151
- * segment = *pchar
1152
- * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
1153
- * pct-encoded = "%" HEXDIG HEXDIG
1154
- * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
1155
- * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
1156
- * / "*" / "+" / "," / ";" / "="
1157
- */
1158
-function encodeUriSegment(val) {
1159
- return encodeUriQuery(val, true).
1160
- replace(/%26/gi, '&').
1161
- replace(/%3D/gi, '=').
1162
- replace(/%2B/gi, '+');
1163
-}
1164
-
1165
-
1166
-/**
1167
- * This method is intended for encoding *key* or *value* parts of query component. We need a custom
1168
- * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
1169
- * encoded per http://tools.ietf.org/html/rfc3986:
1170
- * query = *( pchar / "/" / "?" )
1171
- * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
1172
- * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
1173
- * pct-encoded = "%" HEXDIG HEXDIG
1174
- * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
1175
- * / "*" / "+" / "," / ";" / "="
1176
- */
1177
-function encodeUriQuery(val, pctEncodeSpaces) {
1178
- return encodeURIComponent(val).
1179
- replace(/%40/gi, '@').
1180
- replace(/%3A/gi, ':').
1181
- replace(/%24/g, '$').
1182
- replace(/%2C/gi, ',').
1183
- replace(/%3B/gi, ';').
1184
- replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
1185
-}
1186
-
1187
-var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
1188
-
1189
-function getNgAttribute(element, ngAttr) {
1190
- var attr, i, ii = ngAttrPrefixes.length;
1191
- element = jqLite(element);
1192
- for (i = 0; i < ii; ++i) {
1193
- attr = ngAttrPrefixes[i] + ngAttr;
1194
- if (isString(attr = element.attr(attr))) {
1195
- return attr;
1196
- }
1197
- }
1198
- return null;
1199
-}
1200
-
1201
-/**
1202
- * @ngdoc directive
1203
- * @name ngApp
1204
- * @module ng
1205
- *
1206
- * @element ANY
1207
- * @param {angular.Module} ngApp an optional application
1208
- * {@link angular.module module} name to load.
1209
- * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be
1210
- * created in "strict-di" mode. This means that the application will fail to invoke functions which
1211
- * do not use explicit function annotation (and are thus unsuitable for minification), as described
1212
- * in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in
1213
- * tracking down the root of these bugs.
1214
- *
1215
- * @description
1216
- *
1217
- * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
1218
- * designates the **root element** of the application and is typically placed near the root element
1219
- * of the page - e.g. on the `<body>` or `<html>` tags.
1220
- *
1221
- * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
1222
- * found in the document will be used to define the root element to auto-bootstrap as an
1223
- * application. To run multiple applications in an HTML document you must manually bootstrap them using
1224
- * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
1225
- *
1226
- * You can specify an **AngularJS module** to be used as the root module for the application. This
1227
- * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and
1228
- * should contain the application code needed or have dependencies on other modules that will
1229
- * contain the code. See {@link angular.module} for more information.
1230
- *
1231
- * In the example below if the `ngApp` directive were not placed on the `html` element then the
1232
- * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
1233
- * would not be resolved to `3`.
1234
- *
1235
- * `ngApp` is the easiest, and most common, way to bootstrap an application.
1236
- *
1237
- <example module="ngAppDemo">
1238
- <file name="index.html">
1239
- <div ng-controller="ngAppDemoController">
1240
- I can add: {{a}} + {{b}} = {{ a+b }}
1241
- </div>
1242
- </file>
1243
- <file name="script.js">
1244
- angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
1245
- $scope.a = 1;
1246
- $scope.b = 2;
1247
- });
1248
- </file>
1249
- </example>
1250
- *
1251
- * Using `ngStrictDi`, you would see something like this:
1252
- *
1253
- <example ng-app-included="true">
1254
- <file name="index.html">
1255
- <div ng-app="ngAppStrictDemo" ng-strict-di>
1256
- <div ng-controller="GoodController1">
1257
- I can add: {{a}} + {{b}} = {{ a+b }}
1258
-
1259
- <p>This renders because the controller does not fail to
1260
- instantiate, by using explicit annotation style (see
1261
- script.js for details)
1262
- </p>
1263
- </div>
1264
-
1265
- <div ng-controller="GoodController2">
1266
- Name: <input ng-model="name"><br />
1267
- Hello, {{name}}!
1268
-
1269
- <p>This renders because the controller does not fail to
1270
- instantiate, by using explicit annotation style
1271
- (see script.js for details)
1272
- </p>
1273
- </div>
1274
-
1275
- <div ng-controller="BadController">
1276
- I can add: {{a}} + {{b}} = {{ a+b }}
1277
-
1278
- <p>The controller could not be instantiated, due to relying
1279
- on automatic function annotations (which are disabled in
1280
- strict mode). As such, the content of this section is not
1281
- interpolated, and there should be an error in your web console.
1282
- </p>
1283
- </div>
1284
- </div>
1285
- </file>
1286
- <file name="script.js">
1287
- angular.module('ngAppStrictDemo', [])
1288
- // BadController will fail to instantiate, due to relying on automatic function annotation,
1289
- // rather than an explicit annotation
1290
- .controller('BadController', function($scope) {
1291
- $scope.a = 1;
1292
- $scope.b = 2;
1293
- })
1294
- // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,
1295
- // due to using explicit annotations using the array style and $inject property, respectively.
1296
- .controller('GoodController1', ['$scope', function($scope) {
1297
- $scope.a = 1;
1298
- $scope.b = 2;
1299
- }])
1300
- .controller('GoodController2', GoodController2);
1301
- function GoodController2($scope) {
1302
- $scope.name = "World";
1303
- }
1304
- GoodController2.$inject = ['$scope'];
1305
- </file>
1306
- <file name="style.css">
1307
- div[ng-controller] {
1308
- margin-bottom: 1em;
1309
- -webkit-border-radius: 4px;
1310
- border-radius: 4px;
1311
- border: 1px solid;
1312
- padding: .5em;
1313
- }
1314
- div[ng-controller^=Good] {
1315
- border-color: #d6e9c6;
1316
- background-color: #dff0d8;
1317
- color: #3c763d;
1318
- }
1319
- div[ng-controller^=Bad] {
1320
- border-color: #ebccd1;
1321
- background-color: #f2dede;
1322
- color: #a94442;
1323
- margin-bottom: 0;
1324
- }
1325
- </file>
1326
- </example>
1327
- */
1328
-function angularInit(element, bootstrap) {
1329
- var appElement,
1330
- module,
1331
- config = {};
1332
-
1333
- // The element `element` has priority over any other element
1334
- forEach(ngAttrPrefixes, function(prefix) {
1335
- var name = prefix + 'app';
1336
-
1337
- if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
1338
- appElement = element;
1339
- module = element.getAttribute(name);
1340
- }
1341
- });
1342
- forEach(ngAttrPrefixes, function(prefix) {
1343
- var name = prefix + 'app';
1344
- var candidate;
1345
-
1346
- if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
1347
- appElement = candidate;
1348
- module = candidate.getAttribute(name);
1349
- }
1350
- });
1351
- if (appElement) {
1352
- config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
1353
- bootstrap(appElement, module ? [module] : [], config);
1354
- }
1355
-}
1356
-
1357
-/**
1358
- * @ngdoc function
1359
- * @name angular.bootstrap
1360
- * @module ng
1361
- * @description
1362
- * Use this function to manually start up angular application.
1363
- *
1364
- * See: {@link guide/bootstrap Bootstrap}
1365
- *
1366
- * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
1367
- * They must use {@link ng.directive:ngApp ngApp}.
1368
- *
1369
- * Angular will detect if it has been loaded into the browser more than once and only allow the
1370
- * first loaded script to be bootstrapped and will report a warning to the browser console for
1371
- * each of the subsequent scripts. This prevents strange results in applications, where otherwise
1372
- * multiple instances of Angular try to work on the DOM.
1373
- *
1374
- * ```html
1375
- * <!doctype html>
1376
- * <html>
1377
- * <body>
1378
- * <div ng-controller="WelcomeController">
1379
- * {{greeting}}
1380
- * </div>
1381
- *
1382
- * <script src="angular.js"></script>
1383
- * <script>
1384
- * var app = angular.module('demo', [])
1385
- * .controller('WelcomeController', function($scope) {
1386
- * $scope.greeting = 'Welcome!';
1387
- * });
1388
- * angular.bootstrap(document, ['demo']);
1389
- * </script>
1390
- * </body>
1391
- * </html>
1392
- * ```
1393
- *
1394
- * @param {DOMElement} element DOM element which is the root of angular application.
1395
- * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
1396
- * Each item in the array should be the name of a predefined module or a (DI annotated)
1397
- * function that will be invoked by the injector as a run block.
1398
- * See: {@link angular.module modules}
1399
- * @param {Object=} config an object for defining configuration options for the application. The
1400
- * following keys are supported:
1401
- *
1402
- * * `strictDi` - disable automatic function annotation for the application. This is meant to
1403
- * assist in finding bugs which break minified code. Defaults to `false`.
1404
- *
1405
- * @returns {auto.$injector} Returns the newly created injector for this app.
1406
- */
1407
-function bootstrap(element, modules, config) {
1408
- if (!isObject(config)) config = {};
1409
- var defaultConfig = {
1410
- strictDi: false
1411
- };
1412
- config = extend(defaultConfig, config);
1413
- var doBootstrap = function() {
1414
- element = jqLite(element);
1415
-
1416
- if (element.injector()) {
1417
- var tag = (element[0] === document) ? 'document' : startingTag(element);
1418
- //Encode angle brackets to prevent input from being sanitized to empty string #8683
1419
- throw ngMinErr(
1420
- 'btstrpd',
1421
- "App Already Bootstrapped with this Element '{0}'",
1422
- tag.replace(/</,'&lt;').replace(/>/,'&gt;'));
1423
- }
1424
-
1425
- modules = modules || [];
1426
- modules.unshift(['$provide', function($provide) {
1427
- $provide.value('$rootElement', element);
1428
- }]);
1429
-
1430
- if (config.debugInfoEnabled) {
1431
- // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.
1432
- modules.push(['$compileProvider', function($compileProvider) {
1433
- $compileProvider.debugInfoEnabled(true);
1434
- }]);
1435
- }
1436
-
1437
- modules.unshift('ng');
1438
- var injector = createInjector(modules, config.strictDi);
1439
- injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
1440
- function bootstrapApply(scope, element, compile, injector) {
1441
- scope.$apply(function() {
1442
- element.data('$injector', injector);
1443
- compile(element)(scope);
1444
- });
1445
- }]
1446
- );
1447
- return injector;
1448
- };
1449
-
1450
- var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;
1451
- var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
1452
-
1453
- if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {
1454
- config.debugInfoEnabled = true;
1455
- window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');
1456
- }
1457
-
1458
- if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
1459
- return doBootstrap();
1460
- }
1461
-
1462
- window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
1463
- angular.resumeBootstrap = function(extraModules) {
1464
- forEach(extraModules, function(module) {
1465
- modules.push(module);
1466
- });
1467
- doBootstrap();
1468
- };
1469
-}
1470
-
1471
-/**
1472
- * @ngdoc function
1473
- * @name angular.reloadWithDebugInfo
1474
- * @module ng
1475
- * @description
1476
- * Use this function to reload the current application with debug information turned on.
1477
- * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.
1478
- *
1479
- * See {@link ng.$compileProvider#debugInfoEnabled} for more.
1480
- */
1481
-function reloadWithDebugInfo() {
1482
- window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;
1483
- window.location.reload();
1484
-}
1485
-
1486
-/**
1487
- * @name angular.getTestability
1488
- * @module ng
1489
- * @description
1490
- * Get the testability service for the instance of Angular on the given
1491
- * element.
1492
- * @param {DOMElement} element DOM element which is the root of angular application.
1493
- */
1494
-function getTestability(rootElement) {
1495
- return angular.element(rootElement).injector().get('$$testability');
1496
-}
1497
-
1498
-var SNAKE_CASE_REGEXP = /[A-Z]/g;
1499
-function snake_case(name, separator) {
1500
- separator = separator || '_';
1501
- return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
1502
- return (pos ? separator : '') + letter.toLowerCase();
1503
- });
1504
-}
1505
-
1506
-var bindJQueryFired = false;
1507
-var skipDestroyOnNextJQueryCleanData;
1508
-function bindJQuery() {
1509
- var originalCleanData;
1510
-
1511
- if (bindJQueryFired) {
1512
- return;
1513
- }
1514
-
1515
- // bind to jQuery if present;
1516
- jQuery = window.jQuery;
1517
- // Use jQuery if it exists with proper functionality, otherwise default to us.
1518
- // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
1519
- // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
1520
- // versions. It will not work for sure with jQuery <1.7, though.
1521
- if (jQuery && jQuery.fn.on) {
1522
- jqLite = jQuery;
1523
- extend(jQuery.fn, {
1524
- scope: JQLitePrototype.scope,
1525
- isolateScope: JQLitePrototype.isolateScope,
1526
- controller: JQLitePrototype.controller,
1527
- injector: JQLitePrototype.injector,
1528
- inheritedData: JQLitePrototype.inheritedData
1529
- });
1530
-
1531
- // All nodes removed from the DOM via various jQuery APIs like .remove()
1532
- // are passed through jQuery.cleanData. Monkey-patch this method to fire
1533
- // the $destroy event on all removed nodes.
1534
- originalCleanData = jQuery.cleanData;
1535
- jQuery.cleanData = function(elems) {
1536
- var events;
1537
- if (!skipDestroyOnNextJQueryCleanData) {
1538
- for (var i = 0, elem; (elem = elems[i]) != null; i++) {
1539
- events = jQuery._data(elem, "events");
1540
- if (events && events.$destroy) {
1541
- jQuery(elem).triggerHandler('$destroy');
1542
- }
1543
- }
1544
- } else {
1545
- skipDestroyOnNextJQueryCleanData = false;
1546
- }
1547
- originalCleanData(elems);
1548
- };
1549
- } else {
1550
- jqLite = JQLite;
1551
- }
1552
-
1553
- angular.element = jqLite;
1554
-
1555
- // Prevent double-proxying.
1556
- bindJQueryFired = true;
1557
-}
1558
-
1559
-/**
1560
- * throw error if the argument is falsy.
1561
- */
1562
-function assertArg(arg, name, reason) {
1563
- if (!arg) {
1564
- throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
1565
- }
1566
- return arg;
1567
-}
1568
-
1569
-function assertArgFn(arg, name, acceptArrayAnnotation) {
1570
- if (acceptArrayAnnotation && isArray(arg)) {
1571
- arg = arg[arg.length - 1];
1572
- }
1573
-
1574
- assertArg(isFunction(arg), name, 'not a function, got ' +
1575
- (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));
1576
- return arg;
1577
-}
1578
-
1579
-/**
1580
- * throw error if the name given is hasOwnProperty
1581
- * @param {String} name the name to test
1582
- * @param {String} context the context in which the name is used, such as module or directive
1583
- */
1584
-function assertNotHasOwnProperty(name, context) {
1585
- if (name === 'hasOwnProperty') {
1586
- throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
1587
- }
1588
-}
1589
-
1590
-/**
1591
- * Return the value accessible from the object by path. Any undefined traversals are ignored
1592
- * @param {Object} obj starting object
1593
- * @param {String} path path to traverse
1594
- * @param {boolean} [bindFnToScope=true]
1595
- * @returns {Object} value as accessible by path
1596
- */
1597
-//TODO(misko): this function needs to be removed
1598
-function getter(obj, path, bindFnToScope) {
1599
- if (!path) return obj;
1600
- var keys = path.split('.');
1601
- var key;
1602
- var lastInstance = obj;
1603
- var len = keys.length;
1604
-
1605
- for (var i = 0; i < len; i++) {
1606
- key = keys[i];
1607
- if (obj) {
1608
- obj = (lastInstance = obj)[key];
1609
- }
1610
- }
1611
- if (!bindFnToScope && isFunction(obj)) {
1612
- return bind(lastInstance, obj);
1613
- }
1614
- return obj;
1615
-}
1616
-
1617
-/**
1618
- * Return the DOM siblings between the first and last node in the given array.
1619
- * @param {Array} array like object
1620
- * @returns {jqLite} jqLite collection containing the nodes
1621
- */
1622
-function getBlockNodes(nodes) {
1623
- // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original
1624
- // collection, otherwise update the original collection.
1625
- var node = nodes[0];
1626
- var endNode = nodes[nodes.length - 1];
1627
- var blockNodes = [node];
1628
-
1629
- do {
1630
- node = node.nextSibling;
1631
- if (!node) break;
1632
- blockNodes.push(node);
1633
- } while (node !== endNode);
1634
-
1635
- return jqLite(blockNodes);
1636
-}
1637
-
1638
-
1639
-/**
1640
- * Creates a new object without a prototype. This object is useful for lookup without having to
1641
- * guard against prototypically inherited properties via hasOwnProperty.
1642
- *
1643
- * Related micro-benchmarks:
1644
- * - http://jsperf.com/object-create2
1645
- * - http://jsperf.com/proto-map-lookup/2
1646
- * - http://jsperf.com/for-in-vs-object-keys2
1647
- *
1648
- * @returns {Object}
1649
- */
1650
-function createMap() {
1651
- return Object.create(null);
1652
-}
1653
-
1654
-var NODE_TYPE_ELEMENT = 1;
1655
-var NODE_TYPE_TEXT = 3;
1656
-var NODE_TYPE_COMMENT = 8;
1657
-var NODE_TYPE_DOCUMENT = 9;
1658
-var NODE_TYPE_DOCUMENT_FRAGMENT = 11;
1659
-
1660
-/**
1661
- * @ngdoc type
1662
- * @name angular.Module
1663
- * @module ng
1664
- * @description
1665
- *
1666
- * Interface for configuring angular {@link angular.module modules}.
1667
- */
1668
-
1669
-function setupModuleLoader(window) {
1670
-
1671
- var $injectorMinErr = minErr('$injector');
1672
- var ngMinErr = minErr('ng');
1673
-
1674
- function ensure(obj, name, factory) {
1675
- return obj[name] || (obj[name] = factory());
1676
- }
1677
-
1678
- var angular = ensure(window, 'angular', Object);
1679
-
1680
- // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
1681
- angular.$$minErr = angular.$$minErr || minErr;
1682
-
1683
- return ensure(angular, 'module', function() {
1684
- /** @type {Object.<string, angular.Module>} */
1685
- var modules = {};
1686
-
1687
- /**
1688
- * @ngdoc function
1689
- * @name angular.module
1690
- * @module ng
1691
- * @description
1692
- *
1693
- * The `angular.module` is a global place for creating, registering and retrieving Angular
1694
- * modules.
1695
- * All modules (angular core or 3rd party) that should be available to an application must be
1696
- * registered using this mechanism.
1697
- *
1698
- * When passed two or more arguments, a new module is created. If passed only one argument, an
1699
- * existing module (the name passed as the first argument to `module`) is retrieved.
1700
- *
1701
- *
1702
- * # Module
1703
- *
1704
- * A module is a collection of services, directives, controllers, filters, and configuration information.
1705
- * `angular.module` is used to configure the {@link auto.$injector $injector}.
1706
- *
1707
- * ```js
1708
- * // Create a new module
1709
- * var myModule = angular.module('myModule', []);
1710
- *
1711
- * // register a new service
1712
- * myModule.value('appName', 'MyCoolApp');
1713
- *
1714
- * // configure existing services inside initialization blocks.
1715
- * myModule.config(['$locationProvider', function($locationProvider) {
1716
- * // Configure existing providers
1717
- * $locationProvider.hashPrefix('!');
1718
- * }]);
1719
- * ```
1720
- *
1721
- * Then you can create an injector and load your modules like this:
1722
- *
1723
- * ```js
1724
- * var injector = angular.injector(['ng', 'myModule'])
1725
- * ```
1726
- *
1727
- * However it's more likely that you'll just use
1728
- * {@link ng.directive:ngApp ngApp} or
1729
- * {@link angular.bootstrap} to simplify this process for you.
1730
- *
1731
- * @param {!string} name The name of the module to create or retrieve.
1732
- * @param {!Array.<string>=} requires If specified then new module is being created. If
1733
- * unspecified then the module is being retrieved for further configuration.
1734
- * @param {Function=} configFn Optional configuration function for the module. Same as
1735
- * {@link angular.Module#config Module#config()}.
1736
- * @returns {module} new module with the {@link angular.Module} api.
1737
- */
1738
- return function module(name, requires, configFn) {
1739
- var assertNotHasOwnProperty = function(name, context) {
1740
- if (name === 'hasOwnProperty') {
1741
- throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
1742
- }
1743
- };
1744
-
1745
- assertNotHasOwnProperty(name, 'module');
1746
- if (requires && modules.hasOwnProperty(name)) {
1747
- modules[name] = null;
1748
- }
1749
- return ensure(modules, name, function() {
1750
- if (!requires) {
1751
- throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
1752
- "the module name or forgot to load it. If registering a module ensure that you " +
1753
- "specify the dependencies as the second argument.", name);
1754
- }
1755
-
1756
- /** @type {!Array.<Array.<*>>} */
1757
- var invokeQueue = [];
1758
-
1759
- /** @type {!Array.<Function>} */
1760
- var configBlocks = [];
1761
-
1762
- /** @type {!Array.<Function>} */
1763
- var runBlocks = [];
1764
-
1765
- var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
1766
-
1767
- /** @type {angular.Module} */
1768
- var moduleInstance = {
1769
- // Private state
1770
- _invokeQueue: invokeQueue,
1771
- _configBlocks: configBlocks,
1772
- _runBlocks: runBlocks,
1773
-
1774
- /**
1775
- * @ngdoc property
1776
- * @name angular.Module#requires
1777
- * @module ng
1778
- *
1779
- * @description
1780
- * Holds the list of modules which the injector will load before the current module is
1781
- * loaded.
1782
- */
1783
- requires: requires,
1784
-
1785
- /**
1786
- * @ngdoc property
1787
- * @name angular.Module#name
1788
- * @module ng
1789
- *
1790
- * @description
1791
- * Name of the module.
1792
- */
1793
- name: name,
1794
-
1795
-
1796
- /**
1797
- * @ngdoc method
1798
- * @name angular.Module#provider
1799
- * @module ng
1800
- * @param {string} name service name
1801
- * @param {Function} providerType Construction function for creating new instance of the
1802
- * service.
1803
- * @description
1804
- * See {@link auto.$provide#provider $provide.provider()}.
1805
- */
1806
- provider: invokeLater('$provide', 'provider'),
1807
-
1808
- /**
1809
- * @ngdoc method
1810
- * @name angular.Module#factory
1811
- * @module ng
1812
- * @param {string} name service name
1813
- * @param {Function} providerFunction Function for creating new instance of the service.
1814
- * @description
1815
- * See {@link auto.$provide#factory $provide.factory()}.
1816
- */
1817
- factory: invokeLater('$provide', 'factory'),
1818
-
1819
- /**
1820
- * @ngdoc method
1821
- * @name angular.Module#service
1822
- * @module ng
1823
- * @param {string} name service name
1824
- * @param {Function} constructor A constructor function that will be instantiated.
1825
- * @description
1826
- * See {@link auto.$provide#service $provide.service()}.
1827
- */
1828
- service: invokeLater('$provide', 'service'),
1829
-
1830
- /**
1831
- * @ngdoc method
1832
- * @name angular.Module#value
1833
- * @module ng
1834
- * @param {string} name service name
1835
- * @param {*} object Service instance object.
1836
- * @description
1837
- * See {@link auto.$provide#value $provide.value()}.
1838
- */
1839
- value: invokeLater('$provide', 'value'),
1840
-
1841
- /**
1842
- * @ngdoc method
1843
- * @name angular.Module#constant
1844
- * @module ng
1845
- * @param {string} name constant name
1846
- * @param {*} object Constant value.
1847
- * @description
1848
- * Because the constant are fixed, they get applied before other provide methods.
1849
- * See {@link auto.$provide#constant $provide.constant()}.
1850
- */
1851
- constant: invokeLater('$provide', 'constant', 'unshift'),
1852
-
1853
- /**
1854
- * @ngdoc method
1855
- * @name angular.Module#animation
1856
- * @module ng
1857
- * @param {string} name animation name
1858
- * @param {Function} animationFactory Factory function for creating new instance of an
1859
- * animation.
1860
- * @description
1861
- *
1862
- * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
1863
- *
1864
- *
1865
- * Defines an animation hook that can be later used with
1866
- * {@link ngAnimate.$animate $animate} service and directives that use this service.
1867
- *
1868
- * ```js
1869
- * module.animation('.animation-name', function($inject1, $inject2) {
1870
- * return {
1871
- * eventName : function(element, done) {
1872
- * //code to run the animation
1873
- * //once complete, then run done()
1874
- * return function cancellationFunction(element) {
1875
- * //code to cancel the animation
1876
- * }
1877
- * }
1878
- * }
1879
- * })
1880
- * ```
1881
- *
1882
- * See {@link ng.$animateProvider#register $animateProvider.register()} and
1883
- * {@link ngAnimate ngAnimate module} for more information.
1884
- */
1885
- animation: invokeLater('$animateProvider', 'register'),
1886
-
1887
- /**
1888
- * @ngdoc method
1889
- * @name angular.Module#filter
1890
- * @module ng
1891
- * @param {string} name Filter name.
1892
- * @param {Function} filterFactory Factory function for creating new instance of filter.
1893
- * @description
1894
- * See {@link ng.$filterProvider#register $filterProvider.register()}.
1895
- */
1896
- filter: invokeLater('$filterProvider', 'register'),
1897
-
1898
- /**
1899
- * @ngdoc method
1900
- * @name angular.Module#controller
1901
- * @module ng
1902
- * @param {string|Object} name Controller name, or an object map of controllers where the
1903
- * keys are the names and the values are the constructors.
1904
- * @param {Function} constructor Controller constructor function.
1905
- * @description
1906
- * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
1907
- */
1908
- controller: invokeLater('$controllerProvider', 'register'),
1909
-
1910
- /**
1911
- * @ngdoc method
1912
- * @name angular.Module#directive
1913
- * @module ng
1914
- * @param {string|Object} name Directive name, or an object map of directives where the
1915
- * keys are the names and the values are the factories.
1916
- * @param {Function} directiveFactory Factory function for creating new instance of
1917
- * directives.
1918
- * @description
1919
- * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
1920
- */
1921
- directive: invokeLater('$compileProvider', 'directive'),
1922
-
1923
- /**
1924
- * @ngdoc method
1925
- * @name angular.Module#config
1926
- * @module ng
1927
- * @param {Function} configFn Execute this function on module load. Useful for service
1928
- * configuration.
1929
- * @description
1930
- * Use this method to register work which needs to be performed on module loading.
1931
- * For more about how to configure services, see
1932
- * {@link providers#provider-recipe Provider Recipe}.
1933
- */
1934
- config: config,
1935
-
1936
- /**
1937
- * @ngdoc method
1938
- * @name angular.Module#run
1939
- * @module ng
1940
- * @param {Function} initializationFn Execute this function after injector creation.
1941
- * Useful for application initialization.
1942
- * @description
1943
- * Use this method to register work which should be performed when the injector is done
1944
- * loading all modules.
1945
- */
1946
- run: function(block) {
1947
- runBlocks.push(block);
1948
- return this;
1949
- }
1950
- };
1951
-
1952
- if (configFn) {
1953
- config(configFn);
1954
- }
1955
-
1956
- return moduleInstance;
1957
-
1958
- /**
1959
- * @param {string} provider
1960
- * @param {string} method
1961
- * @param {String=} insertMethod
1962
- * @returns {angular.Module}
1963
- */
1964
- function invokeLater(provider, method, insertMethod, queue) {
1965
- if (!queue) queue = invokeQueue;
1966
- return function() {
1967
- queue[insertMethod || 'push']([provider, method, arguments]);
1968
- return moduleInstance;
1969
- };
1970
- }
1971
- });
1972
- };
1973
- });
1974
-
1975
-}
1976
-
1977
-/* global: toDebugString: true */
1978
-
1979
-function serializeObject(obj) {
1980
- var seen = [];
1981
-
1982
- return JSON.stringify(obj, function(key, val) {
1983
- val = toJsonReplacer(key, val);
1984
- if (isObject(val)) {
1985
-
1986
- if (seen.indexOf(val) >= 0) return '<<already seen>>';
1987
-
1988
- seen.push(val);
1989
- }
1990
- return val;
1991
- });
1992
-}
1993
-
1994
-function toDebugString(obj) {
1995
- if (typeof obj === 'function') {
1996
- return obj.toString().replace(/ \{[\s\S]*$/, '');
1997
- } else if (typeof obj === 'undefined') {
1998
- return 'undefined';
1999
- } else if (typeof obj !== 'string') {
2000
- return serializeObject(obj);
2001
- }
2002
- return obj;
2003
-}
2004
-
2005
-/* global angularModule: true,
2006
- version: true,
2007
-
2008
- $LocaleProvider,
2009
- $CompileProvider,
2010
-
2011
- htmlAnchorDirective,
2012
- inputDirective,
2013
- inputDirective,
2014
- formDirective,
2015
- scriptDirective,
2016
- selectDirective,
2017
- styleDirective,
2018
- optionDirective,
2019
- ngBindDirective,
2020
- ngBindHtmlDirective,
2021
- ngBindTemplateDirective,
2022
- ngClassDirective,
2023
- ngClassEvenDirective,
2024
- ngClassOddDirective,
2025
- ngCspDirective,
2026
- ngCloakDirective,
2027
- ngControllerDirective,
2028
- ngFormDirective,
2029
- ngHideDirective,
2030
- ngIfDirective,
2031
- ngIncludeDirective,
2032
- ngIncludeFillContentDirective,
2033
- ngInitDirective,
2034
- ngNonBindableDirective,
2035
- ngPluralizeDirective,
2036
- ngRepeatDirective,
2037
- ngShowDirective,
2038
- ngStyleDirective,
2039
- ngSwitchDirective,
2040
- ngSwitchWhenDirective,
2041
- ngSwitchDefaultDirective,
2042
- ngOptionsDirective,
2043
- ngTranscludeDirective,
2044
- ngModelDirective,
2045
- ngListDirective,
2046
- ngChangeDirective,
2047
- patternDirective,
2048
- patternDirective,
2049
- requiredDirective,
2050
- requiredDirective,
2051
- minlengthDirective,
2052
- minlengthDirective,
2053
- maxlengthDirective,
2054
- maxlengthDirective,
2055
- ngValueDirective,
2056
- ngModelOptionsDirective,
2057
- ngAttributeAliasDirectives,
2058
- ngEventDirectives,
2059
-
2060
- $AnchorScrollProvider,
2061
- $AnimateProvider,
2062
- $BrowserProvider,
2063
- $CacheFactoryProvider,
2064
- $ControllerProvider,
2065
- $DocumentProvider,
2066
- $ExceptionHandlerProvider,
2067
- $FilterProvider,
2068
- $InterpolateProvider,
2069
- $IntervalProvider,
2070
- $HttpProvider,
2071
- $HttpBackendProvider,
2072
- $LocationProvider,
2073
- $LogProvider,
2074
- $ParseProvider,
2075
- $RootScopeProvider,
2076
- $QProvider,
2077
- $$QProvider,
2078
- $$SanitizeUriProvider,
2079
- $SceProvider,
2080
- $SceDelegateProvider,
2081
- $SnifferProvider,
2082
- $TemplateCacheProvider,
2083
- $TemplateRequestProvider,
2084
- $$TestabilityProvider,
2085
- $TimeoutProvider,
2086
- $$RAFProvider,
2087
- $$AsyncCallbackProvider,
2088
- $WindowProvider,
2089
- $$jqLiteProvider
2090
-*/
2091
-
2092
-
2093
-/**
2094
- * @ngdoc object
2095
- * @name angular.version
2096
- * @module ng
2097
- * @description
2098
- * An object that contains information about the current AngularJS version. This object has the
2099
- * following properties:
2100
- *
2101
- * - `full` – `{string}` – Full version string, such as "0.9.18".
2102
- * - `major` – `{number}` – Major version number, such as "0".
2103
- * - `minor` – `{number}` – Minor version number, such as "9".
2104
- * - `dot` – `{number}` – Dot version number, such as "18".
2105
- * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
2106
- */
2107
-var version = {
2108
- full: '1.3.6', // all of these placeholder strings will be replaced by grunt's
2109
- major: 1, // package task
2110
- minor: 3,
2111
- dot: 6,
2112
- codeName: 'robofunky-danceblaster'
2113
-};
2114
-
2115
-
2116
-function publishExternalAPI(angular) {
2117
- extend(angular, {
2118
- 'bootstrap': bootstrap,
2119
- 'copy': copy,
2120
- 'extend': extend,
2121
- 'equals': equals,
2122
- 'element': jqLite,
2123
- 'forEach': forEach,
2124
- 'injector': createInjector,
2125
- 'noop': noop,
2126
- 'bind': bind,
2127
- 'toJson': toJson,
2128
- 'fromJson': fromJson,
2129
- 'identity': identity,
2130
- 'isUndefined': isUndefined,
2131
- 'isDefined': isDefined,
2132
- 'isString': isString,
2133
- 'isFunction': isFunction,
2134
- 'isObject': isObject,
2135
- 'isNumber': isNumber,
2136
- 'isElement': isElement,
2137
- 'isArray': isArray,
2138
- 'version': version,
2139
- 'isDate': isDate,
2140
- 'lowercase': lowercase,
2141
- 'uppercase': uppercase,
2142
- 'callbacks': {counter: 0},
2143
- 'getTestability': getTestability,
2144
- '$$minErr': minErr,
2145
- '$$csp': csp,
2146
- 'reloadWithDebugInfo': reloadWithDebugInfo
2147
- });
2148
-
2149
- angularModule = setupModuleLoader(window);
2150
- try {
2151
- angularModule('ngLocale');
2152
- } catch (e) {
2153
- angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
2154
- }
2155
-
2156
- angularModule('ng', ['ngLocale'], ['$provide',
2157
- function ngModule($provide) {
2158
- // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.
2159
- $provide.provider({
2160
- $$sanitizeUri: $$SanitizeUriProvider
2161
- });
2162
- $provide.provider('$compile', $CompileProvider).
2163
- directive({
2164
- a: htmlAnchorDirective,
2165
- input: inputDirective,
2166
- textarea: inputDirective,
2167
- form: formDirective,
2168
- script: scriptDirective,
2169
- select: selectDirective,
2170
- style: styleDirective,
2171
- option: optionDirective,
2172
- ngBind: ngBindDirective,
2173
- ngBindHtml: ngBindHtmlDirective,
2174
- ngBindTemplate: ngBindTemplateDirective,
2175
- ngClass: ngClassDirective,
2176
- ngClassEven: ngClassEvenDirective,
2177
- ngClassOdd: ngClassOddDirective,
2178
- ngCloak: ngCloakDirective,
2179
- ngController: ngControllerDirective,
2180
- ngForm: ngFormDirective,
2181
- ngHide: ngHideDirective,
2182
- ngIf: ngIfDirective,
2183
- ngInclude: ngIncludeDirective,
2184
- ngInit: ngInitDirective,
2185
- ngNonBindable: ngNonBindableDirective,
2186
- ngPluralize: ngPluralizeDirective,
2187
- ngRepeat: ngRepeatDirective,
2188
- ngShow: ngShowDirective,
2189
- ngStyle: ngStyleDirective,
2190
- ngSwitch: ngSwitchDirective,
2191
- ngSwitchWhen: ngSwitchWhenDirective,
2192
- ngSwitchDefault: ngSwitchDefaultDirective,
2193
- ngOptions: ngOptionsDirective,
2194
- ngTransclude: ngTranscludeDirective,
2195
- ngModel: ngModelDirective,
2196
- ngList: ngListDirective,
2197
- ngChange: ngChangeDirective,
2198
- pattern: patternDirective,
2199
- ngPattern: patternDirective,
2200
- required: requiredDirective,
2201
- ngRequired: requiredDirective,
2202
- minlength: minlengthDirective,
2203
- ngMinlength: minlengthDirective,
2204
- maxlength: maxlengthDirective,
2205
- ngMaxlength: maxlengthDirective,
2206
- ngValue: ngValueDirective,
2207
- ngModelOptions: ngModelOptionsDirective
2208
- }).
2209
- directive({
2210
- ngInclude: ngIncludeFillContentDirective
2211
- }).
2212
- directive(ngAttributeAliasDirectives).
2213
- directive(ngEventDirectives);
2214
- $provide.provider({
2215
- $anchorScroll: $AnchorScrollProvider,
2216
- $animate: $AnimateProvider,
2217
- $browser: $BrowserProvider,
2218
- $cacheFactory: $CacheFactoryProvider,
2219
- $controller: $ControllerProvider,
2220
- $document: $DocumentProvider,
2221
- $exceptionHandler: $ExceptionHandlerProvider,
2222
- $filter: $FilterProvider,
2223
- $interpolate: $InterpolateProvider,
2224
- $interval: $IntervalProvider,
2225
- $http: $HttpProvider,
2226
- $httpBackend: $HttpBackendProvider,
2227
- $location: $LocationProvider,
2228
- $log: $LogProvider,
2229
- $parse: $ParseProvider,
2230
- $rootScope: $RootScopeProvider,
2231
- $q: $QProvider,
2232
- $$q: $$QProvider,
2233
- $sce: $SceProvider,
2234
- $sceDelegate: $SceDelegateProvider,
2235
- $sniffer: $SnifferProvider,
2236
- $templateCache: $TemplateCacheProvider,
2237
- $templateRequest: $TemplateRequestProvider,
2238
- $$testability: $$TestabilityProvider,
2239
- $timeout: $TimeoutProvider,
2240
- $window: $WindowProvider,
2241
- $$rAF: $$RAFProvider,
2242
- $$asyncCallback: $$AsyncCallbackProvider,
2243
- $$jqLite: $$jqLiteProvider
2244
- });
2245
- }
2246
- ]);
2247
-}
2248
-
2249
-/* global JQLitePrototype: true,
2250
- addEventListenerFn: true,
2251
- removeEventListenerFn: true,
2252
- BOOLEAN_ATTR: true,
2253
- ALIASED_ATTR: true,
2254
-*/
2255
-
2256
-//////////////////////////////////
2257
-//JQLite
2258
-//////////////////////////////////
2259
-
2260
-/**
2261
- * @ngdoc function
2262
- * @name angular.element
2263
- * @module ng
2264
- * @kind function
2265
- *
2266
- * @description
2267
- * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
2268
- *
2269
- * If jQuery is available, `angular.element` is an alias for the
2270
- * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`
2271
- * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite."
2272
- *
2273
- * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows
2274
- * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most
2275
- * commonly needed functionality with the goal of having a very small footprint.</div>
2276
- *
2277
- * To use jQuery, simply load it before `DOMContentLoaded` event fired.
2278
- *
2279
- * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or
2280
- * jqLite; they are never raw DOM references.</div>
2281
- *
2282
- * ## Angular's jqLite
2283
- * jqLite provides only the following jQuery methods:
2284
- *
2285
- * - [`addClass()`](http://api.jquery.com/addClass/)
2286
- * - [`after()`](http://api.jquery.com/after/)
2287
- * - [`append()`](http://api.jquery.com/append/)
2288
- * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters
2289
- * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
2290
- * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
2291
- * - [`clone()`](http://api.jquery.com/clone/)
2292
- * - [`contents()`](http://api.jquery.com/contents/)
2293
- * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`
2294
- * - [`data()`](http://api.jquery.com/data/)
2295
- * - [`detach()`](http://api.jquery.com/detach/)
2296
- * - [`empty()`](http://api.jquery.com/empty/)
2297
- * - [`eq()`](http://api.jquery.com/eq/)
2298
- * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
2299
- * - [`hasClass()`](http://api.jquery.com/hasClass/)
2300
- * - [`html()`](http://api.jquery.com/html/)
2301
- * - [`next()`](http://api.jquery.com/next/) - Does not support selectors
2302
- * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
2303
- * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors
2304
- * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors
2305
- * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
2306
- * - [`prepend()`](http://api.jquery.com/prepend/)
2307
- * - [`prop()`](http://api.jquery.com/prop/)
2308
- * - [`ready()`](http://api.jquery.com/ready/)
2309
- * - [`remove()`](http://api.jquery.com/remove/)
2310
- * - [`removeAttr()`](http://api.jquery.com/removeAttr/)
2311
- * - [`removeClass()`](http://api.jquery.com/removeClass/)
2312
- * - [`removeData()`](http://api.jquery.com/removeData/)
2313
- * - [`replaceWith()`](http://api.jquery.com/replaceWith/)
2314
- * - [`text()`](http://api.jquery.com/text/)
2315
- * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
2316
- * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
2317
- * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces
2318
- * - [`val()`](http://api.jquery.com/val/)
2319
- * - [`wrap()`](http://api.jquery.com/wrap/)
2320
- *
2321
- * ## jQuery/jqLite Extras
2322
- * Angular also provides the following additional methods and events to both jQuery and jqLite:
2323
- *
2324
- * ### Events
2325
- * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
2326
- * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM
2327
- * element before it is removed.
2328
- *
2329
- * ### Methods
2330
- * - `controller(name)` - retrieves the controller of the current element or its parent. By default
2331
- * retrieves controller associated with the `ngController` directive. If `name` is provided as
2332
- * camelCase directive name, then the controller for this directive will be retrieved (e.g.
2333
- * `'ngModel'`).
2334
- * - `injector()` - retrieves the injector of the current element or its parent.
2335
- * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
2336
- * element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to
2337
- * be enabled.
2338
- * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
2339
- * current element. This getter should be used only on elements that contain a directive which starts a new isolate
2340
- * scope. Calling `scope()` on this element always returns the original non-isolate scope.
2341
- * Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.
2342
- * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
2343
- * parent element is reached.
2344
- *
2345
- * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
2346
- * @returns {Object} jQuery object.
2347
- */
2348
-
2349
-JQLite.expando = 'ng339';
2350
-
2351
-var jqCache = JQLite.cache = {},
2352
- jqId = 1,
2353
- addEventListenerFn = function(element, type, fn) {
2354
- element.addEventListener(type, fn, false);
2355
- },
2356
- removeEventListenerFn = function(element, type, fn) {
2357
- element.removeEventListener(type, fn, false);
2358
- };
2359
-
2360
-/*
2361
- * !!! This is an undocumented "private" function !!!
2362
- */
2363
-JQLite._data = function(node) {
2364
- //jQuery always returns an object on cache miss
2365
- return this.cache[node[this.expando]] || {};
2366
-};
2367
-
2368
-function jqNextId() { return ++jqId; }
2369
-
2370
-
2371
-var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
2372
-var MOZ_HACK_REGEXP = /^moz([A-Z])/;
2373
-var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
2374
-var jqLiteMinErr = minErr('jqLite');
2375
-
2376
-/**
2377
- * Converts snake_case to camelCase.
2378
- * Also there is special case for Moz prefix starting with upper case letter.
2379
- * @param name Name to normalize
2380
- */
2381
-function camelCase(name) {
2382
- return name.
2383
- replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
2384
- return offset ? letter.toUpperCase() : letter;
2385
- }).
2386
- replace(MOZ_HACK_REGEXP, 'Moz$1');
2387
-}
2388
-
2389
-var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
2390
-var HTML_REGEXP = /<|&#?\w+;/;
2391
-var TAG_NAME_REGEXP = /<([\w:]+)/;
2392
-var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi;
2393
-
2394
-var wrapMap = {
2395
- 'option': [1, '<select multiple="multiple">', '</select>'],
2396
-
2397
- 'thead': [1, '<table>', '</table>'],
2398
- 'col': [2, '<table><colgroup>', '</colgroup></table>'],
2399
- 'tr': [2, '<table><tbody>', '</tbody></table>'],
2400
- 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],
2401
- '_default': [0, "", ""]
2402
-};
2403
-
2404
-wrapMap.optgroup = wrapMap.option;
2405
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
2406
-wrapMap.th = wrapMap.td;
2407
-
2408
-
2409
-function jqLiteIsTextNode(html) {
2410
- return !HTML_REGEXP.test(html);
2411
-}
2412
-
2413
-function jqLiteAcceptsData(node) {
2414
- // The window object can accept data but has no nodeType
2415
- // Otherwise we are only interested in elements (1) and documents (9)
2416
- var nodeType = node.nodeType;
2417
- return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;
2418
-}
2419
-
2420
-function jqLiteBuildFragment(html, context) {
2421
- var tmp, tag, wrap,
2422
- fragment = context.createDocumentFragment(),
2423
- nodes = [], i;
2424
-
2425
- if (jqLiteIsTextNode(html)) {
2426
- // Convert non-html into a text node
2427
- nodes.push(context.createTextNode(html));
2428
- } else {
2429
- // Convert html into DOM nodes
2430
- tmp = tmp || fragment.appendChild(context.createElement("div"));
2431
- tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
2432
- wrap = wrapMap[tag] || wrapMap._default;
2433
- tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2];
2434
-
2435
- // Descend through wrappers to the right content
2436
- i = wrap[0];
2437
- while (i--) {
2438
- tmp = tmp.lastChild;
2439
- }
2440
-
2441
- nodes = concat(nodes, tmp.childNodes);
2442
-
2443
- tmp = fragment.firstChild;
2444
- tmp.textContent = "";
2445
- }
2446
-
2447
- // Remove wrapper from fragment
2448
- fragment.textContent = "";
2449
- fragment.innerHTML = ""; // Clear inner HTML
2450
- forEach(nodes, function(node) {
2451
- fragment.appendChild(node);
2452
- });
2453
-
2454
- return fragment;
2455
-}
2456
-
2457
-function jqLiteParseHTML(html, context) {
2458
- context = context || document;
2459
- var parsed;
2460
-
2461
- if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
2462
- return [context.createElement(parsed[1])];
2463
- }
2464
-
2465
- if ((parsed = jqLiteBuildFragment(html, context))) {
2466
- return parsed.childNodes;
2467
- }
2468
-
2469
- return [];
2470
-}
2471
-
2472
-/////////////////////////////////////////////
2473
-function JQLite(element) {
2474
- if (element instanceof JQLite) {
2475
- return element;
2476
- }
2477
-
2478
- var argIsString;
2479
-
2480
- if (isString(element)) {
2481
- element = trim(element);
2482
- argIsString = true;
2483
- }
2484
- if (!(this instanceof JQLite)) {
2485
- if (argIsString && element.charAt(0) != '<') {
2486
- throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');
2487
- }
2488
- return new JQLite(element);
2489
- }
2490
-
2491
- if (argIsString) {
2492
- jqLiteAddNodes(this, jqLiteParseHTML(element));
2493
- } else {
2494
- jqLiteAddNodes(this, element);
2495
- }
2496
-}
2497
-
2498
-function jqLiteClone(element) {
2499
- return element.cloneNode(true);
2500
-}
2501
-
2502
-function jqLiteDealoc(element, onlyDescendants) {
2503
- if (!onlyDescendants) jqLiteRemoveData(element);
2504
-
2505
- if (element.querySelectorAll) {
2506
- var descendants = element.querySelectorAll('*');
2507
- for (var i = 0, l = descendants.length; i < l; i++) {
2508
- jqLiteRemoveData(descendants[i]);
2509
- }
2510
- }
2511
-}
2512
-
2513
-function jqLiteOff(element, type, fn, unsupported) {
2514
- if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');
2515
-
2516
- var expandoStore = jqLiteExpandoStore(element);
2517
- var events = expandoStore && expandoStore.events;
2518
- var handle = expandoStore && expandoStore.handle;
2519
-
2520
- if (!handle) return; //no listeners registered
2521
-
2522
- if (!type) {
2523
- for (type in events) {
2524
- if (type !== '$destroy') {
2525
- removeEventListenerFn(element, type, handle);
2526
- }
2527
- delete events[type];
2528
- }
2529
- } else {
2530
- forEach(type.split(' '), function(type) {
2531
- if (isDefined(fn)) {
2532
- var listenerFns = events[type];
2533
- arrayRemove(listenerFns || [], fn);
2534
- if (listenerFns && listenerFns.length > 0) {
2535
- return;
2536
- }
2537
- }
2538
-
2539
- removeEventListenerFn(element, type, handle);
2540
- delete events[type];
2541
- });
2542
- }
2543
-}
2544
-
2545
-function jqLiteRemoveData(element, name) {
2546
- var expandoId = element.ng339;
2547
- var expandoStore = expandoId && jqCache[expandoId];
2548
-
2549
- if (expandoStore) {
2550
- if (name) {
2551
- delete expandoStore.data[name];
2552
- return;
2553
- }
2554
-
2555
- if (expandoStore.handle) {
2556
- if (expandoStore.events.$destroy) {
2557
- expandoStore.handle({}, '$destroy');
2558
- }
2559
- jqLiteOff(element);
2560
- }
2561
- delete jqCache[expandoId];
2562
- element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it
2563
- }
2564
-}
2565
-
2566
-
2567
-function jqLiteExpandoStore(element, createIfNecessary) {
2568
- var expandoId = element.ng339,
2569
- expandoStore = expandoId && jqCache[expandoId];
2570
-
2571
- if (createIfNecessary && !expandoStore) {
2572
- element.ng339 = expandoId = jqNextId();
2573
- expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};
2574
- }
2575
-
2576
- return expandoStore;
2577
-}
2578
-
2579
-
2580
-function jqLiteData(element, key, value) {
2581
- if (jqLiteAcceptsData(element)) {
2582
-
2583
- var isSimpleSetter = isDefined(value);
2584
- var isSimpleGetter = !isSimpleSetter && key && !isObject(key);
2585
- var massGetter = !key;
2586
- var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);
2587
- var data = expandoStore && expandoStore.data;
2588
-
2589
- if (isSimpleSetter) { // data('key', value)
2590
- data[key] = value;
2591
- } else {
2592
- if (massGetter) { // data()
2593
- return data;
2594
- } else {
2595
- if (isSimpleGetter) { // data('key')
2596
- // don't force creation of expandoStore if it doesn't exist yet
2597
- return data && data[key];
2598
- } else { // mass-setter: data({key1: val1, key2: val2})
2599
- extend(data, key);
2600
- }
2601
- }
2602
- }
2603
- }
2604
-}
2605
-
2606
-function jqLiteHasClass(element, selector) {
2607
- if (!element.getAttribute) return false;
2608
- return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
2609
- indexOf(" " + selector + " ") > -1);
2610
-}
2611
-
2612
-function jqLiteRemoveClass(element, cssClasses) {
2613
- if (cssClasses && element.setAttribute) {
2614
- forEach(cssClasses.split(' '), function(cssClass) {
2615
- element.setAttribute('class', trim(
2616
- (" " + (element.getAttribute('class') || '') + " ")
2617
- .replace(/[\n\t]/g, " ")
2618
- .replace(" " + trim(cssClass) + " ", " "))
2619
- );
2620
- });
2621
- }
2622
-}
2623
-
2624
-function jqLiteAddClass(element, cssClasses) {
2625
- if (cssClasses && element.setAttribute) {
2626
- var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
2627
- .replace(/[\n\t]/g, " ");
2628
-
2629
- forEach(cssClasses.split(' '), function(cssClass) {
2630
- cssClass = trim(cssClass);
2631
- if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {
2632
- existingClasses += cssClass + ' ';
2633
- }
2634
- });
2635
-
2636
- element.setAttribute('class', trim(existingClasses));
2637
- }
2638
-}
2639
-
2640
-
2641
-function jqLiteAddNodes(root, elements) {
2642
- // THIS CODE IS VERY HOT. Don't make changes without benchmarking.
2643
-
2644
- if (elements) {
2645
-
2646
- // if a Node (the most common case)
2647
- if (elements.nodeType) {
2648
- root[root.length++] = elements;
2649
- } else {
2650
- var length = elements.length;
2651
-
2652
- // if an Array or NodeList and not a Window
2653
- if (typeof length === 'number' && elements.window !== elements) {
2654
- if (length) {
2655
- for (var i = 0; i < length; i++) {
2656
- root[root.length++] = elements[i];
2657
- }
2658
- }
2659
- } else {
2660
- root[root.length++] = elements;
2661
- }
2662
- }
2663
- }
2664
-}
2665
-
2666
-
2667
-function jqLiteController(element, name) {
2668
- return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');
2669
-}
2670
-
2671
-function jqLiteInheritedData(element, name, value) {
2672
- // if element is the document object work with the html element instead
2673
- // this makes $(document).scope() possible
2674
- if (element.nodeType == NODE_TYPE_DOCUMENT) {
2675
- element = element.documentElement;
2676
- }
2677
- var names = isArray(name) ? name : [name];
2678
-
2679
- while (element) {
2680
- for (var i = 0, ii = names.length; i < ii; i++) {
2681
- if ((value = jqLite.data(element, names[i])) !== undefined) return value;
2682
- }
2683
-
2684
- // If dealing with a document fragment node with a host element, and no parent, use the host
2685
- // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM
2686
- // to lookup parent controllers.
2687
- element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);
2688
- }
2689
-}
2690
-
2691
-function jqLiteEmpty(element) {
2692
- jqLiteDealoc(element, true);
2693
- while (element.firstChild) {
2694
- element.removeChild(element.firstChild);
2695
- }
2696
-}
2697
-
2698
-function jqLiteRemove(element, keepData) {
2699
- if (!keepData) jqLiteDealoc(element);
2700
- var parent = element.parentNode;
2701
- if (parent) parent.removeChild(element);
2702
-}
2703
-
2704
-
2705
-function jqLiteDocumentLoaded(action, win) {
2706
- win = win || window;
2707
- if (win.document.readyState === 'complete') {
2708
- // Force the action to be run async for consistent behaviour
2709
- // from the action's point of view
2710
- // i.e. it will definitely not be in a $apply
2711
- win.setTimeout(action);
2712
- } else {
2713
- // No need to unbind this handler as load is only ever called once
2714
- jqLite(win).on('load', action);
2715
- }
2716
-}
2717
-
2718
-//////////////////////////////////////////
2719
-// Functions which are declared directly.
2720
-//////////////////////////////////////////
2721
-var JQLitePrototype = JQLite.prototype = {
2722
- ready: function(fn) {
2723
- var fired = false;
2724
-
2725
- function trigger() {
2726
- if (fired) return;
2727
- fired = true;
2728
- fn();
2729
- }
2730
-
2731
- // check if document is already loaded
2732
- if (document.readyState === 'complete') {
2733
- setTimeout(trigger);
2734
- } else {
2735
- this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
2736
- // we can not use jqLite since we are not done loading and jQuery could be loaded later.
2737
- // jshint -W064
2738
- JQLite(window).on('load', trigger); // fallback to window.onload for others
2739
- // jshint +W064
2740
- }
2741
- },
2742
- toString: function() {
2743
- var value = [];
2744
- forEach(this, function(e) { value.push('' + e);});
2745
- return '[' + value.join(', ') + ']';
2746
- },
2747
-
2748
- eq: function(index) {
2749
- return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);
2750
- },
2751
-
2752
- length: 0,
2753
- push: push,
2754
- sort: [].sort,
2755
- splice: [].splice
2756
-};
2757
-
2758
-//////////////////////////////////////////
2759
-// Functions iterating getter/setters.
2760
-// these functions return self on setter and
2761
-// value on get.
2762
-//////////////////////////////////////////
2763
-var BOOLEAN_ATTR = {};
2764
-forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {
2765
- BOOLEAN_ATTR[lowercase(value)] = value;
2766
-});
2767
-var BOOLEAN_ELEMENTS = {};
2768
-forEach('input,select,option,textarea,button,form,details'.split(','), function(value) {
2769
- BOOLEAN_ELEMENTS[value] = true;
2770
-});
2771
-var ALIASED_ATTR = {
2772
- 'ngMinlength': 'minlength',
2773
- 'ngMaxlength': 'maxlength',
2774
- 'ngMin': 'min',
2775
- 'ngMax': 'max',
2776
- 'ngPattern': 'pattern'
2777
-};
2778
-
2779
-function getBooleanAttrName(element, name) {
2780
- // check dom last since we will most likely fail on name
2781
- var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];
2782
-
2783
- // booleanAttr is here twice to minimize DOM access
2784
- return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;
2785
-}
2786
-
2787
-function getAliasedAttrName(element, name) {
2788
- var nodeName = element.nodeName;
2789
- return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name];
2790
-}
2791
-
2792
-forEach({
2793
- data: jqLiteData,
2794
- removeData: jqLiteRemoveData
2795
-}, function(fn, name) {
2796
- JQLite[name] = fn;
2797
-});
2798
-
2799
-forEach({
2800
- data: jqLiteData,
2801
- inheritedData: jqLiteInheritedData,
2802
-
2803
- scope: function(element) {
2804
- // Can't use jqLiteData here directly so we stay compatible with jQuery!
2805
- return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);
2806
- },
2807
-
2808
- isolateScope: function(element) {
2809
- // Can't use jqLiteData here directly so we stay compatible with jQuery!
2810
- return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');
2811
- },
2812
-
2813
- controller: jqLiteController,
2814
-
2815
- injector: function(element) {
2816
- return jqLiteInheritedData(element, '$injector');
2817
- },
2818
-
2819
- removeAttr: function(element, name) {
2820
- element.removeAttribute(name);
2821
- },
2822
-
2823
- hasClass: jqLiteHasClass,
2824
-
2825
- css: function(element, name, value) {
2826
- name = camelCase(name);
2827
-
2828
- if (isDefined(value)) {
2829
- element.style[name] = value;
2830
- } else {
2831
- return element.style[name];
2832
- }
2833
- },
2834
-
2835
- attr: function(element, name, value) {
2836
- var lowercasedName = lowercase(name);
2837
- if (BOOLEAN_ATTR[lowercasedName]) {
2838
- if (isDefined(value)) {
2839
- if (!!value) {
2840
- element[name] = true;
2841
- element.setAttribute(name, lowercasedName);
2842
- } else {
2843
- element[name] = false;
2844
- element.removeAttribute(lowercasedName);
2845
- }
2846
- } else {
2847
- return (element[name] ||
2848
- (element.attributes.getNamedItem(name) || noop).specified)
2849
- ? lowercasedName
2850
- : undefined;
2851
- }
2852
- } else if (isDefined(value)) {
2853
- element.setAttribute(name, value);
2854
- } else if (element.getAttribute) {
2855
- // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
2856
- // some elements (e.g. Document) don't have get attribute, so return undefined
2857
- var ret = element.getAttribute(name, 2);
2858
- // normalize non-existing attributes to undefined (as jQuery)
2859
- return ret === null ? undefined : ret;
2860
- }
2861
- },
2862
-
2863
- prop: function(element, name, value) {
2864
- if (isDefined(value)) {
2865
- element[name] = value;
2866
- } else {
2867
- return element[name];
2868
- }
2869
- },
2870
-
2871
- text: (function() {
2872
- getText.$dv = '';
2873
- return getText;
2874
-
2875
- function getText(element, value) {
2876
- if (isUndefined(value)) {
2877
- var nodeType = element.nodeType;
2878
- return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';
2879
- }
2880
- element.textContent = value;
2881
- }
2882
- })(),
2883
-
2884
- val: function(element, value) {
2885
- if (isUndefined(value)) {
2886
- if (element.multiple && nodeName_(element) === 'select') {
2887
- var result = [];
2888
- forEach(element.options, function(option) {
2889
- if (option.selected) {
2890
- result.push(option.value || option.text);
2891
- }
2892
- });
2893
- return result.length === 0 ? null : result;
2894
- }
2895
- return element.value;
2896
- }
2897
- element.value = value;
2898
- },
2899
-
2900
- html: function(element, value) {
2901
- if (isUndefined(value)) {
2902
- return element.innerHTML;
2903
- }
2904
- jqLiteDealoc(element, true);
2905
- element.innerHTML = value;
2906
- },
2907
-
2908
- empty: jqLiteEmpty
2909
-}, function(fn, name) {
2910
- /**
2911
- * Properties: writes return selection, reads return first value
2912
- */
2913
- JQLite.prototype[name] = function(arg1, arg2) {
2914
- var i, key;
2915
- var nodeCount = this.length;
2916
-
2917
- // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
2918
- // in a way that survives minification.
2919
- // jqLiteEmpty takes no arguments but is a setter.
2920
- if (fn !== jqLiteEmpty &&
2921
- (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {
2922
- if (isObject(arg1)) {
2923
-
2924
- // we are a write, but the object properties are the key/values
2925
- for (i = 0; i < nodeCount; i++) {
2926
- if (fn === jqLiteData) {
2927
- // data() takes the whole object in jQuery
2928
- fn(this[i], arg1);
2929
- } else {
2930
- for (key in arg1) {
2931
- fn(this[i], key, arg1[key]);
2932
- }
2933
- }
2934
- }
2935
- // return self for chaining
2936
- return this;
2937
- } else {
2938
- // we are a read, so read the first child.
2939
- // TODO: do we still need this?
2940
- var value = fn.$dv;
2941
- // Only if we have $dv do we iterate over all, otherwise it is just the first element.
2942
- var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount;
2943
- for (var j = 0; j < jj; j++) {
2944
- var nodeValue = fn(this[j], arg1, arg2);
2945
- value = value ? value + nodeValue : nodeValue;
2946
- }
2947
- return value;
2948
- }
2949
- } else {
2950
- // we are a write, so apply to all children
2951
- for (i = 0; i < nodeCount; i++) {
2952
- fn(this[i], arg1, arg2);
2953
- }
2954
- // return self for chaining
2955
- return this;
2956
- }
2957
- };
2958
-});
2959
-
2960
-function createEventHandler(element, events) {
2961
- var eventHandler = function(event, type) {
2962
- // jQuery specific api
2963
- event.isDefaultPrevented = function() {
2964
- return event.defaultPrevented;
2965
- };
2966
-
2967
- var eventFns = events[type || event.type];
2968
- var eventFnsLength = eventFns ? eventFns.length : 0;
2969
-
2970
- if (!eventFnsLength) return;
2971
-
2972
- if (isUndefined(event.immediatePropagationStopped)) {
2973
- var originalStopImmediatePropagation = event.stopImmediatePropagation;
2974
- event.stopImmediatePropagation = function() {
2975
- event.immediatePropagationStopped = true;
2976
-
2977
- if (event.stopPropagation) {
2978
- event.stopPropagation();
2979
- }
2980
-
2981
- if (originalStopImmediatePropagation) {
2982
- originalStopImmediatePropagation.call(event);
2983
- }
2984
- };
2985
- }
2986
-
2987
- event.isImmediatePropagationStopped = function() {
2988
- return event.immediatePropagationStopped === true;
2989
- };
2990
-
2991
- // Copy event handlers in case event handlers array is modified during execution.
2992
- if ((eventFnsLength > 1)) {
2993
- eventFns = shallowCopy(eventFns);
2994
- }
2995
-
2996
- for (var i = 0; i < eventFnsLength; i++) {
2997
- if (!event.isImmediatePropagationStopped()) {
2998
- eventFns[i].call(element, event);
2999
- }
3000
- }
3001
- };
3002
-
3003
- // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all
3004
- // events on `element`
3005
- eventHandler.elem = element;
3006
- return eventHandler;
3007
-}
3008
-
3009
-//////////////////////////////////////////
3010
-// Functions iterating traversal.
3011
-// These functions chain results into a single
3012
-// selector.
3013
-//////////////////////////////////////////
3014
-forEach({
3015
- removeData: jqLiteRemoveData,
3016
-
3017
- on: function jqLiteOn(element, type, fn, unsupported) {
3018
- if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');
3019
-
3020
- // Do not add event handlers to non-elements because they will not be cleaned up.
3021
- if (!jqLiteAcceptsData(element)) {
3022
- return;
3023
- }
3024
-
3025
- var expandoStore = jqLiteExpandoStore(element, true);
3026
- var events = expandoStore.events;
3027
- var handle = expandoStore.handle;
3028
-
3029
- if (!handle) {
3030
- handle = expandoStore.handle = createEventHandler(element, events);
3031
- }
3032
-
3033
- // http://jsperf.com/string-indexof-vs-split
3034
- var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];
3035
- var i = types.length;
3036
-
3037
- while (i--) {
3038
- type = types[i];
3039
- var eventFns = events[type];
3040
-
3041
- if (!eventFns) {
3042
- events[type] = [];
3043
-
3044
- if (type === 'mouseenter' || type === 'mouseleave') {
3045
- // Refer to jQuery's implementation of mouseenter & mouseleave
3046
- // Read about mouseenter and mouseleave:
3047
- // http://www.quirksmode.org/js/events_mouse.html#link8
3048
-
3049
- jqLiteOn(element, MOUSE_EVENT_MAP[type], function(event) {
3050
- var target = this, related = event.relatedTarget;
3051
- // For mousenter/leave call the handler if related is outside the target.
3052
- // NB: No relatedTarget if the mouse left/entered the browser window
3053
- if (!related || (related !== target && !target.contains(related))) {
3054
- handle(event, type);
3055
- }
3056
- });
3057
-
3058
- } else {
3059
- if (type !== '$destroy') {
3060
- addEventListenerFn(element, type, handle);
3061
- }
3062
- }
3063
- eventFns = events[type];
3064
- }
3065
- eventFns.push(fn);
3066
- }
3067
- },
3068
-
3069
- off: jqLiteOff,
3070
-
3071
- one: function(element, type, fn) {
3072
- element = jqLite(element);
3073
-
3074
- //add the listener twice so that when it is called
3075
- //you can remove the original function and still be
3076
- //able to call element.off(ev, fn) normally
3077
- element.on(type, function onFn() {
3078
- element.off(type, fn);
3079
- element.off(type, onFn);
3080
- });
3081
- element.on(type, fn);
3082
- },
3083
-
3084
- replaceWith: function(element, replaceNode) {
3085
- var index, parent = element.parentNode;
3086
- jqLiteDealoc(element);
3087
- forEach(new JQLite(replaceNode), function(node) {
3088
- if (index) {
3089
- parent.insertBefore(node, index.nextSibling);
3090
- } else {
3091
- parent.replaceChild(node, element);
3092
- }
3093
- index = node;
3094
- });
3095
- },
3096
-
3097
- children: function(element) {
3098
- var children = [];
3099
- forEach(element.childNodes, function(element) {
3100
- if (element.nodeType === NODE_TYPE_ELEMENT)
3101
- children.push(element);
3102
- });
3103
- return children;
3104
- },
3105
-
3106
- contents: function(element) {
3107
- return element.contentDocument || element.childNodes || [];
3108
- },
3109
-
3110
- append: function(element, node) {
3111
- var nodeType = element.nodeType;
3112
- if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;
3113
-
3114
- node = new JQLite(node);
3115
-
3116
- for (var i = 0, ii = node.length; i < ii; i++) {
3117
- var child = node[i];
3118
- element.appendChild(child);
3119
- }
3120
- },
3121
-
3122
- prepend: function(element, node) {
3123
- if (element.nodeType === NODE_TYPE_ELEMENT) {
3124
- var index = element.firstChild;
3125
- forEach(new JQLite(node), function(child) {
3126
- element.insertBefore(child, index);
3127
- });
3128
- }
3129
- },
3130
-
3131
- wrap: function(element, wrapNode) {
3132
- wrapNode = jqLite(wrapNode).eq(0).clone()[0];
3133
- var parent = element.parentNode;
3134
- if (parent) {
3135
- parent.replaceChild(wrapNode, element);
3136
- }
3137
- wrapNode.appendChild(element);
3138
- },
3139
-
3140
- remove: jqLiteRemove,
3141
-
3142
- detach: function(element) {
3143
- jqLiteRemove(element, true);
3144
- },
3145
-
3146
- after: function(element, newElement) {
3147
- var index = element, parent = element.parentNode;
3148
- newElement = new JQLite(newElement);
3149
-
3150
- for (var i = 0, ii = newElement.length; i < ii; i++) {
3151
- var node = newElement[i];
3152
- parent.insertBefore(node, index.nextSibling);
3153
- index = node;
3154
- }
3155
- },
3156
-
3157
- addClass: jqLiteAddClass,
3158
- removeClass: jqLiteRemoveClass,
3159
-
3160
- toggleClass: function(element, selector, condition) {
3161
- if (selector) {
3162
- forEach(selector.split(' '), function(className) {
3163
- var classCondition = condition;
3164
- if (isUndefined(classCondition)) {
3165
- classCondition = !jqLiteHasClass(element, className);
3166
- }
3167
- (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);
3168
- });
3169
- }
3170
- },
3171
-
3172
- parent: function(element) {
3173
- var parent = element.parentNode;
3174
- return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;
3175
- },
3176
-
3177
- next: function(element) {
3178
- return element.nextElementSibling;
3179
- },
3180
-
3181
- find: function(element, selector) {
3182
- if (element.getElementsByTagName) {
3183
- return element.getElementsByTagName(selector);
3184
- } else {
3185
- return [];
3186
- }
3187
- },
3188
-
3189
- clone: jqLiteClone,
3190
-
3191
- triggerHandler: function(element, event, extraParameters) {
3192
-
3193
- var dummyEvent, eventFnsCopy, handlerArgs;
3194
- var eventName = event.type || event;
3195
- var expandoStore = jqLiteExpandoStore(element);
3196
- var events = expandoStore && expandoStore.events;
3197
- var eventFns = events && events[eventName];
3198
-
3199
- if (eventFns) {
3200
- // Create a dummy event to pass to the handlers
3201
- dummyEvent = {
3202
- preventDefault: function() { this.defaultPrevented = true; },
3203
- isDefaultPrevented: function() { return this.defaultPrevented === true; },
3204
- stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },
3205
- isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },
3206
- stopPropagation: noop,
3207
- type: eventName,
3208
- target: element
3209
- };
3210
-
3211
- // If a custom event was provided then extend our dummy event with it
3212
- if (event.type) {
3213
- dummyEvent = extend(dummyEvent, event);
3214
- }
3215
-
3216
- // Copy event handlers in case event handlers array is modified during execution.
3217
- eventFnsCopy = shallowCopy(eventFns);
3218
- handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];
3219
-
3220
- forEach(eventFnsCopy, function(fn) {
3221
- if (!dummyEvent.isImmediatePropagationStopped()) {
3222
- fn.apply(element, handlerArgs);
3223
- }
3224
- });
3225
- }
3226
- }
3227
-}, function(fn, name) {
3228
- /**
3229
- * chaining functions
3230
- */
3231
- JQLite.prototype[name] = function(arg1, arg2, arg3) {
3232
- var value;
3233
-
3234
- for (var i = 0, ii = this.length; i < ii; i++) {
3235
- if (isUndefined(value)) {
3236
- value = fn(this[i], arg1, arg2, arg3);
3237
- if (isDefined(value)) {
3238
- // any function which returns a value needs to be wrapped
3239
- value = jqLite(value);
3240
- }
3241
- } else {
3242
- jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));
3243
- }
3244
- }
3245
- return isDefined(value) ? value : this;
3246
- };
3247
-
3248
- // bind legacy bind/unbind to on/off
3249
- JQLite.prototype.bind = JQLite.prototype.on;
3250
- JQLite.prototype.unbind = JQLite.prototype.off;
3251
-});
3252
-
3253
-
3254
-// Provider for private $$jqLite service
3255
-function $$jqLiteProvider() {
3256
- this.$get = function $$jqLite() {
3257
- return extend(JQLite, {
3258
- hasClass: function(node, classes) {
3259
- if (node.attr) node = node[0];
3260
- return jqLiteHasClass(node, classes);
3261
- },
3262
- addClass: function(node, classes) {
3263
- if (node.attr) node = node[0];
3264
- return jqLiteAddClass(node, classes);
3265
- },
3266
- removeClass: function(node, classes) {
3267
- if (node.attr) node = node[0];
3268
- return jqLiteRemoveClass(node, classes);
3269
- }
3270
- });
3271
- };
3272
-}
3273
-
3274
-/**
3275
- * Computes a hash of an 'obj'.
3276
- * Hash of a:
3277
- * string is string
3278
- * number is number as string
3279
- * object is either result of calling $$hashKey function on the object or uniquely generated id,
3280
- * that is also assigned to the $$hashKey property of the object.
3281
- *
3282
- * @param obj
3283
- * @returns {string} hash string such that the same input will have the same hash string.
3284
- * The resulting string key is in 'type:hashKey' format.
3285
- */
3286
-function hashKey(obj, nextUidFn) {
3287
- var key = obj && obj.$$hashKey;
3288
-
3289
- if (key) {
3290
- if (typeof key === 'function') {
3291
- key = obj.$$hashKey();
3292
- }
3293
- return key;
3294
- }
3295
-
3296
- var objType = typeof obj;
3297
- if (objType == 'function' || (objType == 'object' && obj !== null)) {
3298
- key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();
3299
- } else {
3300
- key = objType + ':' + obj;
3301
- }
3302
-
3303
- return key;
3304
-}
3305
-
3306
-/**
3307
- * HashMap which can use objects as keys
3308
- */
3309
-function HashMap(array, isolatedUid) {
3310
- if (isolatedUid) {
3311
- var uid = 0;
3312
- this.nextUid = function() {
3313
- return ++uid;
3314
- };
3315
- }
3316
- forEach(array, this.put, this);
3317
-}
3318
-HashMap.prototype = {
3319
- /**
3320
- * Store key value pair
3321
- * @param key key to store can be any type
3322
- * @param value value to store can be any type
3323
- */
3324
- put: function(key, value) {
3325
- this[hashKey(key, this.nextUid)] = value;
3326
- },
3327
-
3328
- /**
3329
- * @param key
3330
- * @returns {Object} the value for the key
3331
- */
3332
- get: function(key) {
3333
- return this[hashKey(key, this.nextUid)];
3334
- },
3335
-
3336
- /**
3337
- * Remove the key/value pair
3338
- * @param key
3339
- */
3340
- remove: function(key) {
3341
- var value = this[key = hashKey(key, this.nextUid)];
3342
- delete this[key];
3343
- return value;
3344
- }
3345
-};
3346
-
3347
-/**
3348
- * @ngdoc function
3349
- * @module ng
3350
- * @name angular.injector
3351
- * @kind function
3352
- *
3353
- * @description
3354
- * Creates an injector object that can be used for retrieving services as well as for
3355
- * dependency injection (see {@link guide/di dependency injection}).
3356
- *
3357
- * @param {Array.<string|Function>} modules A list of module functions or their aliases. See
3358
- * {@link angular.module}. The `ng` module must be explicitly added.
3359
- * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which
3360
- * disallows argument name annotation inference.
3361
- * @returns {injector} Injector object. See {@link auto.$injector $injector}.
3362
- *
3363
- * @example
3364
- * Typical usage
3365
- * ```js
3366
- * // create an injector
3367
- * var $injector = angular.injector(['ng']);
3368
- *
3369
- * // use the injector to kick off your application
3370
- * // use the type inference to auto inject arguments, or use implicit injection
3371
- * $injector.invoke(function($rootScope, $compile, $document) {
3372
- * $compile($document)($rootScope);
3373
- * $rootScope.$digest();
3374
- * });
3375
- * ```
3376
- *
3377
- * Sometimes you want to get access to the injector of a currently running Angular app
3378
- * from outside Angular. Perhaps, you want to inject and compile some markup after the
3379
- * application has been bootstrapped. You can do this using the extra `injector()` added
3380
- * to JQuery/jqLite elements. See {@link angular.element}.
3381
- *
3382
- * *This is fairly rare but could be the case if a third party library is injecting the
3383
- * markup.*
3384
- *
3385
- * In the following example a new block of HTML containing a `ng-controller`
3386
- * directive is added to the end of the document body by JQuery. We then compile and link
3387
- * it into the current AngularJS scope.
3388
- *
3389
- * ```js
3390
- * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>');
3391
- * $(document.body).append($div);
3392
- *
3393
- * angular.element(document).injector().invoke(function($compile) {
3394
- * var scope = angular.element($div).scope();
3395
- * $compile($div)(scope);
3396
- * });
3397
- * ```
3398
- */
3399
-
3400
-
3401
-/**
3402
- * @ngdoc module
3403
- * @name auto
3404
- * @description
3405
- *
3406
- * Implicit module which gets automatically added to each {@link auto.$injector $injector}.
3407
- */
3408
-
3409
-var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
3410
-var FN_ARG_SPLIT = /,/;
3411
-var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
3412
-var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
3413
-var $injectorMinErr = minErr('$injector');
3414
-
3415
-function anonFn(fn) {
3416
- // For anonymous functions, showing at the very least the function signature can help in
3417
- // debugging.
3418
- var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
3419
- args = fnText.match(FN_ARGS);
3420
- if (args) {
3421
- return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')';
3422
- }
3423
- return 'fn';
3424
-}
3425
-
3426
-function annotate(fn, strictDi, name) {
3427
- var $inject,
3428
- fnText,
3429
- argDecl,
3430
- last;
3431
-
3432
- if (typeof fn === 'function') {
3433
- if (!($inject = fn.$inject)) {
3434
- $inject = [];
3435
- if (fn.length) {
3436
- if (strictDi) {
3437
- if (!isString(name) || !name) {
3438
- name = fn.name || anonFn(fn);
3439
- }
3440
- throw $injectorMinErr('strictdi',
3441
- '{0} is not using explicit annotation and cannot be invoked in strict mode', name);
3442
- }
3443
- fnText = fn.toString().replace(STRIP_COMMENTS, '');
3444
- argDecl = fnText.match(FN_ARGS);
3445
- forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
3446
- arg.replace(FN_ARG, function(all, underscore, name) {
3447
- $inject.push(name);
3448
- });
3449
- });
3450
- }
3451
- fn.$inject = $inject;
3452
- }
3453
- } else if (isArray(fn)) {
3454
- last = fn.length - 1;
3455
- assertArgFn(fn[last], 'fn');
3456
- $inject = fn.slice(0, last);
3457
- } else {
3458
- assertArgFn(fn, 'fn', true);
3459
- }
3460
- return $inject;
3461
-}
3462
-
3463
-///////////////////////////////////////
3464
-
3465
-/**
3466
- * @ngdoc service
3467
- * @name $injector
3468
- *
3469
- * @description
3470
- *
3471
- * `$injector` is used to retrieve object instances as defined by
3472
- * {@link auto.$provide provider}, instantiate types, invoke methods,
3473
- * and load modules.
3474
- *
3475
- * The following always holds true:
3476
- *
3477
- * ```js
3478
- * var $injector = angular.injector();
3479
- * expect($injector.get('$injector')).toBe($injector);
3480
- * expect($injector.invoke(function($injector) {
3481
- * return $injector;
3482
- * })).toBe($injector);
3483
- * ```
3484
- *
3485
- * # Injection Function Annotation
3486
- *
3487
- * JavaScript does not have annotations, and annotations are needed for dependency injection. The
3488
- * following are all valid ways of annotating function with injection arguments and are equivalent.
3489
- *
3490
- * ```js
3491
- * // inferred (only works if code not minified/obfuscated)
3492
- * $injector.invoke(function(serviceA){});
3493
- *
3494
- * // annotated
3495
- * function explicit(serviceA) {};
3496
- * explicit.$inject = ['serviceA'];
3497
- * $injector.invoke(explicit);
3498
- *
3499
- * // inline
3500
- * $injector.invoke(['serviceA', function(serviceA){}]);
3501
- * ```
3502
- *
3503
- * ## Inference
3504
- *
3505
- * In JavaScript calling `toString()` on a function returns the function definition. The definition
3506
- * can then be parsed and the function arguments can be extracted. This method of discovering
3507
- * annotations is disallowed when the injector is in strict mode.
3508
- * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the
3509
- * argument names.
3510
- *
3511
- * ## `$inject` Annotation
3512
- * By adding an `$inject` property onto a function the injection parameters can be specified.
3513
- *
3514
- * ## Inline
3515
- * As an array of injection names, where the last item in the array is the function to call.
3516
- */
3517
-
3518
-/**
3519
- * @ngdoc method
3520
- * @name $injector#get
3521
- *
3522
- * @description
3523
- * Return an instance of the service.
3524
- *
3525
- * @param {string} name The name of the instance to retrieve.
3526
- * @param {string} caller An optional string to provide the origin of the function call for error messages.
3527
- * @return {*} The instance.
3528
- */
3529
-
3530
-/**
3531
- * @ngdoc method
3532
- * @name $injector#invoke
3533
- *
3534
- * @description
3535
- * Invoke the method and supply the method arguments from the `$injector`.
3536
- *
3537
- * @param {!Function} fn The function to invoke. Function parameters are injected according to the
3538
- * {@link guide/di $inject Annotation} rules.
3539
- * @param {Object=} self The `this` for the invoked method.
3540
- * @param {Object=} locals Optional object. If preset then any argument names are read from this
3541
- * object first, before the `$injector` is consulted.
3542
- * @returns {*} the value returned by the invoked `fn` function.
3543
- */
3544
-
3545
-/**
3546
- * @ngdoc method
3547
- * @name $injector#has
3548
- *
3549
- * @description
3550
- * Allows the user to query if the particular service exists.
3551
- *
3552
- * @param {string} name Name of the service to query.
3553
- * @returns {boolean} `true` if injector has given service.
3554
- */
3555
-
3556
-/**
3557
- * @ngdoc method
3558
- * @name $injector#instantiate
3559
- * @description
3560
- * Create a new instance of JS type. The method takes a constructor function, invokes the new
3561
- * operator, and supplies all of the arguments to the constructor function as specified by the
3562
- * constructor annotation.
3563
- *
3564
- * @param {Function} Type Annotated constructor function.
3565
- * @param {Object=} locals Optional object. If preset then any argument names are read from this
3566
- * object first, before the `$injector` is consulted.
3567
- * @returns {Object} new instance of `Type`.
3568
- */
3569
-
3570
-/**
3571
- * @ngdoc method
3572
- * @name $injector#annotate
3573
- *
3574
- * @description
3575
- * Returns an array of service names which the function is requesting for injection. This API is
3576
- * used by the injector to determine which services need to be injected into the function when the
3577
- * function is invoked. There are three ways in which the function can be annotated with the needed
3578
- * dependencies.
3579
- *
3580
- * # Argument names
3581
- *
3582
- * The simplest form is to extract the dependencies from the arguments of the function. This is done
3583
- * by converting the function into a string using `toString()` method and extracting the argument
3584
- * names.
3585
- * ```js
3586
- * // Given
3587
- * function MyController($scope, $route) {
3588
- * // ...
3589
- * }
3590
- *
3591
- * // Then
3592
- * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
3593
- * ```
3594
- *
3595
- * You can disallow this method by using strict injection mode.
3596
- *
3597
- * This method does not work with code minification / obfuscation. For this reason the following
3598
- * annotation strategies are supported.
3599
- *
3600
- * # The `$inject` property
3601
- *
3602
- * If a function has an `$inject` property and its value is an array of strings, then the strings
3603
- * represent names of services to be injected into the function.
3604
- * ```js
3605
- * // Given
3606
- * var MyController = function(obfuscatedScope, obfuscatedRoute) {
3607
- * // ...
3608
- * }
3609
- * // Define function dependencies
3610
- * MyController['$inject'] = ['$scope', '$route'];
3611
- *
3612
- * // Then
3613
- * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
3614
- * ```
3615
- *
3616
- * # The array notation
3617
- *
3618
- * It is often desirable to inline Injected functions and that's when setting the `$inject` property
3619
- * is very inconvenient. In these situations using the array notation to specify the dependencies in
3620
- * a way that survives minification is a better choice:
3621
- *
3622
- * ```js
3623
- * // We wish to write this (not minification / obfuscation safe)
3624
- * injector.invoke(function($compile, $rootScope) {
3625
- * // ...
3626
- * });
3627
- *
3628
- * // We are forced to write break inlining
3629
- * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
3630
- * // ...
3631
- * };
3632
- * tmpFn.$inject = ['$compile', '$rootScope'];
3633
- * injector.invoke(tmpFn);
3634
- *
3635
- * // To better support inline function the inline annotation is supported
3636
- * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
3637
- * // ...
3638
- * }]);
3639
- *
3640
- * // Therefore
3641
- * expect(injector.annotate(
3642
- * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
3643
- * ).toEqual(['$compile', '$rootScope']);
3644
- * ```
3645
- *
3646
- * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to
3647
- * be retrieved as described above.
3648
- *
3649
- * @param {boolean=} [strictDi=false] Disallow argument name annotation inference.
3650
- *
3651
- * @returns {Array.<string>} The names of the services which the function requires.
3652
- */
3653
-
3654
-
3655
-
3656
-
3657
-/**
3658
- * @ngdoc service
3659
- * @name $provide
3660
- *
3661
- * @description
3662
- *
3663
- * The {@link auto.$provide $provide} service has a number of methods for registering components
3664
- * with the {@link auto.$injector $injector}. Many of these functions are also exposed on
3665
- * {@link angular.Module}.
3666
- *
3667
- * An Angular **service** is a singleton object created by a **service factory**. These **service
3668
- * factories** are functions which, in turn, are created by a **service provider**.
3669
- * The **service providers** are constructor functions. When instantiated they must contain a
3670
- * property called `$get`, which holds the **service factory** function.
3671
- *
3672
- * When you request a service, the {@link auto.$injector $injector} is responsible for finding the
3673
- * correct **service provider**, instantiating it and then calling its `$get` **service factory**
3674
- * function to get the instance of the **service**.
3675
- *
3676
- * Often services have no configuration options and there is no need to add methods to the service
3677
- * provider. The provider will be no more than a constructor function with a `$get` property. For
3678
- * these cases the {@link auto.$provide $provide} service has additional helper methods to register
3679
- * services without specifying a provider.
3680
- *
3681
- * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the
3682
- * {@link auto.$injector $injector}
3683
- * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by
3684
- * providers and services.
3685
- * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by
3686
- * services, not providers.
3687
- * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,
3688
- * that will be wrapped in a **service provider** object, whose `$get` property will contain the
3689
- * given factory function.
3690
- * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`
3691
- * that will be wrapped in a **service provider** object, whose `$get` property will instantiate
3692
- * a new object using the given constructor function.
3693
- *
3694
- * See the individual methods for more information and examples.
3695
- */
3696
-
3697
-/**
3698
- * @ngdoc method
3699
- * @name $provide#provider
3700
- * @description
3701
- *
3702
- * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions
3703
- * are constructor functions, whose instances are responsible for "providing" a factory for a
3704
- * service.
3705
- *
3706
- * Service provider names start with the name of the service they provide followed by `Provider`.
3707
- * For example, the {@link ng.$log $log} service has a provider called
3708
- * {@link ng.$logProvider $logProvider}.
3709
- *
3710
- * Service provider objects can have additional methods which allow configuration of the provider
3711
- * and its service. Importantly, you can configure what kind of service is created by the `$get`
3712
- * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a
3713
- * method {@link ng.$logProvider#debugEnabled debugEnabled}
3714
- * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the
3715
- * console or not.
3716
- *
3717
- * @param {string} name The name of the instance. NOTE: the provider will be available under `name +
3718
- 'Provider'` key.
3719
- * @param {(Object|function())} provider If the provider is:
3720
- *
3721
- * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
3722
- * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.
3723
- * - `Constructor`: a new instance of the provider will be created using
3724
- * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.
3725
- *
3726
- * @returns {Object} registered provider instance
3727
-
3728
- * @example
3729
- *
3730
- * The following example shows how to create a simple event tracking service and register it using
3731
- * {@link auto.$provide#provider $provide.provider()}.
3732
- *
3733
- * ```js
3734
- * // Define the eventTracker provider
3735
- * function EventTrackerProvider() {
3736
- * var trackingUrl = '/track';
3737
- *
3738
- * // A provider method for configuring where the tracked events should been saved
3739
- * this.setTrackingUrl = function(url) {
3740
- * trackingUrl = url;
3741
- * };
3742
- *
3743
- * // The service factory function
3744
- * this.$get = ['$http', function($http) {
3745
- * var trackedEvents = {};
3746
- * return {
3747
- * // Call this to track an event
3748
- * event: function(event) {
3749
- * var count = trackedEvents[event] || 0;
3750
- * count += 1;
3751
- * trackedEvents[event] = count;
3752
- * return count;
3753
- * },
3754
- * // Call this to save the tracked events to the trackingUrl
3755
- * save: function() {
3756
- * $http.post(trackingUrl, trackedEvents);
3757
- * }
3758
- * };
3759
- * }];
3760
- * }
3761
- *
3762
- * describe('eventTracker', function() {
3763
- * var postSpy;
3764
- *
3765
- * beforeEach(module(function($provide) {
3766
- * // Register the eventTracker provider
3767
- * $provide.provider('eventTracker', EventTrackerProvider);
3768
- * }));
3769
- *
3770
- * beforeEach(module(function(eventTrackerProvider) {
3771
- * // Configure eventTracker provider
3772
- * eventTrackerProvider.setTrackingUrl('/custom-track');
3773
- * }));
3774
- *
3775
- * it('tracks events', inject(function(eventTracker) {
3776
- * expect(eventTracker.event('login')).toEqual(1);
3777
- * expect(eventTracker.event('login')).toEqual(2);
3778
- * }));
3779
- *
3780
- * it('saves to the tracking url', inject(function(eventTracker, $http) {
3781
- * postSpy = spyOn($http, 'post');
3782
- * eventTracker.event('login');
3783
- * eventTracker.save();
3784
- * expect(postSpy).toHaveBeenCalled();
3785
- * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');
3786
- * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');
3787
- * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });
3788
- * }));
3789
- * });
3790
- * ```
3791
- */
3792
-
3793
-/**
3794
- * @ngdoc method
3795
- * @name $provide#factory
3796
- * @description
3797
- *
3798
- * Register a **service factory**, which will be called to return the service instance.
3799
- * This is short for registering a service where its provider consists of only a `$get` property,
3800
- * which is the given service factory function.
3801
- * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to
3802
- * configure your service in a provider.
3803
- *
3804
- * @param {string} name The name of the instance.
3805
- * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand
3806
- * for `$provide.provider(name, {$get: $getFn})`.
3807
- * @returns {Object} registered provider instance
3808
- *
3809
- * @example
3810
- * Here is an example of registering a service
3811
- * ```js
3812
- * $provide.factory('ping', ['$http', function($http) {
3813
- * return function ping() {
3814
- * return $http.send('/ping');
3815
- * };
3816
- * }]);
3817
- * ```
3818
- * You would then inject and use this service like this:
3819
- * ```js
3820
- * someModule.controller('Ctrl', ['ping', function(ping) {
3821
- * ping();
3822
- * }]);
3823
- * ```
3824
- */
3825
-
3826
-
3827
-/**
3828
- * @ngdoc method
3829
- * @name $provide#service
3830
- * @description
3831
- *
3832
- * Register a **service constructor**, which will be invoked with `new` to create the service
3833
- * instance.
3834
- * This is short for registering a service where its provider's `$get` property is the service
3835
- * constructor function that will be used to instantiate the service instance.
3836
- *
3837
- * You should use {@link auto.$provide#service $provide.service(class)} if you define your service
3838
- * as a type/class.
3839
- *
3840
- * @param {string} name The name of the instance.
3841
- * @param {Function} constructor A class (constructor function) that will be instantiated.
3842
- * @returns {Object} registered provider instance
3843
- *
3844
- * @example
3845
- * Here is an example of registering a service using
3846
- * {@link auto.$provide#service $provide.service(class)}.
3847
- * ```js
3848
- * var Ping = function($http) {
3849
- * this.$http = $http;
3850
- * };
3851
- *
3852
- * Ping.$inject = ['$http'];
3853
- *
3854
- * Ping.prototype.send = function() {
3855
- * return this.$http.get('/ping');
3856
- * };
3857
- * $provide.service('ping', Ping);
3858
- * ```
3859
- * You would then inject and use this service like this:
3860
- * ```js
3861
- * someModule.controller('Ctrl', ['ping', function(ping) {
3862
- * ping.send();
3863
- * }]);
3864
- * ```
3865
- */
3866
-
3867
-
3868
-/**
3869
- * @ngdoc method
3870
- * @name $provide#value
3871
- * @description
3872
- *
3873
- * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a
3874
- * number, an array, an object or a function. This is short for registering a service where its
3875
- * provider's `$get` property is a factory function that takes no arguments and returns the **value
3876
- * service**.
3877
- *
3878
- * Value services are similar to constant services, except that they cannot be injected into a
3879
- * module configuration function (see {@link angular.Module#config}) but they can be overridden by
3880
- * an Angular
3881
- * {@link auto.$provide#decorator decorator}.
3882
- *
3883
- * @param {string} name The name of the instance.
3884
- * @param {*} value The value.
3885
- * @returns {Object} registered provider instance
3886
- *
3887
- * @example
3888
- * Here are some examples of creating value services.
3889
- * ```js
3890
- * $provide.value('ADMIN_USER', 'admin');
3891
- *
3892
- * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
3893
- *
3894
- * $provide.value('halfOf', function(value) {
3895
- * return value / 2;
3896
- * });
3897
- * ```
3898
- */
3899
-
3900
-
3901
-/**
3902
- * @ngdoc method
3903
- * @name $provide#constant
3904
- * @description
3905
- *
3906
- * Register a **constant service**, such as a string, a number, an array, an object or a function,
3907
- * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be
3908
- * injected into a module configuration function (see {@link angular.Module#config}) and it cannot
3909
- * be overridden by an Angular {@link auto.$provide#decorator decorator}.
3910
- *
3911
- * @param {string} name The name of the constant.
3912
- * @param {*} value The constant value.
3913
- * @returns {Object} registered instance
3914
- *
3915
- * @example
3916
- * Here a some examples of creating constants:
3917
- * ```js
3918
- * $provide.constant('SHARD_HEIGHT', 306);
3919
- *
3920
- * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);
3921
- *
3922
- * $provide.constant('double', function(value) {
3923
- * return value * 2;
3924
- * });
3925
- * ```
3926
- */
3927
-
3928
-
3929
-/**
3930
- * @ngdoc method
3931
- * @name $provide#decorator
3932
- * @description
3933
- *
3934
- * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator
3935
- * intercepts the creation of a service, allowing it to override or modify the behaviour of the
3936
- * service. The object returned by the decorator may be the original service, or a new service
3937
- * object which replaces or wraps and delegates to the original service.
3938
- *
3939
- * @param {string} name The name of the service to decorate.
3940
- * @param {function()} decorator This function will be invoked when the service needs to be
3941
- * instantiated and should return the decorated service instance. The function is called using
3942
- * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
3943
- * Local injection arguments:
3944
- *
3945
- * * `$delegate` - The original service instance, which can be monkey patched, configured,
3946
- * decorated or delegated to.
3947
- *
3948
- * @example
3949
- * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting
3950
- * calls to {@link ng.$log#error $log.warn()}.
3951
- * ```js
3952
- * $provide.decorator('$log', ['$delegate', function($delegate) {
3953
- * $delegate.warn = $delegate.error;
3954
- * return $delegate;
3955
- * }]);
3956
- * ```
3957
- */
3958
-
3959
-
3960
-function createInjector(modulesToLoad, strictDi) {
3961
- strictDi = (strictDi === true);
3962
- var INSTANTIATING = {},
3963
- providerSuffix = 'Provider',
3964
- path = [],
3965
- loadedModules = new HashMap([], true),
3966
- providerCache = {
3967
- $provide: {
3968
- provider: supportObject(provider),
3969
- factory: supportObject(factory),
3970
- service: supportObject(service),
3971
- value: supportObject(value),
3972
- constant: supportObject(constant),
3973
- decorator: decorator
3974
- }
3975
- },
3976
- providerInjector = (providerCache.$injector =
3977
- createInternalInjector(providerCache, function(serviceName, caller) {
3978
- if (angular.isString(caller)) {
3979
- path.push(caller);
3980
- }
3981
- throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
3982
- })),
3983
- instanceCache = {},
3984
- instanceInjector = (instanceCache.$injector =
3985
- createInternalInjector(instanceCache, function(serviceName, caller) {
3986
- var provider = providerInjector.get(serviceName + providerSuffix, caller);
3987
- return instanceInjector.invoke(provider.$get, provider, undefined, serviceName);
3988
- }));
3989
-
3990
-
3991
- forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });
3992
-
3993
- return instanceInjector;
3994
-
3995
- ////////////////////////////////////
3996
- // $provider
3997
- ////////////////////////////////////
3998
-
3999
- function supportObject(delegate) {
4000
- return function(key, value) {
4001
- if (isObject(key)) {
4002
- forEach(key, reverseParams(delegate));
4003
- } else {
4004
- return delegate(key, value);
4005
- }
4006
- };
4007
- }
4008
-
4009
- function provider(name, provider_) {
4010
- assertNotHasOwnProperty(name, 'service');
4011
- if (isFunction(provider_) || isArray(provider_)) {
4012
- provider_ = providerInjector.instantiate(provider_);
4013
- }
4014
- if (!provider_.$get) {
4015
- throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
4016
- }
4017
- return providerCache[name + providerSuffix] = provider_;
4018
- }
4019
-
4020
- function enforceReturnValue(name, factory) {
4021
- return function enforcedReturnValue() {
4022
- var result = instanceInjector.invoke(factory, this);
4023
- if (isUndefined(result)) {
4024
- throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name);
4025
- }
4026
- return result;
4027
- };
4028
- }
4029
-
4030
- function factory(name, factoryFn, enforce) {
4031
- return provider(name, {
4032
- $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
4033
- });
4034
- }
4035
-
4036
- function service(name, constructor) {
4037
- return factory(name, ['$injector', function($injector) {
4038
- return $injector.instantiate(constructor);
4039
- }]);
4040
- }
4041
-
4042
- function value(name, val) { return factory(name, valueFn(val), false); }
4043
-
4044
- function constant(name, value) {
4045
- assertNotHasOwnProperty(name, 'constant');
4046
- providerCache[name] = value;
4047
- instanceCache[name] = value;
4048
- }
4049
-
4050
- function decorator(serviceName, decorFn) {
4051
- var origProvider = providerInjector.get(serviceName + providerSuffix),
4052
- orig$get = origProvider.$get;
4053
-
4054
- origProvider.$get = function() {
4055
- var origInstance = instanceInjector.invoke(orig$get, origProvider);
4056
- return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});
4057
- };
4058
- }
4059
-
4060
- ////////////////////////////////////
4061
- // Module Loading
4062
- ////////////////////////////////////
4063
- function loadModules(modulesToLoad) {
4064
- var runBlocks = [], moduleFn;
4065
- forEach(modulesToLoad, function(module) {
4066
- if (loadedModules.get(module)) return;
4067
- loadedModules.put(module, true);
4068
-
4069
- function runInvokeQueue(queue) {
4070
- var i, ii;
4071
- for (i = 0, ii = queue.length; i < ii; i++) {
4072
- var invokeArgs = queue[i],
4073
- provider = providerInjector.get(invokeArgs[0]);
4074
-
4075
- provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
4076
- }
4077
- }
4078
-
4079
- try {
4080
- if (isString(module)) {
4081
- moduleFn = angularModule(module);
4082
- runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
4083
- runInvokeQueue(moduleFn._invokeQueue);
4084
- runInvokeQueue(moduleFn._configBlocks);
4085
- } else if (isFunction(module)) {
4086
- runBlocks.push(providerInjector.invoke(module));
4087
- } else if (isArray(module)) {
4088
- runBlocks.push(providerInjector.invoke(module));
4089
- } else {
4090
- assertArgFn(module, 'module');
4091
- }
4092
- } catch (e) {
4093
- if (isArray(module)) {
4094
- module = module[module.length - 1];
4095
- }
4096
- if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {
4097
- // Safari & FF's stack traces don't contain error.message content
4098
- // unlike those of Chrome and IE
4099
- // So if stack doesn't contain message, we create a new string that contains both.
4100
- // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.
4101
- /* jshint -W022 */
4102
- e = e.message + '\n' + e.stack;
4103
- }
4104
- throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}",
4105
- module, e.stack || e.message || e);
4106
- }
4107
- });
4108
- return runBlocks;
4109
- }
4110
-
4111
- ////////////////////////////////////
4112
- // internal Injector
4113
- ////////////////////////////////////
4114
-
4115
- function createInternalInjector(cache, factory) {
4116
-
4117
- function getService(serviceName, caller) {
4118
- if (cache.hasOwnProperty(serviceName)) {
4119
- if (cache[serviceName] === INSTANTIATING) {
4120
- throw $injectorMinErr('cdep', 'Circular dependency found: {0}',
4121
- serviceName + ' <- ' + path.join(' <- '));
4122
- }
4123
- return cache[serviceName];
4124
- } else {
4125
- try {
4126
- path.unshift(serviceName);
4127
- cache[serviceName] = INSTANTIATING;
4128
- return cache[serviceName] = factory(serviceName, caller);
4129
- } catch (err) {
4130
- if (cache[serviceName] === INSTANTIATING) {
4131
- delete cache[serviceName];
4132
- }
4133
- throw err;
4134
- } finally {
4135
- path.shift();
4136
- }
4137
- }
4138
- }
4139
-
4140
- function invoke(fn, self, locals, serviceName) {
4141
- if (typeof locals === 'string') {
4142
- serviceName = locals;
4143
- locals = null;
4144
- }
4145
-
4146
- var args = [],
4147
- $inject = annotate(fn, strictDi, serviceName),
4148
- length, i,
4149
- key;
4150
-
4151
- for (i = 0, length = $inject.length; i < length; i++) {
4152
- key = $inject[i];
4153
- if (typeof key !== 'string') {
4154
- throw $injectorMinErr('itkn',
4155
- 'Incorrect injection token! Expected service name as string, got {0}', key);
4156
- }
4157
- args.push(
4158
- locals && locals.hasOwnProperty(key)
4159
- ? locals[key]
4160
- : getService(key, serviceName)
4161
- );
4162
- }
4163
- if (isArray(fn)) {
4164
- fn = fn[length];
4165
- }
4166
-
4167
- // http://jsperf.com/angularjs-invoke-apply-vs-switch
4168
- // #5388
4169
- return fn.apply(self, args);
4170
- }
4171
-
4172
- function instantiate(Type, locals, serviceName) {
4173
- // Check if Type is annotated and use just the given function at n-1 as parameter
4174
- // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
4175
- // Object creation: http://jsperf.com/create-constructor/2
4176
- var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype);
4177
- var returnedValue = invoke(Type, instance, locals, serviceName);
4178
-
4179
- return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
4180
- }
4181
-
4182
- return {
4183
- invoke: invoke,
4184
- instantiate: instantiate,
4185
- get: getService,
4186
- annotate: annotate,
4187
- has: function(name) {
4188
- return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);
4189
- }
4190
- };
4191
- }
4192
-}
4193
-
4194
-createInjector.$$annotate = annotate;
4195
-
4196
-/**
4197
- * @ngdoc provider
4198
- * @name $anchorScrollProvider
4199
- *
4200
- * @description
4201
- * Use `$anchorScrollProvider` to disable automatic scrolling whenever
4202
- * {@link ng.$location#hash $location.hash()} changes.
4203
- */
4204
-function $AnchorScrollProvider() {
4205
-
4206
- var autoScrollingEnabled = true;
4207
-
4208
- /**
4209
- * @ngdoc method
4210
- * @name $anchorScrollProvider#disableAutoScrolling
4211
- *
4212
- * @description
4213
- * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to
4214
- * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.<br />
4215
- * Use this method to disable automatic scrolling.
4216
- *
4217
- * If automatic scrolling is disabled, one must explicitly call
4218
- * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the
4219
- * current hash.
4220
- */
4221
- this.disableAutoScrolling = function() {
4222
- autoScrollingEnabled = false;
4223
- };
4224
-
4225
- /**
4226
- * @ngdoc service
4227
- * @name $anchorScroll
4228
- * @kind function
4229
- * @requires $window
4230
- * @requires $location
4231
- * @requires $rootScope
4232
- *
4233
- * @description
4234
- * When called, it checks the current value of {@link ng.$location#hash $location.hash()} and
4235
- * scrolls to the related element, according to the rules specified in the
4236
- * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).
4237
- *
4238
- * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to
4239
- * match any anchor whenever it changes. This can be disabled by calling
4240
- * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}.
4241
- *
4242
- * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a
4243
- * vertical scroll-offset (either fixed or dynamic).
4244
- *
4245
- * @property {(number|function|jqLite)} yOffset
4246
- * If set, specifies a vertical scroll-offset. This is often useful when there are fixed
4247
- * positioned elements at the top of the page, such as navbars, headers etc.
4248
- *
4249
- * `yOffset` can be specified in various ways:
4250
- * - **number**: A fixed number of pixels to be used as offset.<br /><br />
4251
- * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return
4252
- * a number representing the offset (in pixels).<br /><br />
4253
- * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from
4254
- * the top of the page to the element's bottom will be used as offset.<br />
4255
- * **Note**: The element will be taken into account only as long as its `position` is set to
4256
- * `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust
4257
- * their height and/or positioning according to the viewport's size.
4258
- *
4259
- * <br />
4260
- * <div class="alert alert-warning">
4261
- * In order for `yOffset` to work properly, scrolling should take place on the document's root and
4262
- * not some child element.
4263
- * </div>
4264
- *
4265
- * @example
4266
- <example module="anchorScrollExample">
4267
- <file name="index.html">
4268
- <div id="scrollArea" ng-controller="ScrollController">
4269
- <a ng-click="gotoBottom()">Go to bottom</a>
4270
- <a id="bottom"></a> You're at the bottom!
4271
- </div>
4272
- </file>
4273
- <file name="script.js">
4274
- angular.module('anchorScrollExample', [])
4275
- .controller('ScrollController', ['$scope', '$location', '$anchorScroll',
4276
- function ($scope, $location, $anchorScroll) {
4277
- $scope.gotoBottom = function() {
4278
- // set the location.hash to the id of
4279
- // the element you wish to scroll to.
4280
- $location.hash('bottom');
4281
-
4282
- // call $anchorScroll()
4283
- $anchorScroll();
4284
- };
4285
- }]);
4286
- </file>
4287
- <file name="style.css">
4288
- #scrollArea {
4289
- height: 280px;
4290
- overflow: auto;
4291
- }
4292
-
4293
- #bottom {
4294
- display: block;
4295
- margin-top: 2000px;
4296
- }
4297
- </file>
4298
- </example>
4299
- *
4300
- * <hr />
4301
- * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value).
4302
- * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details.
4303
- *
4304
- * @example
4305
- <example module="anchorScrollOffsetExample">
4306
- <file name="index.html">
4307
- <div class="fixed-header" ng-controller="headerCtrl">
4308
- <a href="" ng-click="gotoAnchor(x)" ng-repeat="x in [1,2,3,4,5]">
4309
- Go to anchor {{x}}
4310
- </a>
4311
- </div>
4312
- <div id="anchor{{x}}" class="anchor" ng-repeat="x in [1,2,3,4,5]">
4313
- Anchor {{x}} of 5
4314
- </div>
4315
- </file>
4316
- <file name="script.js">
4317
- angular.module('anchorScrollOffsetExample', [])
4318
- .run(['$anchorScroll', function($anchorScroll) {
4319
- $anchorScroll.yOffset = 50; // always scroll by 50 extra pixels
4320
- }])
4321
- .controller('headerCtrl', ['$anchorScroll', '$location', '$scope',
4322
- function ($anchorScroll, $location, $scope) {
4323
- $scope.gotoAnchor = function(x) {
4324
- var newHash = 'anchor' + x;
4325
- if ($location.hash() !== newHash) {
4326
- // set the $location.hash to `newHash` and
4327
- // $anchorScroll will automatically scroll to it
4328
- $location.hash('anchor' + x);
4329
- } else {
4330
- // call $anchorScroll() explicitly,
4331
- // since $location.hash hasn't changed
4332
- $anchorScroll();
4333
- }
4334
- };
4335
- }
4336
- ]);
4337
- </file>
4338
- <file name="style.css">
4339
- body {
4340
- padding-top: 50px;
4341
- }
4342
-
4343
- .anchor {
4344
- border: 2px dashed DarkOrchid;
4345
- padding: 10px 10px 200px 10px;
4346
- }
4347
-
4348
- .fixed-header {
4349
- background-color: rgba(0, 0, 0, 0.2);
4350
- height: 50px;
4351
- position: fixed;
4352
- top: 0; left: 0; right: 0;
4353
- }
4354
-
4355
- .fixed-header > a {
4356
- display: inline-block;
4357
- margin: 5px 15px;
4358
- }
4359
- </file>
4360
- </example>
4361
- */
4362
- this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {
4363
- var document = $window.document;
4364
-
4365
- // Helper function to get first anchor from a NodeList
4366
- // (using `Array#some()` instead of `angular#forEach()` since it's more performant
4367
- // and working in all supported browsers.)
4368
- function getFirstAnchor(list) {
4369
- var result = null;
4370
- Array.prototype.some.call(list, function(element) {
4371
- if (nodeName_(element) === 'a') {
4372
- result = element;
4373
- return true;
4374
- }
4375
- });
4376
- return result;
4377
- }
4378
-
4379
- function getYOffset() {
4380
-
4381
- var offset = scroll.yOffset;
4382
-
4383
- if (isFunction(offset)) {
4384
- offset = offset();
4385
- } else if (isElement(offset)) {
4386
- var elem = offset[0];
4387
- var style = $window.getComputedStyle(elem);
4388
- if (style.position !== 'fixed') {
4389
- offset = 0;
4390
- } else {
4391
- offset = elem.getBoundingClientRect().bottom;
4392
- }
4393
- } else if (!isNumber(offset)) {
4394
- offset = 0;
4395
- }
4396
-
4397
- return offset;
4398
- }
4399
-
4400
- function scrollTo(elem) {
4401
- if (elem) {
4402
- elem.scrollIntoView();
4403
-
4404
- var offset = getYOffset();
4405
-
4406
- if (offset) {
4407
- // `offset` is the number of pixels we should scroll UP in order to align `elem` properly.
4408
- // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the
4409
- // top of the viewport.
4410
- //
4411
- // IF the number of pixels from the top of `elem` to the end of the page's content is less
4412
- // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some
4413
- // way down the page.
4414
- //
4415
- // This is often the case for elements near the bottom of the page.
4416
- //
4417
- // In such cases we do not need to scroll the whole `offset` up, just the difference between
4418
- // the top of the element and the offset, which is enough to align the top of `elem` at the
4419
- // desired position.
4420
- var elemTop = elem.getBoundingClientRect().top;
4421
- $window.scrollBy(0, elemTop - offset);
4422
- }
4423
- } else {
4424
- $window.scrollTo(0, 0);
4425
- }
4426
- }
4427
-
4428
- function scroll() {
4429
- var hash = $location.hash(), elm;
4430
-
4431
- // empty hash, scroll to the top of the page
4432
- if (!hash) scrollTo(null);
4433
-
4434
- // element with given id
4435
- else if ((elm = document.getElementById(hash))) scrollTo(elm);
4436
-
4437
- // first anchor with given name :-D
4438
- else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);
4439
-
4440
- // no element and hash == 'top', scroll to the top of the page
4441
- else if (hash === 'top') scrollTo(null);
4442
- }
4443
-
4444
- // does not scroll when user clicks on anchor link that is currently on
4445
- // (no url change, no $location.hash() change), browser native does scroll
4446
- if (autoScrollingEnabled) {
4447
- $rootScope.$watch(function autoScrollWatch() {return $location.hash();},
4448
- function autoScrollWatchAction(newVal, oldVal) {
4449
- // skip the initial scroll if $location.hash is empty
4450
- if (newVal === oldVal && newVal === '') return;
4451
-
4452
- jqLiteDocumentLoaded(function() {
4453
- $rootScope.$evalAsync(scroll);
4454
- });
4455
- });
4456
- }
4457
-
4458
- return scroll;
4459
- }];
4460
-}
4461
-
4462
-var $animateMinErr = minErr('$animate');
4463
-
4464
-/**
4465
- * @ngdoc provider
4466
- * @name $animateProvider
4467
- *
4468
- * @description
4469
- * Default implementation of $animate that doesn't perform any animations, instead just
4470
- * synchronously performs DOM
4471
- * updates and calls done() callbacks.
4472
- *
4473
- * In order to enable animations the ngAnimate module has to be loaded.
4474
- *
4475
- * To see the functional implementation check out src/ngAnimate/animate.js
4476
- */
4477
-var $AnimateProvider = ['$provide', function($provide) {
4478
-
4479
-
4480
- this.$$selectors = {};
4481
-
4482
-
4483
- /**
4484
- * @ngdoc method
4485
- * @name $animateProvider#register
4486
- *
4487
- * @description
4488
- * Registers a new injectable animation factory function. The factory function produces the
4489
- * animation object which contains callback functions for each event that is expected to be
4490
- * animated.
4491
- *
4492
- * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`
4493
- * must be called once the element animation is complete. If a function is returned then the
4494
- * animation service will use this function to cancel the animation whenever a cancel event is
4495
- * triggered.
4496
- *
4497
- *
4498
- * ```js
4499
- * return {
4500
- * eventFn : function(element, done) {
4501
- * //code to run the animation
4502
- * //once complete, then run done()
4503
- * return function cancellationFunction() {
4504
- * //code to cancel the animation
4505
- * }
4506
- * }
4507
- * }
4508
- * ```
4509
- *
4510
- * @param {string} name The name of the animation.
4511
- * @param {Function} factory The factory function that will be executed to return the animation
4512
- * object.
4513
- */
4514
- this.register = function(name, factory) {
4515
- var key = name + '-animation';
4516
- if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',
4517
- "Expecting class selector starting with '.' got '{0}'.", name);
4518
- this.$$selectors[name.substr(1)] = key;
4519
- $provide.factory(key, factory);
4520
- };
4521
-
4522
- /**
4523
- * @ngdoc method
4524
- * @name $animateProvider#classNameFilter
4525
- *
4526
- * @description
4527
- * Sets and/or returns the CSS class regular expression that is checked when performing
4528
- * an animation. Upon bootstrap the classNameFilter value is not set at all and will
4529
- * therefore enable $animate to attempt to perform an animation on any element.
4530
- * When setting the classNameFilter value, animations will only be performed on elements
4531
- * that successfully match the filter expression. This in turn can boost performance
4532
- * for low-powered devices as well as applications containing a lot of structural operations.
4533
- * @param {RegExp=} expression The className expression which will be checked against all animations
4534
- * @return {RegExp} The current CSS className expression value. If null then there is no expression value
4535
- */
4536
- this.classNameFilter = function(expression) {
4537
- if (arguments.length === 1) {
4538
- this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
4539
- }
4540
- return this.$$classNameFilter;
4541
- };
4542
-
4543
- this.$get = ['$$q', '$$asyncCallback', '$rootScope', function($$q, $$asyncCallback, $rootScope) {
4544
-
4545
- var currentDefer;
4546
-
4547
- function runAnimationPostDigest(fn) {
4548
- var cancelFn, defer = $$q.defer();
4549
- defer.promise.$$cancelFn = function ngAnimateMaybeCancel() {
4550
- cancelFn && cancelFn();
4551
- };
4552
-
4553
- $rootScope.$$postDigest(function ngAnimatePostDigest() {
4554
- cancelFn = fn(function ngAnimateNotifyComplete() {
4555
- defer.resolve();
4556
- });
4557
- });
4558
-
4559
- return defer.promise;
4560
- }
4561
-
4562
- function resolveElementClasses(element, classes) {
4563
- var toAdd = [], toRemove = [];
4564
-
4565
- var hasClasses = createMap();
4566
- forEach((element.attr('class') || '').split(/\s+/), function(className) {
4567
- hasClasses[className] = true;
4568
- });
4569
-
4570
- forEach(classes, function(status, className) {
4571
- var hasClass = hasClasses[className];
4572
-
4573
- // If the most recent class manipulation (via $animate) was to remove the class, and the
4574
- // element currently has the class, the class is scheduled for removal. Otherwise, if
4575
- // the most recent class manipulation (via $animate) was to add the class, and the
4576
- // element does not currently have the class, the class is scheduled to be added.
4577
- if (status === false && hasClass) {
4578
- toRemove.push(className);
4579
- } else if (status === true && !hasClass) {
4580
- toAdd.push(className);
4581
- }
4582
- });
4583
-
4584
- return (toAdd.length + toRemove.length) > 0 &&
4585
- [toAdd.length ? toAdd : null, toRemove.length ? toRemove : null];
4586
- }
4587
-
4588
- function cachedClassManipulation(cache, classes, op) {
4589
- for (var i=0, ii = classes.length; i < ii; ++i) {
4590
- var className = classes[i];
4591
- cache[className] = op;
4592
- }
4593
- }
4594
-
4595
- function asyncPromise() {
4596
- // only serve one instance of a promise in order to save CPU cycles
4597
- if (!currentDefer) {
4598
- currentDefer = $$q.defer();
4599
- $$asyncCallback(function() {
4600
- currentDefer.resolve();
4601
- currentDefer = null;
4602
- });
4603
- }
4604
- return currentDefer.promise;
4605
- }
4606
-
4607
- function applyStyles(element, options) {
4608
- if (angular.isObject(options)) {
4609
- var styles = extend(options.from || {}, options.to || {});
4610
- element.css(styles);
4611
- }
4612
- }
4613
-
4614
- /**
4615
- *
4616
- * @ngdoc service
4617
- * @name $animate
4618
- * @description The $animate service provides rudimentary DOM manipulation functions to
4619
- * insert, remove and move elements within the DOM, as well as adding and removing classes.
4620
- * This service is the core service used by the ngAnimate $animator service which provides
4621
- * high-level animation hooks for CSS and JavaScript.
4622
- *
4623
- * $animate is available in the AngularJS core, however, the ngAnimate module must be included
4624
- * to enable full out animation support. Otherwise, $animate will only perform simple DOM
4625
- * manipulation operations.
4626
- *
4627
- * To learn more about enabling animation support, click here to visit the {@link ngAnimate
4628
- * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service
4629
- * page}.
4630
- */
4631
- return {
4632
- animate: function(element, from, to) {
4633
- applyStyles(element, { from: from, to: to });
4634
- return asyncPromise();
4635
- },
4636
-
4637
- /**
4638
- *
4639
- * @ngdoc method
4640
- * @name $animate#enter
4641
- * @kind function
4642
- * @description Inserts the element into the DOM either after the `after` element or
4643
- * as the first child within the `parent` element. When the function is called a promise
4644
- * is returned that will be resolved at a later time.
4645
- * @param {DOMElement} element the element which will be inserted into the DOM
4646
- * @param {DOMElement} parent the parent element which will append the element as
4647
- * a child (if the after element is not present)
4648
- * @param {DOMElement} after the sibling element which will append the element
4649
- * after itself
4650
- * @param {object=} options an optional collection of styles that will be applied to the element.
4651
- * @return {Promise} the animation callback promise
4652
- */
4653
- enter: function(element, parent, after, options) {
4654
- applyStyles(element, options);
4655
- after ? after.after(element)
4656
- : parent.prepend(element);
4657
- return asyncPromise();
4658
- },
4659
-
4660
- /**
4661
- *
4662
- * @ngdoc method
4663
- * @name $animate#leave
4664
- * @kind function
4665
- * @description Removes the element from the DOM. When the function is called a promise
4666
- * is returned that will be resolved at a later time.
4667
- * @param {DOMElement} element the element which will be removed from the DOM
4668
- * @param {object=} options an optional collection of options that will be applied to the element.
4669
- * @return {Promise} the animation callback promise
4670
- */
4671
- leave: function(element, options) {
4672
- element.remove();
4673
- return asyncPromise();
4674
- },
4675
-
4676
- /**
4677
- *
4678
- * @ngdoc method
4679
- * @name $animate#move
4680
- * @kind function
4681
- * @description Moves the position of the provided element within the DOM to be placed
4682
- * either after the `after` element or inside of the `parent` element. When the function
4683
- * is called a promise is returned that will be resolved at a later time.
4684
- *
4685
- * @param {DOMElement} element the element which will be moved around within the
4686
- * DOM
4687
- * @param {DOMElement} parent the parent element where the element will be
4688
- * inserted into (if the after element is not present)
4689
- * @param {DOMElement} after the sibling element where the element will be
4690
- * positioned next to
4691
- * @param {object=} options an optional collection of options that will be applied to the element.
4692
- * @return {Promise} the animation callback promise
4693
- */
4694
- move: function(element, parent, after, options) {
4695
- // Do not remove element before insert. Removing will cause data associated with the
4696
- // element to be dropped. Insert will implicitly do the remove.
4697
- return this.enter(element, parent, after, options);
4698
- },
4699
-
4700
- /**
4701
- *
4702
- * @ngdoc method
4703
- * @name $animate#addClass
4704
- * @kind function
4705
- * @description Adds the provided className CSS class value to the provided element.
4706
- * When the function is called a promise is returned that will be resolved at a later time.
4707
- * @param {DOMElement} element the element which will have the className value
4708
- * added to it
4709
- * @param {string} className the CSS class which will be added to the element
4710
- * @param {object=} options an optional collection of options that will be applied to the element.
4711
- * @return {Promise} the animation callback promise
4712
- */
4713
- addClass: function(element, className, options) {
4714
- return this.setClass(element, className, [], options);
4715
- },
4716
-
4717
- $$addClassImmediately: function(element, className, options) {
4718
- element = jqLite(element);
4719
- className = !isString(className)
4720
- ? (isArray(className) ? className.join(' ') : '')
4721
- : className;
4722
- forEach(element, function(element) {
4723
- jqLiteAddClass(element, className);
4724
- });
4725
- applyStyles(element, options);
4726
- return asyncPromise();
4727
- },
4728
-
4729
- /**
4730
- *
4731
- * @ngdoc method
4732
- * @name $animate#removeClass
4733
- * @kind function
4734
- * @description Removes the provided className CSS class value from the provided element.
4735
- * When the function is called a promise is returned that will be resolved at a later time.
4736
- * @param {DOMElement} element the element which will have the className value
4737
- * removed from it
4738
- * @param {string} className the CSS class which will be removed from the element
4739
- * @param {object=} options an optional collection of options that will be applied to the element.
4740
- * @return {Promise} the animation callback promise
4741
- */
4742
- removeClass: function(element, className, options) {
4743
- return this.setClass(element, [], className, options);
4744
- },
4745
-
4746
- $$removeClassImmediately: function(element, className, options) {
4747
- element = jqLite(element);
4748
- className = !isString(className)
4749
- ? (isArray(className) ? className.join(' ') : '')
4750
- : className;
4751
- forEach(element, function(element) {
4752
- jqLiteRemoveClass(element, className);
4753
- });
4754
- applyStyles(element, options);
4755
- return asyncPromise();
4756
- },
4757
-
4758
- /**
4759
- *
4760
- * @ngdoc method
4761
- * @name $animate#setClass
4762
- * @kind function
4763
- * @description Adds and/or removes the given CSS classes to and from the element.
4764
- * When the function is called a promise is returned that will be resolved at a later time.
4765
- * @param {DOMElement} element the element which will have its CSS classes changed
4766
- * removed from it
4767
- * @param {string} add the CSS classes which will be added to the element
4768
- * @param {string} remove the CSS class which will be removed from the element
4769
- * @param {object=} options an optional collection of options that will be applied to the element.
4770
- * @return {Promise} the animation callback promise
4771
- */
4772
- setClass: function(element, add, remove, options) {
4773
- var self = this;
4774
- var STORAGE_KEY = '$$animateClasses';
4775
- var createdCache = false;
4776
- element = jqLite(element);
4777
-
4778
- var cache = element.data(STORAGE_KEY);
4779
- if (!cache) {
4780
- cache = {
4781
- classes: {},
4782
- options: options
4783
- };
4784
- createdCache = true;
4785
- } else if (options && cache.options) {
4786
- cache.options = angular.extend(cache.options || {}, options);
4787
- }
4788
-
4789
- var classes = cache.classes;
4790
-
4791
- add = isArray(add) ? add : add.split(' ');
4792
- remove = isArray(remove) ? remove : remove.split(' ');
4793
- cachedClassManipulation(classes, add, true);
4794
- cachedClassManipulation(classes, remove, false);
4795
-
4796
- if (createdCache) {
4797
- cache.promise = runAnimationPostDigest(function(done) {
4798
- var cache = element.data(STORAGE_KEY);
4799
- element.removeData(STORAGE_KEY);
4800
-
4801
- // in the event that the element is removed before postDigest
4802
- // is run then the cache will be undefined and there will be
4803
- // no need anymore to add or remove and of the element classes
4804
- if (cache) {
4805
- var classes = resolveElementClasses(element, cache.classes);
4806
- if (classes) {
4807
- self.$$setClassImmediately(element, classes[0], classes[1], cache.options);
4808
- }
4809
- }
4810
-
4811
- done();
4812
- });
4813
- element.data(STORAGE_KEY, cache);
4814
- }
4815
-
4816
- return cache.promise;
4817
- },
4818
-
4819
- $$setClassImmediately: function(element, add, remove, options) {
4820
- add && this.$$addClassImmediately(element, add);
4821
- remove && this.$$removeClassImmediately(element, remove);
4822
- applyStyles(element, options);
4823
- return asyncPromise();
4824
- },
4825
-
4826
- enabled: noop,
4827
- cancel: noop
4828
- };
4829
- }];
4830
-}];
4831
-
4832
-function $$AsyncCallbackProvider() {
4833
- this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {
4834
- return $$rAF.supported
4835
- ? function(fn) { return $$rAF(fn); }
4836
- : function(fn) {
4837
- return $timeout(fn, 0, false);
4838
- };
4839
- }];
4840
-}
4841
-
4842
-/* global stripHash: true */
4843
-
4844
-/**
4845
- * ! This is a private undocumented service !
4846
- *
4847
- * @name $browser
4848
- * @requires $log
4849
- * @description
4850
- * This object has two goals:
4851
- *
4852
- * - hide all the global state in the browser caused by the window object
4853
- * - abstract away all the browser specific features and inconsistencies
4854
- *
4855
- * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`
4856
- * service, which can be used for convenient testing of the application without the interaction with
4857
- * the real browser apis.
4858
- */
4859
-/**
4860
- * @param {object} window The global window object.
4861
- * @param {object} document jQuery wrapped document.
4862
- * @param {object} $log window.console or an object with the same interface.
4863
- * @param {object} $sniffer $sniffer service
4864
- */
4865
-function Browser(window, document, $log, $sniffer) {
4866
- var self = this,
4867
- rawDocument = document[0],
4868
- location = window.location,
4869
- history = window.history,
4870
- setTimeout = window.setTimeout,
4871
- clearTimeout = window.clearTimeout,
4872
- pendingDeferIds = {};
4873
-
4874
- self.isMock = false;
4875
-
4876
- var outstandingRequestCount = 0;
4877
- var outstandingRequestCallbacks = [];
4878
-
4879
- // TODO(vojta): remove this temporary api
4880
- self.$$completeOutstandingRequest = completeOutstandingRequest;
4881
- self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };
4882
-
4883
- /**
4884
- * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`
4885
- * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.
4886
- */
4887
- function completeOutstandingRequest(fn) {
4888
- try {
4889
- fn.apply(null, sliceArgs(arguments, 1));
4890
- } finally {
4891
- outstandingRequestCount--;
4892
- if (outstandingRequestCount === 0) {
4893
- while (outstandingRequestCallbacks.length) {
4894
- try {
4895
- outstandingRequestCallbacks.pop()();
4896
- } catch (e) {
4897
- $log.error(e);
4898
- }
4899
- }
4900
- }
4901
- }
4902
- }
4903
-
4904
- function getHash(url) {
4905
- var index = url.indexOf('#');
4906
- return index === -1 ? '' : url.substr(index + 1);
4907
- }
4908
-
4909
- /**
4910
- * @private
4911
- * Note: this method is used only by scenario runner
4912
- * TODO(vojta): prefix this method with $$ ?
4913
- * @param {function()} callback Function that will be called when no outstanding request
4914
- */
4915
- self.notifyWhenNoOutstandingRequests = function(callback) {
4916
- // force browser to execute all pollFns - this is needed so that cookies and other pollers fire
4917
- // at some deterministic time in respect to the test runner's actions. Leaving things up to the
4918
- // regular poller would result in flaky tests.
4919
- forEach(pollFns, function(pollFn) { pollFn(); });
4920
-
4921
- if (outstandingRequestCount === 0) {
4922
- callback();
4923
- } else {
4924
- outstandingRequestCallbacks.push(callback);
4925
- }
4926
- };
4927
-
4928
- //////////////////////////////////////////////////////////////
4929
- // Poll Watcher API
4930
- //////////////////////////////////////////////////////////////
4931
- var pollFns = [],
4932
- pollTimeout;
4933
-
4934
- /**
4935
- * @name $browser#addPollFn
4936
- *
4937
- * @param {function()} fn Poll function to add
4938
- *
4939
- * @description
4940
- * Adds a function to the list of functions that poller periodically executes,
4941
- * and starts polling if not started yet.
4942
- *
4943
- * @returns {function()} the added function
4944
- */
4945
- self.addPollFn = function(fn) {
4946
- if (isUndefined(pollTimeout)) startPoller(100, setTimeout);
4947
- pollFns.push(fn);
4948
- return fn;
4949
- };
4950
-
4951
- /**
4952
- * @param {number} interval How often should browser call poll functions (ms)
4953
- * @param {function()} setTimeout Reference to a real or fake `setTimeout` function.
4954
- *
4955
- * @description
4956
- * Configures the poller to run in the specified intervals, using the specified
4957
- * setTimeout fn and kicks it off.
4958
- */
4959
- function startPoller(interval, setTimeout) {
4960
- (function check() {
4961
- forEach(pollFns, function(pollFn) { pollFn(); });
4962
- pollTimeout = setTimeout(check, interval);
4963
- })();
4964
- }
4965
-
4966
- //////////////////////////////////////////////////////////////
4967
- // URL API
4968
- //////////////////////////////////////////////////////////////
4969
-
4970
- var cachedState, lastHistoryState,
4971
- lastBrowserUrl = location.href,
4972
- baseElement = document.find('base'),
4973
- reloadLocation = null;
4974
-
4975
- cacheState();
4976
- lastHistoryState = cachedState;
4977
-
4978
- /**
4979
- * @name $browser#url
4980
- *
4981
- * @description
4982
- * GETTER:
4983
- * Without any argument, this method just returns current value of location.href.
4984
- *
4985
- * SETTER:
4986
- * With at least one argument, this method sets url to new value.
4987
- * If html5 history api supported, pushState/replaceState is used, otherwise
4988
- * location.href/location.replace is used.
4989
- * Returns its own instance to allow chaining
4990
- *
4991
- * NOTE: this api is intended for use only by the $location service. Please use the
4992
- * {@link ng.$location $location service} to change url.
4993
- *
4994
- * @param {string} url New url (when used as setter)
4995
- * @param {boolean=} replace Should new url replace current history record?
4996
- * @param {object=} state object to use with pushState/replaceState
4997
- */
4998
- self.url = function(url, replace, state) {
4999
- // In modern browsers `history.state` is `null` by default; treating it separately
5000
- // from `undefined` would cause `$browser.url('/foo')` to change `history.state`
5001
- // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.
5002
- if (isUndefined(state)) {
5003
- state = null;
5004
- }
5005
-
5006
- // Android Browser BFCache causes location, history reference to become stale.
5007
- if (location !== window.location) location = window.location;
5008
- if (history !== window.history) history = window.history;
5009
-
5010
- // setter
5011
- if (url) {
5012
- var sameState = lastHistoryState === state;
5013
-
5014
- // Don't change anything if previous and current URLs and states match. This also prevents
5015
- // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.
5016
- // See https://github.com/angular/angular.js/commit/ffb2701
5017
- if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {
5018
- return self;
5019
- }
5020
- var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);
5021
- lastBrowserUrl = url;
5022
- lastHistoryState = state;
5023
- // Don't use history API if only the hash changed
5024
- // due to a bug in IE10/IE11 which leads
5025
- // to not firing a `hashchange` nor `popstate` event
5026
- // in some cases (see #9143).
5027
- if ($sniffer.history && (!sameBase || !sameState)) {
5028
- history[replace ? 'replaceState' : 'pushState'](state, '', url);
5029
- cacheState();
5030
- // Do the assignment again so that those two variables are referentially identical.
5031
- lastHistoryState = cachedState;
5032
- } else {
5033
- if (!sameBase) {
5034
- reloadLocation = url;
5035
- }
5036
- if (replace) {
5037
- location.replace(url);
5038
- } else if (!sameBase) {
5039
- location.href = url;
5040
- } else {
5041
- location.hash = getHash(url);
5042
- }
5043
- }
5044
- return self;
5045
- // getter
5046
- } else {
5047
- // - reloadLocation is needed as browsers don't allow to read out
5048
- // the new location.href if a reload happened.
5049
- // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
5050
- return reloadLocation || location.href.replace(/%27/g,"'");
5051
- }
5052
- };
5053
-
5054
- /**
5055
- * @name $browser#state
5056
- *
5057
- * @description
5058
- * This method is a getter.
5059
- *
5060
- * Return history.state or null if history.state is undefined.
5061
- *
5062
- * @returns {object} state
5063
- */
5064
- self.state = function() {
5065
- return cachedState;
5066
- };
5067
-
5068
- var urlChangeListeners = [],
5069
- urlChangeInit = false;
5070
-
5071
- function cacheStateAndFireUrlChange() {
5072
- cacheState();
5073
- fireUrlChange();
5074
- }
5075
-
5076
- // This variable should be used *only* inside the cacheState function.
5077
- var lastCachedState = null;
5078
- function cacheState() {
5079
- // This should be the only place in $browser where `history.state` is read.
5080
- cachedState = window.history.state;
5081
- cachedState = isUndefined(cachedState) ? null : cachedState;
5082
-
5083
- // Prevent callbacks fo fire twice if both hashchange & popstate were fired.
5084
- if (equals(cachedState, lastCachedState)) {
5085
- cachedState = lastCachedState;
5086
- }
5087
- lastCachedState = cachedState;
5088
- }
5089
-
5090
- function fireUrlChange() {
5091
- if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {
5092
- return;
5093
- }
5094
-
5095
- lastBrowserUrl = self.url();
5096
- lastHistoryState = cachedState;
5097
- forEach(urlChangeListeners, function(listener) {
5098
- listener(self.url(), cachedState);
5099
- });
5100
- }
5101
-
5102
- /**
5103
- * @name $browser#onUrlChange
5104
- *
5105
- * @description
5106
- * Register callback function that will be called, when url changes.
5107
- *
5108
- * It's only called when the url is changed from outside of angular:
5109
- * - user types different url into address bar
5110
- * - user clicks on history (forward/back) button
5111
- * - user clicks on a link
5112
- *
5113
- * It's not called when url is changed by $browser.url() method
5114
- *
5115
- * The listener gets called with new url as parameter.
5116
- *
5117
- * NOTE: this api is intended for use only by the $location service. Please use the
5118
- * {@link ng.$location $location service} to monitor url changes in angular apps.
5119
- *
5120
- * @param {function(string)} listener Listener function to be called when url changes.
5121
- * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.
5122
- */
5123
- self.onUrlChange = function(callback) {
5124
- // TODO(vojta): refactor to use node's syntax for events
5125
- if (!urlChangeInit) {
5126
- // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)
5127
- // don't fire popstate when user change the address bar and don't fire hashchange when url
5128
- // changed by push/replaceState
5129
-
5130
- // html5 history api - popstate event
5131
- if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange);
5132
- // hashchange event
5133
- jqLite(window).on('hashchange', cacheStateAndFireUrlChange);
5134
-
5135
- urlChangeInit = true;
5136
- }
5137
-
5138
- urlChangeListeners.push(callback);
5139
- return callback;
5140
- };
5141
-
5142
- /**
5143
- * Checks whether the url has changed outside of Angular.
5144
- * Needs to be exported to be able to check for changes that have been done in sync,
5145
- * as hashchange/popstate events fire in async.
5146
- */
5147
- self.$$checkUrlChange = fireUrlChange;
5148
-
5149
- //////////////////////////////////////////////////////////////
5150
- // Misc API
5151
- //////////////////////////////////////////////////////////////
5152
-
5153
- /**
5154
- * @name $browser#baseHref
5155
- *
5156
- * @description
5157
- * Returns current <base href>
5158
- * (always relative - without domain)
5159
- *
5160
- * @returns {string} The current base href
5161
- */
5162
- self.baseHref = function() {
5163
- var href = baseElement.attr('href');
5164
- return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
5165
- };
5166
-
5167
- //////////////////////////////////////////////////////////////
5168
- // Cookies API
5169
- //////////////////////////////////////////////////////////////
5170
- var lastCookies = {};
5171
- var lastCookieString = '';
5172
- var cookiePath = self.baseHref();
5173
-
5174
- function safeDecodeURIComponent(str) {
5175
- try {
5176
- return decodeURIComponent(str);
5177
- } catch (e) {
5178
- return str;
5179
- }
5180
- }
5181
-
5182
- /**
5183
- * @name $browser#cookies
5184
- *
5185
- * @param {string=} name Cookie name
5186
- * @param {string=} value Cookie value
5187
- *
5188
- * @description
5189
- * The cookies method provides a 'private' low level access to browser cookies.
5190
- * It is not meant to be used directly, use the $cookie service instead.
5191
- *
5192
- * The return values vary depending on the arguments that the method was called with as follows:
5193
- *
5194
- * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify
5195
- * it
5196
- * - cookies(name, value) -> set name to value, if value is undefined delete the cookie
5197
- * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that
5198
- * way)
5199
- *
5200
- * @returns {Object} Hash of all cookies (if called without any parameter)
5201
- */
5202
- self.cookies = function(name, value) {
5203
- var cookieLength, cookieArray, cookie, i, index;
5204
-
5205
- if (name) {
5206
- if (value === undefined) {
5207
- rawDocument.cookie = encodeURIComponent(name) + "=;path=" + cookiePath +
5208
- ";expires=Thu, 01 Jan 1970 00:00:00 GMT";
5209
- } else {
5210
- if (isString(value)) {
5211
- cookieLength = (rawDocument.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) +
5212
- ';path=' + cookiePath).length + 1;
5213
-
5214
- // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
5215
- // - 300 cookies
5216
- // - 20 cookies per unique domain
5217
- // - 4096 bytes per cookie
5218
- if (cookieLength > 4096) {
5219
- $log.warn("Cookie '" + name +
5220
- "' possibly not set or overflowed because it was too large (" +
5221
- cookieLength + " > 4096 bytes)!");
5222
- }
5223
- }
5224
- }
5225
- } else {
5226
- if (rawDocument.cookie !== lastCookieString) {
5227
- lastCookieString = rawDocument.cookie;
5228
- cookieArray = lastCookieString.split("; ");
5229
- lastCookies = {};
5230
-
5231
- for (i = 0; i < cookieArray.length; i++) {
5232
- cookie = cookieArray[i];
5233
- index = cookie.indexOf('=');
5234
- if (index > 0) { //ignore nameless cookies
5235
- name = safeDecodeURIComponent(cookie.substring(0, index));
5236
- // the first value that is seen for a cookie is the most
5237
- // specific one. values for the same cookie name that
5238
- // follow are for less specific paths.
5239
- if (lastCookies[name] === undefined) {
5240
- lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));
5241
- }
5242
- }
5243
- }
5244
- }
5245
- return lastCookies;
5246
- }
5247
- };
5248
-
5249
-
5250
- /**
5251
- * @name $browser#defer
5252
- * @param {function()} fn A function, who's execution should be deferred.
5253
- * @param {number=} [delay=0] of milliseconds to defer the function execution.
5254
- * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.
5255
- *
5256
- * @description
5257
- * Executes a fn asynchronously via `setTimeout(fn, delay)`.
5258
- *
5259
- * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using
5260
- * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed
5261
- * via `$browser.defer.flush()`.
5262
- *
5263
- */
5264
- self.defer = function(fn, delay) {
5265
- var timeoutId;
5266
- outstandingRequestCount++;
5267
- timeoutId = setTimeout(function() {
5268
- delete pendingDeferIds[timeoutId];
5269
- completeOutstandingRequest(fn);
5270
- }, delay || 0);
5271
- pendingDeferIds[timeoutId] = true;
5272
- return timeoutId;
5273
- };
5274
-
5275
-
5276
- /**
5277
- * @name $browser#defer.cancel
5278
- *
5279
- * @description
5280
- * Cancels a deferred task identified with `deferId`.
5281
- *
5282
- * @param {*} deferId Token returned by the `$browser.defer` function.
5283
- * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
5284
- * canceled.
5285
- */
5286
- self.defer.cancel = function(deferId) {
5287
- if (pendingDeferIds[deferId]) {
5288
- delete pendingDeferIds[deferId];
5289
- clearTimeout(deferId);
5290
- completeOutstandingRequest(noop);
5291
- return true;
5292
- }
5293
- return false;
5294
- };
5295
-
5296
-}
5297
-
5298
-function $BrowserProvider() {
5299
- this.$get = ['$window', '$log', '$sniffer', '$document',
5300
- function($window, $log, $sniffer, $document) {
5301
- return new Browser($window, $document, $log, $sniffer);
5302
- }];
5303
-}
5304
-
5305
-/**
5306
- * @ngdoc service
5307
- * @name $cacheFactory
5308
- *
5309
- * @description
5310
- * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
5311
- * them.
5312
- *
5313
- * ```js
5314
- *
5315
- * var cache = $cacheFactory('cacheId');
5316
- * expect($cacheFactory.get('cacheId')).toBe(cache);
5317
- * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
5318
- *
5319
- * cache.put("key", "value");
5320
- * cache.put("another key", "another value");
5321
- *
5322
- * // We've specified no options on creation
5323
- * expect(cache.info()).toEqual({id: 'cacheId', size: 2});
5324
- *
5325
- * ```
5326
- *
5327
- *
5328
- * @param {string} cacheId Name or id of the newly created cache.
5329
- * @param {object=} options Options object that specifies the cache behavior. Properties:
5330
- *
5331
- * - `{number=}` `capacity` — turns the cache into LRU cache.
5332
- *
5333
- * @returns {object} Newly created cache object with the following set of methods:
5334
- *
5335
- * - `{object}` `info()` — Returns id, size, and options of cache.
5336
- * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns
5337
- * it.
5338
- * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
5339
- * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
5340
- * - `{void}` `removeAll()` — Removes all cached values.
5341
- * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
5342
- *
5343
- * @example
5344
- <example module="cacheExampleApp">
5345
- <file name="index.html">
5346
- <div ng-controller="CacheController">
5347
- <input ng-model="newCacheKey" placeholder="Key">
5348
- <input ng-model="newCacheValue" placeholder="Value">
5349
- <button ng-click="put(newCacheKey, newCacheValue)">Cache</button>
5350
-
5351
- <p ng-if="keys.length">Cached Values</p>
5352
- <div ng-repeat="key in keys">
5353
- <span ng-bind="key"></span>
5354
- <span>: </span>
5355
- <b ng-bind="cache.get(key)"></b>
5356
- </div>
5357
-
5358
- <p>Cache Info</p>
5359
- <div ng-repeat="(key, value) in cache.info()">
5360
- <span ng-bind="key"></span>
5361
- <span>: </span>
5362
- <b ng-bind="value"></b>
5363
- </div>
5364
- </div>
5365
- </file>
5366
- <file name="script.js">
5367
- angular.module('cacheExampleApp', []).
5368
- controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
5369
- $scope.keys = [];
5370
- $scope.cache = $cacheFactory('cacheId');
5371
- $scope.put = function(key, value) {
5372
- if ($scope.cache.get(key) === undefined) {
5373
- $scope.keys.push(key);
5374
- }
5375
- $scope.cache.put(key, value === undefined ? null : value);
5376
- };
5377
- }]);
5378
- </file>
5379
- <file name="style.css">
5380
- p {
5381
- margin: 10px 0 3px;
5382
- }
5383
- </file>
5384
- </example>
5385
- */
5386
-function $CacheFactoryProvider() {
5387
-
5388
- this.$get = function() {
5389
- var caches = {};
5390
-
5391
- function cacheFactory(cacheId, options) {
5392
- if (cacheId in caches) {
5393
- throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId);
5394
- }
5395
-
5396
- var size = 0,
5397
- stats = extend({}, options, {id: cacheId}),
5398
- data = {},
5399
- capacity = (options && options.capacity) || Number.MAX_VALUE,
5400
- lruHash = {},
5401
- freshEnd = null,
5402
- staleEnd = null;
5403
-
5404
- /**
5405
- * @ngdoc type
5406
- * @name $cacheFactory.Cache
5407
- *
5408
- * @description
5409
- * A cache object used to store and retrieve data, primarily used by
5410
- * {@link $http $http} and the {@link ng.directive:script script} directive to cache
5411
- * templates and other data.
5412
- *
5413
- * ```js
5414
- * angular.module('superCache')
5415
- * .factory('superCache', ['$cacheFactory', function($cacheFactory) {
5416
- * return $cacheFactory('super-cache');
5417
- * }]);
5418
- * ```
5419
- *
5420
- * Example test:
5421
- *
5422
- * ```js
5423
- * it('should behave like a cache', inject(function(superCache) {
5424
- * superCache.put('key', 'value');
5425
- * superCache.put('another key', 'another value');
5426
- *
5427
- * expect(superCache.info()).toEqual({
5428
- * id: 'super-cache',
5429
- * size: 2
5430
- * });
5431
- *
5432
- * superCache.remove('another key');
5433
- * expect(superCache.get('another key')).toBeUndefined();
5434
- *
5435
- * superCache.removeAll();
5436
- * expect(superCache.info()).toEqual({
5437
- * id: 'super-cache',
5438
- * size: 0
5439
- * });
5440
- * }));
5441
- * ```
5442
- */
5443
- return caches[cacheId] = {
5444
-
5445
- /**
5446
- * @ngdoc method
5447
- * @name $cacheFactory.Cache#put
5448
- * @kind function
5449
- *
5450
- * @description
5451
- * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be
5452
- * retrieved later, and incrementing the size of the cache if the key was not already
5453
- * present in the cache. If behaving like an LRU cache, it will also remove stale
5454
- * entries from the set.
5455
- *
5456
- * It will not insert undefined values into the cache.
5457
- *
5458
- * @param {string} key the key under which the cached data is stored.
5459
- * @param {*} value the value to store alongside the key. If it is undefined, the key
5460
- * will not be stored.
5461
- * @returns {*} the value stored.
5462
- */
5463
- put: function(key, value) {
5464
- if (capacity < Number.MAX_VALUE) {
5465
- var lruEntry = lruHash[key] || (lruHash[key] = {key: key});
5466
-
5467
- refresh(lruEntry);
5468
- }
5469
-
5470
- if (isUndefined(value)) return;
5471
- if (!(key in data)) size++;
5472
- data[key] = value;
5473
-
5474
- if (size > capacity) {
5475
- this.remove(staleEnd.key);
5476
- }
5477
-
5478
- return value;
5479
- },
5480
-
5481
- /**
5482
- * @ngdoc method
5483
- * @name $cacheFactory.Cache#get
5484
- * @kind function
5485
- *
5486
- * @description
5487
- * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.
5488
- *
5489
- * @param {string} key the key of the data to be retrieved
5490
- * @returns {*} the value stored.
5491
- */
5492
- get: function(key) {
5493
- if (capacity < Number.MAX_VALUE) {
5494
- var lruEntry = lruHash[key];
5495
-
5496
- if (!lruEntry) return;
5497
-
5498
- refresh(lruEntry);
5499
- }
5500
-
5501
- return data[key];
5502
- },
5503
-
5504
-
5505
- /**
5506
- * @ngdoc method
5507
- * @name $cacheFactory.Cache#remove
5508
- * @kind function
5509
- *
5510
- * @description
5511
- * Removes an entry from the {@link $cacheFactory.Cache Cache} object.
5512
- *
5513
- * @param {string} key the key of the entry to be removed
5514
- */
5515
- remove: function(key) {
5516
- if (capacity < Number.MAX_VALUE) {
5517
- var lruEntry = lruHash[key];
5518
-
5519
- if (!lruEntry) return;
5520
-
5521
- if (lruEntry == freshEnd) freshEnd = lruEntry.p;
5522
- if (lruEntry == staleEnd) staleEnd = lruEntry.n;
5523
- link(lruEntry.n,lruEntry.p);
5524
-
5525
- delete lruHash[key];
5526
- }
5527
-
5528
- delete data[key];
5529
- size--;
5530
- },
5531
-
5532
-
5533
- /**
5534
- * @ngdoc method
5535
- * @name $cacheFactory.Cache#removeAll
5536
- * @kind function
5537
- *
5538
- * @description
5539
- * Clears the cache object of any entries.
5540
- */
5541
- removeAll: function() {
5542
- data = {};
5543
- size = 0;
5544
- lruHash = {};
5545
- freshEnd = staleEnd = null;
5546
- },
5547
-
5548
-
5549
- /**
5550
- * @ngdoc method
5551
- * @name $cacheFactory.Cache#destroy
5552
- * @kind function
5553
- *
5554
- * @description
5555
- * Destroys the {@link $cacheFactory.Cache Cache} object entirely,
5556
- * removing it from the {@link $cacheFactory $cacheFactory} set.
5557
- */
5558
- destroy: function() {
5559
- data = null;
5560
- stats = null;
5561
- lruHash = null;
5562
- delete caches[cacheId];
5563
- },
5564
-
5565
-
5566
- /**
5567
- * @ngdoc method
5568
- * @name $cacheFactory.Cache#info
5569
- * @kind function
5570
- *
5571
- * @description
5572
- * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.
5573
- *
5574
- * @returns {object} an object with the following properties:
5575
- * <ul>
5576
- * <li>**id**: the id of the cache instance</li>
5577
- * <li>**size**: the number of entries kept in the cache instance</li>
5578
- * <li>**...**: any additional properties from the options object when creating the
5579
- * cache.</li>
5580
- * </ul>
5581
- */
5582
- info: function() {
5583
- return extend({}, stats, {size: size});
5584
- }
5585
- };
5586
-
5587
-
5588
- /**
5589
- * makes the `entry` the freshEnd of the LRU linked list
5590
- */
5591
- function refresh(entry) {
5592
- if (entry != freshEnd) {
5593
- if (!staleEnd) {
5594
- staleEnd = entry;
5595
- } else if (staleEnd == entry) {
5596
- staleEnd = entry.n;
5597
- }
5598
-
5599
- link(entry.n, entry.p);
5600
- link(entry, freshEnd);
5601
- freshEnd = entry;
5602
- freshEnd.n = null;
5603
- }
5604
- }
5605
-
5606
-
5607
- /**
5608
- * bidirectionally links two entries of the LRU linked list
5609
- */
5610
- function link(nextEntry, prevEntry) {
5611
- if (nextEntry != prevEntry) {
5612
- if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify
5613
- if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify
5614
- }
5615
- }
5616
- }
5617
-
5618
-
5619
- /**
5620
- * @ngdoc method
5621
- * @name $cacheFactory#info
5622
- *
5623
- * @description
5624
- * Get information about all the caches that have been created
5625
- *
5626
- * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
5627
- */
5628
- cacheFactory.info = function() {
5629
- var info = {};
5630
- forEach(caches, function(cache, cacheId) {
5631
- info[cacheId] = cache.info();
5632
- });
5633
- return info;
5634
- };
5635
-
5636
-
5637
- /**
5638
- * @ngdoc method
5639
- * @name $cacheFactory#get
5640
- *
5641
- * @description
5642
- * Get access to a cache object by the `cacheId` used when it was created.
5643
- *
5644
- * @param {string} cacheId Name or id of a cache to access.
5645
- * @returns {object} Cache object identified by the cacheId or undefined if no such cache.
5646
- */
5647
- cacheFactory.get = function(cacheId) {
5648
- return caches[cacheId];
5649
- };
5650
-
5651
-
5652
- return cacheFactory;
5653
- };
5654
-}
5655
-
5656
-/**
5657
- * @ngdoc service
5658
- * @name $templateCache
5659
- *
5660
- * @description
5661
- * The first time a template is used, it is loaded in the template cache for quick retrieval. You
5662
- * can load templates directly into the cache in a `script` tag, or by consuming the
5663
- * `$templateCache` service directly.
5664
- *
5665
- * Adding via the `script` tag:
5666
- *
5667
- * ```html
5668
- * <script type="text/ng-template" id="templateId.html">
5669
- * <p>This is the content of the template</p>
5670
- * </script>
5671
- * ```
5672
- *
5673
- * **Note:** the `script` tag containing the template does not need to be included in the `head` of
5674
- * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,
5675
- * element with ng-app attribute), otherwise the template will be ignored.
5676
- *
5677
- * Adding via the $templateCache service:
5678
- *
5679
- * ```js
5680
- * var myApp = angular.module('myApp', []);
5681
- * myApp.run(function($templateCache) {
5682
- * $templateCache.put('templateId.html', 'This is the content of the template');
5683
- * });
5684
- * ```
5685
- *
5686
- * To retrieve the template later, simply use it in your HTML:
5687
- * ```html
5688
- * <div ng-include=" 'templateId.html' "></div>
5689
- * ```
5690
- *
5691
- * or get it via Javascript:
5692
- * ```js
5693
- * $templateCache.get('templateId.html')
5694
- * ```
5695
- *
5696
- * See {@link ng.$cacheFactory $cacheFactory}.
5697
- *
5698
- */
5699
-function $TemplateCacheProvider() {
5700
- this.$get = ['$cacheFactory', function($cacheFactory) {
5701
- return $cacheFactory('templates');
5702
- }];
5703
-}
5704
-
5705
-/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!
5706
- *
5707
- * DOM-related variables:
5708
- *
5709
- * - "node" - DOM Node
5710
- * - "element" - DOM Element or Node
5711
- * - "$node" or "$element" - jqLite-wrapped node or element
5712
- *
5713
- *
5714
- * Compiler related stuff:
5715
- *
5716
- * - "linkFn" - linking fn of a single directive
5717
- * - "nodeLinkFn" - function that aggregates all linking fns for a particular node
5718
- * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node
5719
- * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList)
5720
- */
5721
-
5722
-
5723
-/**
5724
- * @ngdoc service
5725
- * @name $compile
5726
- * @kind function
5727
- *
5728
- * @description
5729
- * Compiles an HTML string or DOM into a template and produces a template function, which
5730
- * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
5731
- *
5732
- * The compilation is a process of walking the DOM tree and matching DOM elements to
5733
- * {@link ng.$compileProvider#directive directives}.
5734
- *
5735
- * <div class="alert alert-warning">
5736
- * **Note:** This document is an in-depth reference of all directive options.
5737
- * For a gentle introduction to directives with examples of common use cases,
5738
- * see the {@link guide/directive directive guide}.
5739
- * </div>
5740
- *
5741
- * ## Comprehensive Directive API
5742
- *
5743
- * There are many different options for a directive.
5744
- *
5745
- * The difference resides in the return value of the factory function.
5746
- * You can either return a "Directive Definition Object" (see below) that defines the directive properties,
5747
- * or just the `postLink` function (all other properties will have the default values).
5748
- *
5749
- * <div class="alert alert-success">
5750
- * **Best Practice:** It's recommended to use the "directive definition object" form.
5751
- * </div>
5752
- *
5753
- * Here's an example directive declared with a Directive Definition Object:
5754
- *
5755
- * ```js
5756
- * var myModule = angular.module(...);
5757
- *
5758
- * myModule.directive('directiveName', function factory(injectables) {
5759
- * var directiveDefinitionObject = {
5760
- * priority: 0,
5761
- * template: '<div></div>', // or // function(tElement, tAttrs) { ... },
5762
- * // or
5763
- * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },
5764
- * transclude: false,
5765
- * restrict: 'A',
5766
- * templateNamespace: 'html',
5767
- * scope: false,
5768
- * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
5769
- * controllerAs: 'stringAlias',
5770
- * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
5771
- * compile: function compile(tElement, tAttrs, transclude) {
5772
- * return {
5773
- * pre: function preLink(scope, iElement, iAttrs, controller) { ... },
5774
- * post: function postLink(scope, iElement, iAttrs, controller) { ... }
5775
- * }
5776
- * // or
5777
- * // return function postLink( ... ) { ... }
5778
- * },
5779
- * // or
5780
- * // link: {
5781
- * // pre: function preLink(scope, iElement, iAttrs, controller) { ... },
5782
- * // post: function postLink(scope, iElement, iAttrs, controller) { ... }
5783
- * // }
5784
- * // or
5785
- * // link: function postLink( ... ) { ... }
5786
- * };
5787
- * return directiveDefinitionObject;
5788
- * });
5789
- * ```
5790
- *
5791
- * <div class="alert alert-warning">
5792
- * **Note:** Any unspecified options will use the default value. You can see the default values below.
5793
- * </div>
5794
- *
5795
- * Therefore the above can be simplified as:
5796
- *
5797
- * ```js
5798
- * var myModule = angular.module(...);
5799
- *
5800
- * myModule.directive('directiveName', function factory(injectables) {
5801
- * var directiveDefinitionObject = {
5802
- * link: function postLink(scope, iElement, iAttrs) { ... }
5803
- * };
5804
- * return directiveDefinitionObject;
5805
- * // or
5806
- * // return function postLink(scope, iElement, iAttrs) { ... }
5807
- * });
5808
- * ```
5809
- *
5810
- *
5811
- *
5812
- * ### Directive Definition Object
5813
- *
5814
- * The directive definition object provides instructions to the {@link ng.$compile
5815
- * compiler}. The attributes are:
5816
- *
5817
- * #### `multiElement`
5818
- * When this property is set to true, the HTML compiler will collect DOM nodes between
5819
- * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them
5820
- * together as the directive elements. It is recommended that this feature be used on directives
5821
- * which are not strictly behavioural (such as {@link ngClick}), and which
5822
- * do not manipulate or replace child nodes (such as {@link ngInclude}).
5823
- *
5824
- * #### `priority`
5825
- * When there are multiple directives defined on a single DOM element, sometimes it
5826
- * is necessary to specify the order in which the directives are applied. The `priority` is used
5827
- * to sort the directives before their `compile` functions get called. Priority is defined as a
5828
- * number. Directives with greater numerical `priority` are compiled first. Pre-link functions
5829
- * are also run in priority order, but post-link functions are run in reverse order. The order
5830
- * of directives with the same priority is undefined. The default priority is `0`.
5831
- *
5832
- * #### `terminal`
5833
- * If set to true then the current `priority` will be the last set of directives
5834
- * which will execute (any directives at the current priority will still execute
5835
- * as the order of execution on same `priority` is undefined). Note that expressions
5836
- * and other directives used in the directive's template will also be excluded from execution.
5837
- *
5838
- * #### `scope`
5839
- * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the
5840
- * same element request a new scope, only one new scope is created. The new scope rule does not
5841
- * apply for the root of the template since the root of the template always gets a new scope.
5842
- *
5843
- * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from
5844
- * normal scope in that it does not prototypically inherit from the parent scope. This is useful
5845
- * when creating reusable components, which should not accidentally read or modify data in the
5846
- * parent scope.
5847
- *
5848
- * The 'isolate' scope takes an object hash which defines a set of local scope properties
5849
- * derived from the parent scope. These local properties are useful for aliasing values for
5850
- * templates. Locals definition is a hash of local scope property to its source:
5851
- *
5852
- * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is
5853
- * always a string since DOM attributes are strings. If no `attr` name is specified then the
5854
- * attribute name is assumed to be the same as the local name.
5855
- * Given `<widget my-attr="hello {{name}}">` and widget definition
5856
- * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect
5857
- * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the
5858
- * `localName` property on the widget scope. The `name` is read from the parent scope (not
5859
- * component scope).
5860
- *
5861
- * * `=` or `=attr` - set up bi-directional binding between a local scope property and the
5862
- * parent scope property of name defined via the value of the `attr` attribute. If no `attr`
5863
- * name is specified then the attribute name is assumed to be the same as the local name.
5864
- * Given `<widget my-attr="parentModel">` and widget definition of
5865
- * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the
5866
- * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
5867
- * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent
5868
- * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You
5869
- * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If
5870
- * you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use
5871
- * `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional).
5872
- *
5873
- * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.
5874
- * If no `attr` name is specified then the attribute name is assumed to be the same as the
5875
- * local name. Given `<widget my-attr="count = count + value">` and widget definition of
5876
- * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to
5877
- * a function wrapper for the `count = count + value` expression. Often it's desirable to
5878
- * pass data from the isolated scope via an expression to the parent scope, this can be
5879
- * done by passing a map of local variable names and values into the expression wrapper fn.
5880
- * For example, if the expression is `increment(amount)` then we can specify the amount value
5881
- * by calling the `localFn` as `localFn({amount: 22})`.
5882
- *
5883
- *
5884
- * #### `bindToController`
5885
- * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will
5886
- * allow a component to have its properties bound to the controller, rather than to scope. When the controller
5887
- * is instantiated, the initial values of the isolate scope bindings are already available.
5888
- *
5889
- * #### `controller`
5890
- * Controller constructor function. The controller is instantiated before the
5891
- * pre-linking phase and it is shared with other directives (see
5892
- * `require` attribute). This allows the directives to communicate with each other and augment
5893
- * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:
5894
- *
5895
- * * `$scope` - Current scope associated with the element
5896
- * * `$element` - Current element
5897
- * * `$attrs` - Current attributes object for the element
5898
- * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:
5899
- * `function([scope], cloneLinkingFn, futureParentElement)`.
5900
- * * `scope`: optional argument to override the scope.
5901
- * * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.
5902
- * * `futureParentElement`:
5903
- * * defines the parent to which the `cloneLinkingFn` will add the cloned elements.
5904
- * * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.
5905
- * * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)
5906
- * and when the `cloneLinkinFn` is passed,
5907
- * as those elements need to created and cloned in a special way when they are defined outside their
5908
- * usual containers (e.g. like `<svg>`).
5909
- * * See also the `directive.templateNamespace` property.
5910
- *
5911
- *
5912
- * #### `require`
5913
- * Require another directive and inject its controller as the fourth argument to the linking function. The
5914
- * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the
5915
- * injected argument will be an array in corresponding order. If no such directive can be
5916
- * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:
5917
- *
5918
- * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.
5919
- * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.
5920
- * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found.
5921
- * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found.
5922
- * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass
5923
- * `null` to the `link` fn if not found.
5924
- * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass
5925
- * `null` to the `link` fn if not found.
5926
- *
5927
- *
5928
- * #### `controllerAs`
5929
- * Controller alias at the directive scope. An alias for the controller so it
5930
- * can be referenced at the directive template. The directive needs to define a scope for this
5931
- * configuration to be used. Useful in the case when directive is used as component.
5932
- *
5933
- *
5934
- * #### `restrict`
5935
- * String of subset of `EACM` which restricts the directive to a specific directive
5936
- * declaration style. If omitted, the defaults (elements and attributes) are used.
5937
- *
5938
- * * `E` - Element name (default): `<my-directive></my-directive>`
5939
- * * `A` - Attribute (default): `<div my-directive="exp"></div>`
5940
- * * `C` - Class: `<div class="my-directive: exp;"></div>`
5941
- * * `M` - Comment: `<!-- directive: my-directive exp -->`
5942
- *
5943
- *
5944
- * #### `templateNamespace`
5945
- * String representing the document type used by the markup in the template.
5946
- * AngularJS needs this information as those elements need to be created and cloned
5947
- * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`.
5948
- *
5949
- * * `html` - All root nodes in the template are HTML. Root nodes may also be
5950
- * top-level elements such as `<svg>` or `<math>`.
5951
- * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`).
5952
- * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`).
5953
- *
5954
- * If no `templateNamespace` is specified, then the namespace is considered to be `html`.
5955
- *
5956
- * #### `template`
5957
- * HTML markup that may:
5958
- * * Replace the contents of the directive's element (default).
5959
- * * Replace the directive's element itself (if `replace` is true - DEPRECATED).
5960
- * * Wrap the contents of the directive's element (if `transclude` is true).
5961
- *
5962
- * Value may be:
5963
- *
5964
- * * A string. For example `<div red-on-hover>{{delete_str}}</div>`.
5965
- * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile`
5966
- * function api below) and returns a string value.
5967
- *
5968
- *
5969
- * #### `templateUrl`
5970
- * This is similar to `template` but the template is loaded from the specified URL, asynchronously.
5971
- *
5972
- * Because template loading is asynchronous the compiler will suspend compilation of directives on that element
5973
- * for later when the template has been resolved. In the meantime it will continue to compile and link
5974
- * sibling and parent elements as though this element had not contained any directives.
5975
- *
5976
- * The compiler does not suspend the entire compilation to wait for templates to be loaded because this
5977
- * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the
5978
- * case when only one deeply nested directive has `templateUrl`.
5979
- *
5980
- * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}
5981
- *
5982
- * You can specify `templateUrl` as a string representing the URL or as a function which takes two
5983
- * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns
5984
- * a string value representing the url. In either case, the template URL is passed through {@link
5985
- * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.
5986
- *
5987
- *
5988
- * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0)
5989
- * specify what the template should replace. Defaults to `false`.
5990
- *
5991
- * * `true` - the template will replace the directive's element.
5992
- * * `false` - the template will replace the contents of the directive's element.
5993
- *
5994
- * The replacement process migrates all of the attributes / classes from the old element to the new
5995
- * one. See the {@link guide/directive#template-expanding-directive
5996
- * Directives Guide} for an example.
5997
- *
5998
- * There are very few scenarios where element replacement is required for the application function,
5999
- * the main one being reusable custom components that are used within SVG contexts
6000
- * (because SVG doesn't work with custom elements in the DOM tree).
6001
- *
6002
- * #### `transclude`
6003
- * Extract the contents of the element where the directive appears and make it available to the directive.
6004
- * The contents are compiled and provided to the directive as a **transclusion function**. See the
6005
- * {@link $compile#transclusion Transclusion} section below.
6006
- *
6007
- * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the
6008
- * directive's element or the entire element:
6009
- *
6010
- * * `true` - transclude the content (i.e. the child nodes) of the directive's element.
6011
- * * `'element'` - transclude the whole of the directive's element including any directives on this
6012
- * element that defined at a lower priority than this directive. When used, the `template`
6013
- * property is ignored.
6014
- *
6015
- *
6016
- * #### `compile`
6017
- *
6018
- * ```js
6019
- * function compile(tElement, tAttrs, transclude) { ... }
6020
- * ```
6021
- *
6022
- * The compile function deals with transforming the template DOM. Since most directives do not do
6023
- * template transformation, it is not used often. The compile function takes the following arguments:
6024
- *
6025
- * * `tElement` - template element - The element where the directive has been declared. It is
6026
- * safe to do template transformation on the element and child elements only.
6027
- *
6028
- * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared
6029
- * between all directive compile functions.
6030
- *
6031
- * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`
6032
- *
6033
- * <div class="alert alert-warning">
6034
- * **Note:** The template instance and the link instance may be different objects if the template has
6035
- * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that
6036
- * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration
6037
- * should be done in a linking function rather than in a compile function.
6038
- * </div>
6039
-
6040
- * <div class="alert alert-warning">
6041
- * **Note:** The compile function cannot handle directives that recursively use themselves in their
6042
- * own templates or compile functions. Compiling these directives results in an infinite loop and a
6043
- * stack overflow errors.
6044
- *
6045
- * This can be avoided by manually using $compile in the postLink function to imperatively compile
6046
- * a directive's template instead of relying on automatic template compilation via `template` or
6047
- * `templateUrl` declaration or manual compilation inside the compile function.
6048
- * </div>
6049
- *
6050
- * <div class="alert alert-error">
6051
- * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it
6052
- * e.g. does not know about the right outer scope. Please use the transclude function that is passed
6053
- * to the link function instead.
6054
- * </div>
6055
-
6056
- * A compile function can have a return value which can be either a function or an object.
6057
- *
6058
- * * returning a (post-link) function - is equivalent to registering the linking function via the
6059
- * `link` property of the config object when the compile function is empty.
6060
- *
6061
- * * returning an object with function(s) registered via `pre` and `post` properties - allows you to
6062
- * control when a linking function should be called during the linking phase. See info about
6063
- * pre-linking and post-linking functions below.
6064
- *
6065
- *
6066
- * #### `link`
6067
- * This property is used only if the `compile` property is not defined.
6068
- *
6069
- * ```js
6070
- * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }
6071
- * ```
6072
- *
6073
- * The link function is responsible for registering DOM listeners as well as updating the DOM. It is
6074
- * executed after the template has been cloned. This is where most of the directive logic will be
6075
- * put.
6076
- *
6077
- * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the
6078
- * directive for registering {@link ng.$rootScope.Scope#$watch watches}.
6079
- *
6080
- * * `iElement` - instance element - The element where the directive is to be used. It is safe to
6081
- * manipulate the children of the element only in `postLink` function since the children have
6082
- * already been linked.
6083
- *
6084
- * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared
6085
- * between all directive linking functions.
6086
- *
6087
- * * `controller` - a controller instance - A controller instance if at least one directive on the
6088
- * element defines a controller. The controller is shared among all the directives, which allows
6089
- * the directives to use the controllers as a communication channel.
6090
- *
6091
- * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.
6092
- * This is the same as the `$transclude`
6093
- * parameter of directive controllers, see there for details.
6094
- * `function([scope], cloneLinkingFn, futureParentElement)`.
6095
- *
6096
- * #### Pre-linking function
6097
- *
6098
- * Executed before the child elements are linked. Not safe to do DOM transformation since the
6099
- * compiler linking function will fail to locate the correct elements for linking.
6100
- *
6101
- * #### Post-linking function
6102
- *
6103
- * Executed after the child elements are linked.
6104
- *
6105
- * Note that child elements that contain `templateUrl` directives will not have been compiled
6106
- * and linked since they are waiting for their template to load asynchronously and their own
6107
- * compilation and linking has been suspended until that occurs.
6108
- *
6109
- * It is safe to do DOM transformation in the post-linking function on elements that are not waiting
6110
- * for their async templates to be resolved.
6111
- *
6112
- *
6113
- * ### Transclusion
6114
- *
6115
- * Transclusion is the process of extracting a collection of DOM element from one part of the DOM and
6116
- * copying them to another part of the DOM, while maintaining their connection to the original AngularJS
6117
- * scope from where they were taken.
6118
- *
6119
- * Transclusion is used (often with {@link ngTransclude}) to insert the
6120
- * original contents of a directive's element into a specified place in the template of the directive.
6121
- * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded
6122
- * content has access to the properties on the scope from which it was taken, even if the directive
6123
- * has isolated scope.
6124
- * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}.
6125
- *
6126
- * This makes it possible for the widget to have private state for its template, while the transcluded
6127
- * content has access to its originating scope.
6128
- *
6129
- * <div class="alert alert-warning">
6130
- * **Note:** When testing an element transclude directive you must not place the directive at the root of the
6131
- * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives
6132
- * Testing Transclusion Directives}.
6133
- * </div>
6134
- *
6135
- * #### Transclusion Functions
6136
- *
6137
- * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion
6138
- * function** to the directive's `link` function and `controller`. This transclusion function is a special
6139
- * **linking function** that will return the compiled contents linked to a new transclusion scope.
6140
- *
6141
- * <div class="alert alert-info">
6142
- * If you are just using {@link ngTransclude} then you don't need to worry about this function, since
6143
- * ngTransclude will deal with it for us.
6144
- * </div>
6145
- *
6146
- * If you want to manually control the insertion and removal of the transcluded content in your directive
6147
- * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery
6148
- * object that contains the compiled DOM, which is linked to the correct transclusion scope.
6149
- *
6150
- * When you call a transclusion function you can pass in a **clone attach function**. This function accepts
6151
- * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded
6152
- * content and the `scope` is the newly created transclusion scope, to which the clone is bound.
6153
- *
6154
- * <div class="alert alert-info">
6155
- * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function
6156
- * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope.
6157
- * </div>
6158
- *
6159
- * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone
6160
- * attach function**:
6161
- *
6162
- * ```js
6163
- * var transcludedContent, transclusionScope;
6164
- *
6165
- * $transclude(function(clone, scope) {
6166
- * element.append(clone);
6167
- * transcludedContent = clone;
6168
- * transclusionScope = scope;
6169
- * });
6170
- * ```
6171
- *
6172
- * Later, if you want to remove the transcluded content from your DOM then you should also destroy the
6173
- * associated transclusion scope:
6174
- *
6175
- * ```js
6176
- * transcludedContent.remove();
6177
- * transclusionScope.$destroy();
6178
- * ```
6179
- *
6180
- * <div class="alert alert-info">
6181
- * **Best Practice**: if you intend to add and remove transcluded content manually in your directive
6182
- * (by calling the transclude function to get the DOM and and calling `element.remove()` to remove it),
6183
- * then you are also responsible for calling `$destroy` on the transclusion scope.
6184
- * </div>
6185
- *
6186
- * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat}
6187
- * automatically destroy their transluded clones as necessary so you do not need to worry about this if
6188
- * you are simply using {@link ngTransclude} to inject the transclusion into your directive.
6189
- *
6190
- *
6191
- * #### Transclusion Scopes
6192
- *
6193
- * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion
6194
- * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed
6195
- * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it
6196
- * was taken.
6197
- *
6198
- * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look
6199
- * like this:
6200
- *
6201
- * ```html
6202
- * <div ng-app>
6203
- * <div isolate>
6204
- * <div transclusion>
6205
- * </div>
6206
- * </div>
6207
- * </div>
6208
- * ```
6209
- *
6210
- * The `$parent` scope hierarchy will look like this:
6211
- *
6212
- * ```
6213
- * - $rootScope
6214
- * - isolate
6215
- * - transclusion
6216
- * ```
6217
- *
6218
- * but the scopes will inherit prototypically from different scopes to their `$parent`.
6219
- *
6220
- * ```
6221
- * - $rootScope
6222
- * - transclusion
6223
- * - isolate
6224
- * ```
6225
- *
6226
- *
6227
- * ### Attributes
6228
- *
6229
- * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the
6230
- * `link()` or `compile()` functions. It has a variety of uses.
6231
- *
6232
- * accessing *Normalized attribute names:*
6233
- * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.
6234
- * the attributes object allows for normalized access to
6235
- * the attributes.
6236
- *
6237
- * * *Directive inter-communication:* All directives share the same instance of the attributes
6238
- * object which allows the directives to use the attributes object as inter directive
6239
- * communication.
6240
- *
6241
- * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object
6242
- * allowing other directives to read the interpolated value.
6243
- *
6244
- * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes
6245
- * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also
6246
- * the only way to easily get the actual value because during the linking phase the interpolation
6247
- * hasn't been evaluated yet and so the value is at this time set to `undefined`.
6248
- *
6249
- * ```js
6250
- * function linkingFn(scope, elm, attrs, ctrl) {
6251
- * // get the attribute value
6252
- * console.log(attrs.ngModel);
6253
- *
6254
- * // change the attribute
6255
- * attrs.$set('ngModel', 'new value');
6256
- *
6257
- * // observe changes to interpolated attribute
6258
- * attrs.$observe('ngModel', function(value) {
6259
- * console.log('ngModel has changed value to ' + value);
6260
- * });
6261
- * }
6262
- * ```
6263
- *
6264
- * ## Example
6265
- *
6266
- * <div class="alert alert-warning">
6267
- * **Note**: Typically directives are registered with `module.directive`. The example below is
6268
- * to illustrate how `$compile` works.
6269
- * </div>
6270
- *
6271
- <example module="compileExample">
6272
- <file name="index.html">
6273
- <script>
6274
- angular.module('compileExample', [], function($compileProvider) {
6275
- // configure new 'compile' directive by passing a directive
6276
- // factory function. The factory function injects the '$compile'
6277
- $compileProvider.directive('compile', function($compile) {
6278
- // directive factory creates a link function
6279
- return function(scope, element, attrs) {
6280
- scope.$watch(
6281
- function(scope) {
6282
- // watch the 'compile' expression for changes
6283
- return scope.$eval(attrs.compile);
6284
- },
6285
- function(value) {
6286
- // when the 'compile' expression changes
6287
- // assign it into the current DOM
6288
- element.html(value);
6289
-
6290
- // compile the new DOM and link it to the current
6291
- // scope.
6292
- // NOTE: we only compile .childNodes so that
6293
- // we don't get into infinite loop compiling ourselves
6294
- $compile(element.contents())(scope);
6295
- }
6296
- );
6297
- };
6298
- });
6299
- })
6300
- .controller('GreeterController', ['$scope', function($scope) {
6301
- $scope.name = 'Angular';
6302
- $scope.html = 'Hello {{name}}';
6303
- }]);
6304
- </script>
6305
- <div ng-controller="GreeterController">
6306
- <input ng-model="name"> <br>
6307
- <textarea ng-model="html"></textarea> <br>
6308
- <div compile="html"></div>
6309
- </div>
6310
- </file>
6311
- <file name="protractor.js" type="protractor">
6312
- it('should auto compile', function() {
6313
- var textarea = $('textarea');
6314
- var output = $('div[compile]');
6315
- // The initial state reads 'Hello Angular'.
6316
- expect(output.getText()).toBe('Hello Angular');
6317
- textarea.clear();
6318
- textarea.sendKeys('{{name}}!');
6319
- expect(output.getText()).toBe('Angular!');
6320
- });
6321
- </file>
6322
- </example>
6323
-
6324
- *
6325
- *
6326
- * @param {string|DOMElement} element Element or HTML string to compile into a template function.
6327
- * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED.
6328
- *
6329
- * <div class="alert alert-error">
6330
- * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it
6331
- * e.g. will not use the right outer scope. Please pass the transclude function as a
6332
- * `parentBoundTranscludeFn` to the link function instead.
6333
- * </div>
6334
- *
6335
- * @param {number} maxPriority only apply directives lower than given priority (Only effects the
6336
- * root element(s), not their children)
6337
- * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template
6338
- * (a DOM element/tree) to a scope. Where:
6339
- *
6340
- * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.
6341
- * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the
6342
- * `template` and call the `cloneAttachFn` function allowing the caller to attach the
6343
- * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is
6344
- * called as: <br> `cloneAttachFn(clonedElement, scope)` where:
6345
- *
6346
- * * `clonedElement` - is a clone of the original `element` passed into the compiler.
6347
- * * `scope` - is the current scope with which the linking function is working with.
6348
- *
6349
- * * `options` - An optional object hash with linking options. If `options` is provided, then the following
6350
- * keys may be used to control linking behavior:
6351
- *
6352
- * * `parentBoundTranscludeFn` - the transclude function made available to
6353
- * directives; if given, it will be passed through to the link functions of
6354
- * directives found in `element` during compilation.
6355
- * * `transcludeControllers` - an object hash with keys that map controller names
6356
- * to controller instances; if given, it will make the controllers
6357
- * available to directives.
6358
- * * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add
6359
- * the cloned elements; only needed for transcludes that are allowed to contain non html
6360
- * elements (e.g. SVG elements). See also the directive.controller property.
6361
- *
6362
- * Calling the linking function returns the element of the template. It is either the original
6363
- * element passed in, or the clone of the element if the `cloneAttachFn` is provided.
6364
- *
6365
- * After linking the view is not updated until after a call to $digest which typically is done by
6366
- * Angular automatically.
6367
- *
6368
- * If you need access to the bound view, there are two ways to do it:
6369
- *
6370
- * - If you are not asking the linking function to clone the template, create the DOM element(s)
6371
- * before you send them to the compiler and keep this reference around.
6372
- * ```js
6373
- * var element = $compile('<p>{{total}}</p>')(scope);
6374
- * ```
6375
- *
6376
- * - if on the other hand, you need the element to be cloned, the view reference from the original
6377
- * example would not point to the clone, but rather to the original template that was cloned. In
6378
- * this case, you can access the clone via the cloneAttachFn:
6379
- * ```js
6380
- * var templateElement = angular.element('<p>{{total}}</p>'),
6381
- * scope = ....;
6382
- *
6383
- * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {
6384
- * //attach the clone to DOM document at the right place
6385
- * });
6386
- *
6387
- * //now we have reference to the cloned DOM via `clonedElement`
6388
- * ```
6389
- *
6390
- *
6391
- * For information on how the compiler works, see the
6392
- * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.
6393
- */
6394
-
6395
-var $compileMinErr = minErr('$compile');
6396
-
6397
-/**
6398
- * @ngdoc provider
6399
- * @name $compileProvider
6400
- *
6401
- * @description
6402
- */
6403
-$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];
6404
-function $CompileProvider($provide, $$sanitizeUriProvider) {
6405
- var hasDirectives = {},
6406
- Suffix = 'Directive',
6407
- COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/,
6408
- CLASS_DIRECTIVE_REGEXP = /(([\w\-]+)(?:\:([^;]+))?;?)/,
6409
- ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),
6410
- REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/;
6411
-
6412
- // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes
6413
- // The assumption is that future DOM event attribute names will begin with
6414
- // 'on' and be composed of only English letters.
6415
- var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;
6416
-
6417
- function parseIsolateBindings(scope, directiveName) {
6418
- var LOCAL_REGEXP = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/;
6419
-
6420
- var bindings = {};
6421
-
6422
- forEach(scope, function(definition, scopeName) {
6423
- var match = definition.match(LOCAL_REGEXP);
6424
-
6425
- if (!match) {
6426
- throw $compileMinErr('iscp',
6427
- "Invalid isolate scope definition for directive '{0}'." +
6428
- " Definition: {... {1}: '{2}' ...}",
6429
- directiveName, scopeName, definition);
6430
- }
6431
-
6432
- bindings[scopeName] = {
6433
- mode: match[1][0],
6434
- collection: match[2] === '*',
6435
- optional: match[3] === '?',
6436
- attrName: match[4] || scopeName
6437
- };
6438
- });
6439
-
6440
- return bindings;
6441
- }
6442
-
6443
- /**
6444
- * @ngdoc method
6445
- * @name $compileProvider#directive
6446
- * @kind function
6447
- *
6448
- * @description
6449
- * Register a new directive with the compiler.
6450
- *
6451
- * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which
6452
- * will match as <code>ng-bind</code>), or an object map of directives where the keys are the
6453
- * names and the values are the factories.
6454
- * @param {Function|Array} directiveFactory An injectable directive factory function. See
6455
- * {@link guide/directive} for more info.
6456
- * @returns {ng.$compileProvider} Self for chaining.
6457
- */
6458
- this.directive = function registerDirective(name, directiveFactory) {
6459
- assertNotHasOwnProperty(name, 'directive');
6460
- if (isString(name)) {
6461
- assertArg(directiveFactory, 'directiveFactory');
6462
- if (!hasDirectives.hasOwnProperty(name)) {
6463
- hasDirectives[name] = [];
6464
- $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',
6465
- function($injector, $exceptionHandler) {
6466
- var directives = [];
6467
- forEach(hasDirectives[name], function(directiveFactory, index) {
6468
- try {
6469
- var directive = $injector.invoke(directiveFactory);
6470
- if (isFunction(directive)) {
6471
- directive = { compile: valueFn(directive) };
6472
- } else if (!directive.compile && directive.link) {
6473
- directive.compile = valueFn(directive.link);
6474
- }
6475
- directive.priority = directive.priority || 0;
6476
- directive.index = index;
6477
- directive.name = directive.name || name;
6478
- directive.require = directive.require || (directive.controller && directive.name);
6479
- directive.restrict = directive.restrict || 'EA';
6480
- if (isObject(directive.scope)) {
6481
- directive.$$isolateBindings = parseIsolateBindings(directive.scope, directive.name);
6482
- }
6483
- directives.push(directive);
6484
- } catch (e) {
6485
- $exceptionHandler(e);
6486
- }
6487
- });
6488
- return directives;
6489
- }]);
6490
- }
6491
- hasDirectives[name].push(directiveFactory);
6492
- } else {
6493
- forEach(name, reverseParams(registerDirective));
6494
- }
6495
- return this;
6496
- };
6497
-
6498
-
6499
- /**
6500
- * @ngdoc method
6501
- * @name $compileProvider#aHrefSanitizationWhitelist
6502
- * @kind function
6503
- *
6504
- * @description
6505
- * Retrieves or overrides the default regular expression that is used for whitelisting of safe
6506
- * urls during a[href] sanitization.
6507
- *
6508
- * The sanitization is a security measure aimed at preventing XSS attacks via html links.
6509
- *
6510
- * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
6511
- * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
6512
- * regular expression. If a match is found, the original url is written into the dom. Otherwise,
6513
- * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
6514
- *
6515
- * @param {RegExp=} regexp New regexp to whitelist urls with.
6516
- * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
6517
- * chaining otherwise.
6518
- */
6519
- this.aHrefSanitizationWhitelist = function(regexp) {
6520
- if (isDefined(regexp)) {
6521
- $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);
6522
- return this;
6523
- } else {
6524
- return $$sanitizeUriProvider.aHrefSanitizationWhitelist();
6525
- }
6526
- };
6527
-
6528
-
6529
- /**
6530
- * @ngdoc method
6531
- * @name $compileProvider#imgSrcSanitizationWhitelist
6532
- * @kind function
6533
- *
6534
- * @description
6535
- * Retrieves or overrides the default regular expression that is used for whitelisting of safe
6536
- * urls during img[src] sanitization.
6537
- *
6538
- * The sanitization is a security measure aimed at prevent XSS attacks via html links.
6539
- *
6540
- * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
6541
- * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
6542
- * regular expression. If a match is found, the original url is written into the dom. Otherwise,
6543
- * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
6544
- *
6545
- * @param {RegExp=} regexp New regexp to whitelist urls with.
6546
- * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
6547
- * chaining otherwise.
6548
- */
6549
- this.imgSrcSanitizationWhitelist = function(regexp) {
6550
- if (isDefined(regexp)) {
6551
- $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);
6552
- return this;
6553
- } else {
6554
- return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();
6555
- }
6556
- };
6557
-
6558
- /**
6559
- * @ngdoc method
6560
- * @name $compileProvider#debugInfoEnabled
6561
- *
6562
- * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the
6563
- * current debugInfoEnabled state
6564
- * @returns {*} current value if used as getter or itself (chaining) if used as setter
6565
- *
6566
- * @kind function
6567
- *
6568
- * @description
6569
- * Call this method to enable/disable various debug runtime information in the compiler such as adding
6570
- * binding information and a reference to the current scope on to DOM elements.
6571
- * If enabled, the compiler will add the following to DOM elements that have been bound to the scope
6572
- * * `ng-binding` CSS class
6573
- * * `$binding` data property containing an array of the binding expressions
6574
- *
6575
- * You may want to disable this in production for a significant performance boost. See
6576
- * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.
6577
- *
6578
- * The default value is true.
6579
- */
6580
- var debugInfoEnabled = true;
6581
- this.debugInfoEnabled = function(enabled) {
6582
- if (isDefined(enabled)) {
6583
- debugInfoEnabled = enabled;
6584
- return this;
6585
- }
6586
- return debugInfoEnabled;
6587
- };
6588
-
6589
- this.$get = [
6590
- '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',
6591
- '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',
6592
- function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse,
6593
- $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) {
6594
-
6595
- var Attributes = function(element, attributesToCopy) {
6596
- if (attributesToCopy) {
6597
- var keys = Object.keys(attributesToCopy);
6598
- var i, l, key;
6599
-
6600
- for (i = 0, l = keys.length; i < l; i++) {
6601
- key = keys[i];
6602
- this[key] = attributesToCopy[key];
6603
- }
6604
- } else {
6605
- this.$attr = {};
6606
- }
6607
-
6608
- this.$$element = element;
6609
- };
6610
-
6611
- Attributes.prototype = {
6612
- /**
6613
- * @ngdoc method
6614
- * @name $compile.directive.Attributes#$normalize
6615
- * @kind function
6616
- *
6617
- * @description
6618
- * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or
6619
- * `data-`) to its normalized, camelCase form.
6620
- *
6621
- * Also there is special case for Moz prefix starting with upper case letter.
6622
- *
6623
- * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}
6624
- *
6625
- * @param {string} name Name to normalize
6626
- */
6627
- $normalize: directiveNormalize,
6628
-
6629
-
6630
- /**
6631
- * @ngdoc method
6632
- * @name $compile.directive.Attributes#$addClass
6633
- * @kind function
6634
- *
6635
- * @description
6636
- * Adds the CSS class value specified by the classVal parameter to the element. If animations
6637
- * are enabled then an animation will be triggered for the class addition.
6638
- *
6639
- * @param {string} classVal The className value that will be added to the element
6640
- */
6641
- $addClass: function(classVal) {
6642
- if (classVal && classVal.length > 0) {
6643
- $animate.addClass(this.$$element, classVal);
6644
- }
6645
- },
6646
-
6647
- /**
6648
- * @ngdoc method
6649
- * @name $compile.directive.Attributes#$removeClass
6650
- * @kind function
6651
- *
6652
- * @description
6653
- * Removes the CSS class value specified by the classVal parameter from the element. If
6654
- * animations are enabled then an animation will be triggered for the class removal.
6655
- *
6656
- * @param {string} classVal The className value that will be removed from the element
6657
- */
6658
- $removeClass: function(classVal) {
6659
- if (classVal && classVal.length > 0) {
6660
- $animate.removeClass(this.$$element, classVal);
6661
- }
6662
- },
6663
-
6664
- /**
6665
- * @ngdoc method
6666
- * @name $compile.directive.Attributes#$updateClass
6667
- * @kind function
6668
- *
6669
- * @description
6670
- * Adds and removes the appropriate CSS class values to the element based on the difference
6671
- * between the new and old CSS class values (specified as newClasses and oldClasses).
6672
- *
6673
- * @param {string} newClasses The current CSS className value
6674
- * @param {string} oldClasses The former CSS className value
6675
- */
6676
- $updateClass: function(newClasses, oldClasses) {
6677
- var toAdd = tokenDifference(newClasses, oldClasses);
6678
- if (toAdd && toAdd.length) {
6679
- $animate.addClass(this.$$element, toAdd);
6680
- }
6681
-
6682
- var toRemove = tokenDifference(oldClasses, newClasses);
6683
- if (toRemove && toRemove.length) {
6684
- $animate.removeClass(this.$$element, toRemove);
6685
- }
6686
- },
6687
-
6688
- /**
6689
- * Set a normalized attribute on the element in a way such that all directives
6690
- * can share the attribute. This function properly handles boolean attributes.
6691
- * @param {string} key Normalized key. (ie ngAttribute)
6692
- * @param {string|boolean} value The value to set. If `null` attribute will be deleted.
6693
- * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.
6694
- * Defaults to true.
6695
- * @param {string=} attrName Optional none normalized name. Defaults to key.
6696
- */
6697
- $set: function(key, value, writeAttr, attrName) {
6698
- // TODO: decide whether or not to throw an error if "class"
6699
- //is set through this function since it may cause $updateClass to
6700
- //become unstable.
6701
-
6702
- var node = this.$$element[0],
6703
- booleanKey = getBooleanAttrName(node, key),
6704
- aliasedKey = getAliasedAttrName(node, key),
6705
- observer = key,
6706
- nodeName;
6707
-
6708
- if (booleanKey) {
6709
- this.$$element.prop(key, value);
6710
- attrName = booleanKey;
6711
- } else if (aliasedKey) {
6712
- this[aliasedKey] = value;
6713
- observer = aliasedKey;
6714
- }
6715
-
6716
- this[key] = value;
6717
-
6718
- // translate normalized key to actual key
6719
- if (attrName) {
6720
- this.$attr[key] = attrName;
6721
- } else {
6722
- attrName = this.$attr[key];
6723
- if (!attrName) {
6724
- this.$attr[key] = attrName = snake_case(key, '-');
6725
- }
6726
- }
6727
-
6728
- nodeName = nodeName_(this.$$element);
6729
-
6730
- if ((nodeName === 'a' && key === 'href') ||
6731
- (nodeName === 'img' && key === 'src')) {
6732
- // sanitize a[href] and img[src] values
6733
- this[key] = value = $$sanitizeUri(value, key === 'src');
6734
- } else if (nodeName === 'img' && key === 'srcset') {
6735
- // sanitize img[srcset] values
6736
- var result = "";
6737
-
6738
- // first check if there are spaces because it's not the same pattern
6739
- var trimmedSrcset = trim(value);
6740
- // ( 999x ,| 999w ,| ,|, )
6741
- var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/;
6742
- var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/;
6743
-
6744
- // split srcset into tuple of uri and descriptor except for the last item
6745
- var rawUris = trimmedSrcset.split(pattern);
6746
-
6747
- // for each tuples
6748
- var nbrUrisWith2parts = Math.floor(rawUris.length / 2);
6749
- for (var i = 0; i < nbrUrisWith2parts; i++) {
6750
- var innerIdx = i * 2;
6751
- // sanitize the uri
6752
- result += $$sanitizeUri(trim(rawUris[innerIdx]), true);
6753
- // add the descriptor
6754
- result += (" " + trim(rawUris[innerIdx + 1]));
6755
- }
6756
-
6757
- // split the last item into uri and descriptor
6758
- var lastTuple = trim(rawUris[i * 2]).split(/\s/);
6759
-
6760
- // sanitize the last uri
6761
- result += $$sanitizeUri(trim(lastTuple[0]), true);
6762
-
6763
- // and add the last descriptor if any
6764
- if (lastTuple.length === 2) {
6765
- result += (" " + trim(lastTuple[1]));
6766
- }
6767
- this[key] = value = result;
6768
- }
6769
-
6770
- if (writeAttr !== false) {
6771
- if (value === null || value === undefined) {
6772
- this.$$element.removeAttr(attrName);
6773
- } else {
6774
- this.$$element.attr(attrName, value);
6775
- }
6776
- }
6777
-
6778
- // fire observers
6779
- var $$observers = this.$$observers;
6780
- $$observers && forEach($$observers[observer], function(fn) {
6781
- try {
6782
- fn(value);
6783
- } catch (e) {
6784
- $exceptionHandler(e);
6785
- }
6786
- });
6787
- },
6788
-
6789
-
6790
- /**
6791
- * @ngdoc method
6792
- * @name $compile.directive.Attributes#$observe
6793
- * @kind function
6794
- *
6795
- * @description
6796
- * Observes an interpolated attribute.
6797
- *
6798
- * The observer function will be invoked once during the next `$digest` following
6799
- * compilation. The observer is then invoked whenever the interpolated value
6800
- * changes.
6801
- *
6802
- * @param {string} key Normalized key. (ie ngAttribute) .
6803
- * @param {function(interpolatedValue)} fn Function that will be called whenever
6804
- the interpolated value of the attribute changes.
6805
- * See the {@link guide/directive#text-and-attribute-bindings Directives} guide for more info.
6806
- * @returns {function()} Returns a deregistration function for this observer.
6807
- */
6808
- $observe: function(key, fn) {
6809
- var attrs = this,
6810
- $$observers = (attrs.$$observers || (attrs.$$observers = createMap())),
6811
- listeners = ($$observers[key] || ($$observers[key] = []));
6812
-
6813
- listeners.push(fn);
6814
- $rootScope.$evalAsync(function() {
6815
- if (!listeners.$$inter && attrs.hasOwnProperty(key)) {
6816
- // no one registered attribute interpolation function, so lets call it manually
6817
- fn(attrs[key]);
6818
- }
6819
- });
6820
-
6821
- return function() {
6822
- arrayRemove(listeners, fn);
6823
- };
6824
- }
6825
- };
6826
-
6827
-
6828
- function safeAddClass($element, className) {
6829
- try {
6830
- $element.addClass(className);
6831
- } catch (e) {
6832
- // ignore, since it means that we are trying to set class on
6833
- // SVG element, where class name is read-only.
6834
- }
6835
- }
6836
-
6837
-
6838
- var startSymbol = $interpolate.startSymbol(),
6839
- endSymbol = $interpolate.endSymbol(),
6840
- denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}')
6841
- ? identity
6842
- : function denormalizeTemplate(template) {
6843
- return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol);
6844
- },
6845
- NG_ATTR_BINDING = /^ngAttr[A-Z]/;
6846
-
6847
- compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) {
6848
- var bindings = $element.data('$binding') || [];
6849
-
6850
- if (isArray(binding)) {
6851
- bindings = bindings.concat(binding);
6852
- } else {
6853
- bindings.push(binding);
6854
- }
6855
-
6856
- $element.data('$binding', bindings);
6857
- } : noop;
6858
-
6859
- compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) {
6860
- safeAddClass($element, 'ng-binding');
6861
- } : noop;
6862
-
6863
- compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {
6864
- var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';
6865
- $element.data(dataName, scope);
6866
- } : noop;
6867
-
6868
- compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) {
6869
- safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');
6870
- } : noop;
6871
-
6872
- return compile;
6873
-
6874
- //================================
6875
-
6876
- function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,
6877
- previousCompileContext) {
6878
- if (!($compileNodes instanceof jqLite)) {
6879
- // jquery always rewraps, whereas we need to preserve the original selector so that we can
6880
- // modify it.
6881
- $compileNodes = jqLite($compileNodes);
6882
- }
6883
- // We can not compile top level text elements since text nodes can be merged and we will
6884
- // not be able to attach scope data to them, so we will wrap them in <span>
6885
- forEach($compileNodes, function(node, index) {
6886
- if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\S+/) /* non-empty */ ) {
6887
- $compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0];
6888
- }
6889
- });
6890
- var compositeLinkFn =
6891
- compileNodes($compileNodes, transcludeFn, $compileNodes,
6892
- maxPriority, ignoreDirective, previousCompileContext);
6893
- compile.$$addScopeClass($compileNodes);
6894
- var namespace = null;
6895
- return function publicLinkFn(scope, cloneConnectFn, options) {
6896
- assertArg(scope, 'scope');
6897
-
6898
- options = options || {};
6899
- var parentBoundTranscludeFn = options.parentBoundTranscludeFn,
6900
- transcludeControllers = options.transcludeControllers,
6901
- futureParentElement = options.futureParentElement;
6902
-
6903
- // When `parentBoundTranscludeFn` is passed, it is a
6904
- // `controllersBoundTransclude` function (it was previously passed
6905
- // as `transclude` to directive.link) so we must unwrap it to get
6906
- // its `boundTranscludeFn`
6907
- if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) {
6908
- parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude;
6909
- }
6910
-
6911
- if (!namespace) {
6912
- namespace = detectNamespaceForChildElements(futureParentElement);
6913
- }
6914
- var $linkNode;
6915
- if (namespace !== 'html') {
6916
- // When using a directive with replace:true and templateUrl the $compileNodes
6917
- // (or a child element inside of them)
6918
- // might change, so we need to recreate the namespace adapted compileNodes
6919
- // for call to the link function.
6920
- // Note: This will already clone the nodes...
6921
- $linkNode = jqLite(
6922
- wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html())
6923
- );
6924
- } else if (cloneConnectFn) {
6925
- // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart
6926
- // and sometimes changes the structure of the DOM.
6927
- $linkNode = JQLitePrototype.clone.call($compileNodes);
6928
- } else {
6929
- $linkNode = $compileNodes;
6930
- }
6931
-
6932
- if (transcludeControllers) {
6933
- for (var controllerName in transcludeControllers) {
6934
- $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance);
6935
- }
6936
- }
6937
-
6938
- compile.$$addScopeInfo($linkNode, scope);
6939
-
6940
- if (cloneConnectFn) cloneConnectFn($linkNode, scope);
6941
- if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);
6942
- return $linkNode;
6943
- };
6944
- }
6945
-
6946
- function detectNamespaceForChildElements(parentElement) {
6947
- // TODO: Make this detect MathML as well...
6948
- var node = parentElement && parentElement[0];
6949
- if (!node) {
6950
- return 'html';
6951
- } else {
6952
- return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg' : 'html';
6953
- }
6954
- }
6955
-
6956
- /**
6957
- * Compile function matches each node in nodeList against the directives. Once all directives
6958
- * for a particular node are collected their compile functions are executed. The compile
6959
- * functions return values - the linking functions - are combined into a composite linking
6960
- * function, which is the a linking function for the node.
6961
- *
6962
- * @param {NodeList} nodeList an array of nodes or NodeList to compile
6963
- * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
6964
- * scope argument is auto-generated to the new child of the transcluded parent scope.
6965
- * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then
6966
- * the rootElement must be set the jqLite collection of the compile root. This is
6967
- * needed so that the jqLite collection items can be replaced with widgets.
6968
- * @param {number=} maxPriority Max directive priority.
6969
- * @returns {Function} A composite linking function of all of the matched directives or null.
6970
- */
6971
- function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,
6972
- previousCompileContext) {
6973
- var linkFns = [],
6974
- attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;
6975
-
6976
- for (var i = 0; i < nodeList.length; i++) {
6977
- attrs = new Attributes();
6978
-
6979
- // we must always refer to nodeList[i] since the nodes can be replaced underneath us.
6980
- directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,
6981
- ignoreDirective);
6982
-
6983
- nodeLinkFn = (directives.length)
6984
- ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,
6985
- null, [], [], previousCompileContext)
6986
- : null;
6987
-
6988
- if (nodeLinkFn && nodeLinkFn.scope) {
6989
- compile.$$addScopeClass(attrs.$$element);
6990
- }
6991
-
6992
- childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||
6993
- !(childNodes = nodeList[i].childNodes) ||
6994
- !childNodes.length)
6995
- ? null
6996
- : compileNodes(childNodes,
6997
- nodeLinkFn ? (
6998
- (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement)
6999
- && nodeLinkFn.transclude) : transcludeFn);
7000
-
7001
- if (nodeLinkFn || childLinkFn) {
7002
- linkFns.push(i, nodeLinkFn, childLinkFn);
7003
- linkFnFound = true;
7004
- nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn;
7005
- }
7006
-
7007
- //use the previous context only for the first element in the virtual group
7008
- previousCompileContext = null;
7009
- }
7010
-
7011
- // return a linking function if we have found anything, null otherwise
7012
- return linkFnFound ? compositeLinkFn : null;
7013
-
7014
- function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) {
7015
- var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn;
7016
- var stableNodeList;
7017
-
7018
-
7019
- if (nodeLinkFnFound) {
7020
- // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our
7021
- // offsets don't get screwed up
7022
- var nodeListLength = nodeList.length;
7023
- stableNodeList = new Array(nodeListLength);
7024
-
7025
- // create a sparse array by only copying the elements which have a linkFn
7026
- for (i = 0; i < linkFns.length; i+=3) {
7027
- idx = linkFns[i];
7028
- stableNodeList[idx] = nodeList[idx];
7029
- }
7030
- } else {
7031
- stableNodeList = nodeList;
7032
- }
7033
-
7034
- for (i = 0, ii = linkFns.length; i < ii;) {
7035
- node = stableNodeList[linkFns[i++]];
7036
- nodeLinkFn = linkFns[i++];
7037
- childLinkFn = linkFns[i++];
7038
-
7039
- if (nodeLinkFn) {
7040
- if (nodeLinkFn.scope) {
7041
- childScope = scope.$new();
7042
- compile.$$addScopeInfo(jqLite(node), childScope);
7043
- } else {
7044
- childScope = scope;
7045
- }
7046
-
7047
- if (nodeLinkFn.transcludeOnThisElement) {
7048
- childBoundTranscludeFn = createBoundTranscludeFn(
7049
- scope, nodeLinkFn.transclude, parentBoundTranscludeFn,
7050
- nodeLinkFn.elementTranscludeOnThisElement);
7051
-
7052
- } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) {
7053
- childBoundTranscludeFn = parentBoundTranscludeFn;
7054
-
7055
- } else if (!parentBoundTranscludeFn && transcludeFn) {
7056
- childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn);
7057
-
7058
- } else {
7059
- childBoundTranscludeFn = null;
7060
- }
7061
-
7062
- nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn);
7063
-
7064
- } else if (childLinkFn) {
7065
- childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn);
7066
- }
7067
- }
7068
- }
7069
- }
7070
-
7071
- function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn, elementTransclusion) {
7072
-
7073
- var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {
7074
-
7075
- if (!transcludedScope) {
7076
- transcludedScope = scope.$new(false, containingScope);
7077
- transcludedScope.$$transcluded = true;
7078
- }
7079
-
7080
- return transcludeFn(transcludedScope, cloneFn, {
7081
- parentBoundTranscludeFn: previousBoundTranscludeFn,
7082
- transcludeControllers: controllers,
7083
- futureParentElement: futureParentElement
7084
- });
7085
- };
7086
-
7087
- return boundTranscludeFn;
7088
- }
7089
-
7090
- /**
7091
- * Looks for directives on the given node and adds them to the directive collection which is
7092
- * sorted.
7093
- *
7094
- * @param node Node to search.
7095
- * @param directives An array to which the directives are added to. This array is sorted before
7096
- * the function returns.
7097
- * @param attrs The shared attrs object which is used to populate the normalized attributes.
7098
- * @param {number=} maxPriority Max directive priority.
7099
- */
7100
- function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {
7101
- var nodeType = node.nodeType,
7102
- attrsMap = attrs.$attr,
7103
- match,
7104
- className;
7105
-
7106
- switch (nodeType) {
7107
- case NODE_TYPE_ELEMENT: /* Element */
7108
- // use the node name: <directive>
7109
- addDirective(directives,
7110
- directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);
7111
-
7112
- // iterate over the attributes
7113
- for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,
7114
- j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
7115
- var attrStartName = false;
7116
- var attrEndName = false;
7117
-
7118
- attr = nAttrs[j];
7119
- name = attr.name;
7120
- value = trim(attr.value);
7121
-
7122
- // support ngAttr attribute binding
7123
- ngAttrName = directiveNormalize(name);
7124
- if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {
7125
- name = snake_case(ngAttrName.substr(6), '-');
7126
- }
7127
-
7128
- var directiveNName = ngAttrName.replace(/(Start|End)$/, '');
7129
- if (directiveIsMultiElement(directiveNName)) {
7130
- if (ngAttrName === directiveNName + 'Start') {
7131
- attrStartName = name;
7132
- attrEndName = name.substr(0, name.length - 5) + 'end';
7133
- name = name.substr(0, name.length - 6);
7134
- }
7135
- }
7136
-
7137
- nName = directiveNormalize(name.toLowerCase());
7138
- attrsMap[nName] = name;
7139
- if (isNgAttr || !attrs.hasOwnProperty(nName)) {
7140
- attrs[nName] = value;
7141
- if (getBooleanAttrName(node, nName)) {
7142
- attrs[nName] = true; // presence means true
7143
- }
7144
- }
7145
- addAttrInterpolateDirective(node, directives, value, nName, isNgAttr);
7146
- addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,
7147
- attrEndName);
7148
- }
7149
-
7150
- // use class as directive
7151
- className = node.className;
7152
- if (isString(className) && className !== '') {
7153
- while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {
7154
- nName = directiveNormalize(match[2]);
7155
- if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {
7156
- attrs[nName] = trim(match[3]);
7157
- }
7158
- className = className.substr(match.index + match[0].length);
7159
- }
7160
- }
7161
- break;
7162
- case NODE_TYPE_TEXT: /* Text Node */
7163
- addTextInterpolateDirective(directives, node.nodeValue);
7164
- break;
7165
- case NODE_TYPE_COMMENT: /* Comment */
7166
- try {
7167
- match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);
7168
- if (match) {
7169
- nName = directiveNormalize(match[1]);
7170
- if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {
7171
- attrs[nName] = trim(match[2]);
7172
- }
7173
- }
7174
- } catch (e) {
7175
- // turns out that under some circumstances IE9 throws errors when one attempts to read
7176
- // comment's node value.
7177
- // Just ignore it and continue. (Can't seem to reproduce in test case.)
7178
- }
7179
- break;
7180
- }
7181
-
7182
- directives.sort(byPriority);
7183
- return directives;
7184
- }
7185
-
7186
- /**
7187
- * Given a node with an directive-start it collects all of the siblings until it finds
7188
- * directive-end.
7189
- * @param node
7190
- * @param attrStart
7191
- * @param attrEnd
7192
- * @returns {*}
7193
- */
7194
- function groupScan(node, attrStart, attrEnd) {
7195
- var nodes = [];
7196
- var depth = 0;
7197
- if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {
7198
- do {
7199
- if (!node) {
7200
- throw $compileMinErr('uterdir',
7201
- "Unterminated attribute, found '{0}' but no matching '{1}' found.",
7202
- attrStart, attrEnd);
7203
- }
7204
- if (node.nodeType == NODE_TYPE_ELEMENT) {
7205
- if (node.hasAttribute(attrStart)) depth++;
7206
- if (node.hasAttribute(attrEnd)) depth--;
7207
- }
7208
- nodes.push(node);
7209
- node = node.nextSibling;
7210
- } while (depth > 0);
7211
- } else {
7212
- nodes.push(node);
7213
- }
7214
-
7215
- return jqLite(nodes);
7216
- }
7217
-
7218
- /**
7219
- * Wrapper for linking function which converts normal linking function into a grouped
7220
- * linking function.
7221
- * @param linkFn
7222
- * @param attrStart
7223
- * @param attrEnd
7224
- * @returns {Function}
7225
- */
7226
- function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {
7227
- return function(scope, element, attrs, controllers, transcludeFn) {
7228
- element = groupScan(element[0], attrStart, attrEnd);
7229
- return linkFn(scope, element, attrs, controllers, transcludeFn);
7230
- };
7231
- }
7232
-
7233
- /**
7234
- * Once the directives have been collected, their compile functions are executed. This method
7235
- * is responsible for inlining directive templates as well as terminating the application
7236
- * of the directives if the terminal directive has been reached.
7237
- *
7238
- * @param {Array} directives Array of collected directives to execute their compile function.
7239
- * this needs to be pre-sorted by priority order.
7240
- * @param {Node} compileNode The raw DOM node to apply the compile functions to
7241
- * @param {Object} templateAttrs The shared attribute function
7242
- * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
7243
- * scope argument is auto-generated to the new
7244
- * child of the transcluded parent scope.
7245
- * @param {JQLite} jqCollection If we are working on the root of the compile tree then this
7246
- * argument has the root jqLite array so that we can replace nodes
7247
- * on it.
7248
- * @param {Object=} originalReplaceDirective An optional directive that will be ignored when
7249
- * compiling the transclusion.
7250
- * @param {Array.<Function>} preLinkFns
7251
- * @param {Array.<Function>} postLinkFns
7252
- * @param {Object} previousCompileContext Context used for previous compilation of the current
7253
- * node
7254
- * @returns {Function} linkFn
7255
- */
7256
- function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,
7257
- jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,
7258
- previousCompileContext) {
7259
- previousCompileContext = previousCompileContext || {};
7260
-
7261
- var terminalPriority = -Number.MAX_VALUE,
7262
- newScopeDirective,
7263
- controllerDirectives = previousCompileContext.controllerDirectives,
7264
- controllers,
7265
- newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,
7266
- templateDirective = previousCompileContext.templateDirective,
7267
- nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,
7268
- hasTranscludeDirective = false,
7269
- hasTemplate = false,
7270
- hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,
7271
- $compileNode = templateAttrs.$$element = jqLite(compileNode),
7272
- directive,
7273
- directiveName,
7274
- $template,
7275
- replaceDirective = originalReplaceDirective,
7276
- childTranscludeFn = transcludeFn,
7277
- linkFn,
7278
- directiveValue;
7279
-
7280
- // executes all directives on the current element
7281
- for (var i = 0, ii = directives.length; i < ii; i++) {
7282
- directive = directives[i];
7283
- var attrStart = directive.$$start;
7284
- var attrEnd = directive.$$end;
7285
-
7286
- // collect multiblock sections
7287
- if (attrStart) {
7288
- $compileNode = groupScan(compileNode, attrStart, attrEnd);
7289
- }
7290
- $template = undefined;
7291
-
7292
- if (terminalPriority > directive.priority) {
7293
- break; // prevent further processing of directives
7294
- }
7295
-
7296
- if (directiveValue = directive.scope) {
7297
-
7298
- // skip the check for directives with async templates, we'll check the derived sync
7299
- // directive when the template arrives
7300
- if (!directive.templateUrl) {
7301
- if (isObject(directiveValue)) {
7302
- // This directive is trying to add an isolated scope.
7303
- // Check that there is no scope of any kind already
7304
- assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective,
7305
- directive, $compileNode);
7306
- newIsolateScopeDirective = directive;
7307
- } else {
7308
- // This directive is trying to add a child scope.
7309
- // Check that there is no isolated scope already
7310
- assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,
7311
- $compileNode);
7312
- }
7313
- }
7314
-
7315
- newScopeDirective = newScopeDirective || directive;
7316
- }
7317
-
7318
- directiveName = directive.name;
7319
-
7320
- if (!directive.templateUrl && directive.controller) {
7321
- directiveValue = directive.controller;
7322
- controllerDirectives = controllerDirectives || {};
7323
- assertNoDuplicate("'" + directiveName + "' controller",
7324
- controllerDirectives[directiveName], directive, $compileNode);
7325
- controllerDirectives[directiveName] = directive;
7326
- }
7327
-
7328
- if (directiveValue = directive.transclude) {
7329
- hasTranscludeDirective = true;
7330
-
7331
- // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.
7332
- // This option should only be used by directives that know how to safely handle element transclusion,
7333
- // where the transcluded nodes are added or replaced after linking.
7334
- if (!directive.$$tlb) {
7335
- assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);
7336
- nonTlbTranscludeDirective = directive;
7337
- }
7338
-
7339
- if (directiveValue == 'element') {
7340
- hasElementTranscludeDirective = true;
7341
- terminalPriority = directive.priority;
7342
- $template = $compileNode;
7343
- $compileNode = templateAttrs.$$element =
7344
- jqLite(document.createComment(' ' + directiveName + ': ' +
7345
- templateAttrs[directiveName] + ' '));
7346
- compileNode = $compileNode[0];
7347
- replaceWith(jqCollection, sliceArgs($template), compileNode);
7348
-
7349
- childTranscludeFn = compile($template, transcludeFn, terminalPriority,
7350
- replaceDirective && replaceDirective.name, {
7351
- // Don't pass in:
7352
- // - controllerDirectives - otherwise we'll create duplicates controllers
7353
- // - newIsolateScopeDirective or templateDirective - combining templates with
7354
- // element transclusion doesn't make sense.
7355
- //
7356
- // We need only nonTlbTranscludeDirective so that we prevent putting transclusion
7357
- // on the same element more than once.
7358
- nonTlbTranscludeDirective: nonTlbTranscludeDirective
7359
- });
7360
- } else {
7361
- $template = jqLite(jqLiteClone(compileNode)).contents();
7362
- $compileNode.empty(); // clear contents
7363
- childTranscludeFn = compile($template, transcludeFn);
7364
- }
7365
- }
7366
-
7367
- if (directive.template) {
7368
- hasTemplate = true;
7369
- assertNoDuplicate('template', templateDirective, directive, $compileNode);
7370
- templateDirective = directive;
7371
-
7372
- directiveValue = (isFunction(directive.template))
7373
- ? directive.template($compileNode, templateAttrs)
7374
- : directive.template;
7375
-
7376
- directiveValue = denormalizeTemplate(directiveValue);
7377
-
7378
- if (directive.replace) {
7379
- replaceDirective = directive;
7380
- if (jqLiteIsTextNode(directiveValue)) {
7381
- $template = [];
7382
- } else {
7383
- $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue)));
7384
- }
7385
- compileNode = $template[0];
7386
-
7387
- if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
7388
- throw $compileMinErr('tplrt',
7389
- "Template for directive '{0}' must have exactly one root element. {1}",
7390
- directiveName, '');
7391
- }
7392
-
7393
- replaceWith(jqCollection, $compileNode, compileNode);
7394
-
7395
- var newTemplateAttrs = {$attr: {}};
7396
-
7397
- // combine directives from the original node and from the template:
7398
- // - take the array of directives for this element
7399
- // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)
7400
- // - collect directives from the template and sort them by priority
7401
- // - combine directives as: processed + template + unprocessed
7402
- var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);
7403
- var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));
7404
-
7405
- if (newIsolateScopeDirective) {
7406
- markDirectivesAsIsolate(templateDirectives);
7407
- }
7408
- directives = directives.concat(templateDirectives).concat(unprocessedDirectives);
7409
- mergeTemplateAttributes(templateAttrs, newTemplateAttrs);
7410
-
7411
- ii = directives.length;
7412
- } else {
7413
- $compileNode.html(directiveValue);
7414
- }
7415
- }
7416
-
7417
- if (directive.templateUrl) {
7418
- hasTemplate = true;
7419
- assertNoDuplicate('template', templateDirective, directive, $compileNode);
7420
- templateDirective = directive;
7421
-
7422
- if (directive.replace) {
7423
- replaceDirective = directive;
7424
- }
7425
-
7426
- nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,
7427
- templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {
7428
- controllerDirectives: controllerDirectives,
7429
- newIsolateScopeDirective: newIsolateScopeDirective,
7430
- templateDirective: templateDirective,
7431
- nonTlbTranscludeDirective: nonTlbTranscludeDirective
7432
- });
7433
- ii = directives.length;
7434
- } else if (directive.compile) {
7435
- try {
7436
- linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);
7437
- if (isFunction(linkFn)) {
7438
- addLinkFns(null, linkFn, attrStart, attrEnd);
7439
- } else if (linkFn) {
7440
- addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);
7441
- }
7442
- } catch (e) {
7443
- $exceptionHandler(e, startingTag($compileNode));
7444
- }
7445
- }
7446
-
7447
- if (directive.terminal) {
7448
- nodeLinkFn.terminal = true;
7449
- terminalPriority = Math.max(terminalPriority, directive.priority);
7450
- }
7451
-
7452
- }
7453
-
7454
- nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;
7455
- nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective;
7456
- nodeLinkFn.elementTranscludeOnThisElement = hasElementTranscludeDirective;
7457
- nodeLinkFn.templateOnThisElement = hasTemplate;
7458
- nodeLinkFn.transclude = childTranscludeFn;
7459
-
7460
- previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;
7461
-
7462
- // might be normal or delayed nodeLinkFn depending on if templateUrl is present
7463
- return nodeLinkFn;
7464
-
7465
- ////////////////////
7466
-
7467
- function addLinkFns(pre, post, attrStart, attrEnd) {
7468
- if (pre) {
7469
- if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);
7470
- pre.require = directive.require;
7471
- pre.directiveName = directiveName;
7472
- if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
7473
- pre = cloneAndAnnotateFn(pre, {isolateScope: true});
7474
- }
7475
- preLinkFns.push(pre);
7476
- }
7477
- if (post) {
7478
- if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);
7479
- post.require = directive.require;
7480
- post.directiveName = directiveName;
7481
- if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
7482
- post = cloneAndAnnotateFn(post, {isolateScope: true});
7483
- }
7484
- postLinkFns.push(post);
7485
- }
7486
- }
7487
-
7488
-
7489
- function getControllers(directiveName, require, $element, elementControllers) {
7490
- var value, retrievalMethod = 'data', optional = false;
7491
- var $searchElement = $element;
7492
- var match;
7493
- if (isString(require)) {
7494
- match = require.match(REQUIRE_PREFIX_REGEXP);
7495
- require = require.substring(match[0].length);
7496
-
7497
- if (match[3]) {
7498
- if (match[1]) match[3] = null;
7499
- else match[1] = match[3];
7500
- }
7501
- if (match[1] === '^') {
7502
- retrievalMethod = 'inheritedData';
7503
- } else if (match[1] === '^^') {
7504
- retrievalMethod = 'inheritedData';
7505
- $searchElement = $element.parent();
7506
- }
7507
- if (match[2] === '?') {
7508
- optional = true;
7509
- }
7510
-
7511
- value = null;
7512
-
7513
- if (elementControllers && retrievalMethod === 'data') {
7514
- if (value = elementControllers[require]) {
7515
- value = value.instance;
7516
- }
7517
- }
7518
- value = value || $searchElement[retrievalMethod]('$' + require + 'Controller');
7519
-
7520
- if (!value && !optional) {
7521
- throw $compileMinErr('ctreq',
7522
- "Controller '{0}', required by directive '{1}', can't be found!",
7523
- require, directiveName);
7524
- }
7525
- return value || null;
7526
- } else if (isArray(require)) {
7527
- value = [];
7528
- forEach(require, function(require) {
7529
- value.push(getControllers(directiveName, require, $element, elementControllers));
7530
- });
7531
- }
7532
- return value;
7533
- }
7534
-
7535
-
7536
- function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {
7537
- var i, ii, linkFn, controller, isolateScope, elementControllers, transcludeFn, $element,
7538
- attrs;
7539
-
7540
- if (compileNode === linkNode) {
7541
- attrs = templateAttrs;
7542
- $element = templateAttrs.$$element;
7543
- } else {
7544
- $element = jqLite(linkNode);
7545
- attrs = new Attributes($element, templateAttrs);
7546
- }
7547
-
7548
- if (newIsolateScopeDirective) {
7549
- isolateScope = scope.$new(true);
7550
- }
7551
-
7552
- if (boundTranscludeFn) {
7553
- // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn`
7554
- // is later passed as `parentBoundTranscludeFn` to `publicLinkFn`
7555
- transcludeFn = controllersBoundTransclude;
7556
- transcludeFn.$$boundTransclude = boundTranscludeFn;
7557
- }
7558
-
7559
- if (controllerDirectives) {
7560
- // TODO: merge `controllers` and `elementControllers` into single object.
7561
- controllers = {};
7562
- elementControllers = {};
7563
- forEach(controllerDirectives, function(directive) {
7564
- var locals = {
7565
- $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,
7566
- $element: $element,
7567
- $attrs: attrs,
7568
- $transclude: transcludeFn
7569
- }, controllerInstance;
7570
-
7571
- controller = directive.controller;
7572
- if (controller == '@') {
7573
- controller = attrs[directive.name];
7574
- }
7575
-
7576
- controllerInstance = $controller(controller, locals, true, directive.controllerAs);
7577
-
7578
- // For directives with element transclusion the element is a comment,
7579
- // but jQuery .data doesn't support attaching data to comment nodes as it's hard to
7580
- // clean up (http://bugs.jquery.com/ticket/8335).
7581
- // Instead, we save the controllers for the element in a local hash and attach to .data
7582
- // later, once we have the actual element.
7583
- elementControllers[directive.name] = controllerInstance;
7584
- if (!hasElementTranscludeDirective) {
7585
- $element.data('$' + directive.name + 'Controller', controllerInstance.instance);
7586
- }
7587
-
7588
- controllers[directive.name] = controllerInstance;
7589
- });
7590
- }
7591
-
7592
- if (newIsolateScopeDirective) {
7593
- compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||
7594
- templateDirective === newIsolateScopeDirective.$$originalDirective)));
7595
- compile.$$addScopeClass($element, true);
7596
-
7597
- var isolateScopeController = controllers && controllers[newIsolateScopeDirective.name];
7598
- var isolateBindingContext = isolateScope;
7599
- if (isolateScopeController && isolateScopeController.identifier &&
7600
- newIsolateScopeDirective.bindToController === true) {
7601
- isolateBindingContext = isolateScopeController.instance;
7602
- }
7603
-
7604
- forEach(isolateScope.$$isolateBindings = newIsolateScopeDirective.$$isolateBindings, function(definition, scopeName) {
7605
- var attrName = definition.attrName,
7606
- optional = definition.optional,
7607
- mode = definition.mode, // @, =, or &
7608
- lastValue,
7609
- parentGet, parentSet, compare;
7610
-
7611
- switch (mode) {
7612
-
7613
- case '@':
7614
- attrs.$observe(attrName, function(value) {
7615
- isolateBindingContext[scopeName] = value;
7616
- });
7617
- attrs.$$observers[attrName].$$scope = scope;
7618
- if (attrs[attrName]) {
7619
- // If the attribute has been provided then we trigger an interpolation to ensure
7620
- // the value is there for use in the link fn
7621
- isolateBindingContext[scopeName] = $interpolate(attrs[attrName])(scope);
7622
- }
7623
- break;
7624
-
7625
- case '=':
7626
- if (optional && !attrs[attrName]) {
7627
- return;
7628
- }
7629
- parentGet = $parse(attrs[attrName]);
7630
- if (parentGet.literal) {
7631
- compare = equals;
7632
- } else {
7633
- compare = function(a, b) { return a === b || (a !== a && b !== b); };
7634
- }
7635
- parentSet = parentGet.assign || function() {
7636
- // reset the change, or we will throw this exception on every $digest
7637
- lastValue = isolateBindingContext[scopeName] = parentGet(scope);
7638
- throw $compileMinErr('nonassign',
7639
- "Expression '{0}' used with directive '{1}' is non-assignable!",
7640
- attrs[attrName], newIsolateScopeDirective.name);
7641
- };
7642
- lastValue = isolateBindingContext[scopeName] = parentGet(scope);
7643
- var parentValueWatch = function parentValueWatch(parentValue) {
7644
- if (!compare(parentValue, isolateBindingContext[scopeName])) {
7645
- // we are out of sync and need to copy
7646
- if (!compare(parentValue, lastValue)) {
7647
- // parent changed and it has precedence
7648
- isolateBindingContext[scopeName] = parentValue;
7649
- } else {
7650
- // if the parent can be assigned then do so
7651
- parentSet(scope, parentValue = isolateBindingContext[scopeName]);
7652
- }
7653
- }
7654
- return lastValue = parentValue;
7655
- };
7656
- parentValueWatch.$stateful = true;
7657
- var unwatch;
7658
- if (definition.collection) {
7659
- unwatch = scope.$watchCollection(attrs[attrName], parentValueWatch);
7660
- } else {
7661
- unwatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);
7662
- }
7663
- isolateScope.$on('$destroy', unwatch);
7664
- break;
7665
-
7666
- case '&':
7667
- parentGet = $parse(attrs[attrName]);
7668
- isolateBindingContext[scopeName] = function(locals) {
7669
- return parentGet(scope, locals);
7670
- };
7671
- break;
7672
- }
7673
- });
7674
- }
7675
- if (controllers) {
7676
- forEach(controllers, function(controller) {
7677
- controller();
7678
- });
7679
- controllers = null;
7680
- }
7681
-
7682
- // PRELINKING
7683
- for (i = 0, ii = preLinkFns.length; i < ii; i++) {
7684
- linkFn = preLinkFns[i];
7685
- invokeLinkFn(linkFn,
7686
- linkFn.isolateScope ? isolateScope : scope,
7687
- $element,
7688
- attrs,
7689
- linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
7690
- transcludeFn
7691
- );
7692
- }
7693
-
7694
- // RECURSION
7695
- // We only pass the isolate scope, if the isolate directive has a template,
7696
- // otherwise the child elements do not belong to the isolate directive.
7697
- var scopeToChild = scope;
7698
- if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {
7699
- scopeToChild = isolateScope;
7700
- }
7701
- childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
7702
-
7703
- // POSTLINKING
7704
- for (i = postLinkFns.length - 1; i >= 0; i--) {
7705
- linkFn = postLinkFns[i];
7706
- invokeLinkFn(linkFn,
7707
- linkFn.isolateScope ? isolateScope : scope,
7708
- $element,
7709
- attrs,
7710
- linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
7711
- transcludeFn
7712
- );
7713
- }
7714
-
7715
- // This is the function that is injected as `$transclude`.
7716
- // Note: all arguments are optional!
7717
- function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) {
7718
- var transcludeControllers;
7719
-
7720
- // No scope passed in:
7721
- if (!isScope(scope)) {
7722
- futureParentElement = cloneAttachFn;
7723
- cloneAttachFn = scope;
7724
- scope = undefined;
7725
- }
7726
-
7727
- if (hasElementTranscludeDirective) {
7728
- transcludeControllers = elementControllers;
7729
- }
7730
- if (!futureParentElement) {
7731
- futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;
7732
- }
7733
- return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);
7734
- }
7735
- }
7736
- }
7737
-
7738
- function markDirectivesAsIsolate(directives) {
7739
- // mark all directives as needing isolate scope.
7740
- for (var j = 0, jj = directives.length; j < jj; j++) {
7741
- directives[j] = inherit(directives[j], {$$isolateScope: true});
7742
- }
7743
- }
7744
-
7745
- /**
7746
- * looks up the directive and decorates it with exception handling and proper parameters. We
7747
- * call this the boundDirective.
7748
- *
7749
- * @param {string} name name of the directive to look up.
7750
- * @param {string} location The directive must be found in specific format.
7751
- * String containing any of theses characters:
7752
- *
7753
- * * `E`: element name
7754
- * * `A': attribute
7755
- * * `C`: class
7756
- * * `M`: comment
7757
- * @returns {boolean} true if directive was added.
7758
- */
7759
- function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,
7760
- endAttrName) {
7761
- if (name === ignoreDirective) return null;
7762
- var match = null;
7763
- if (hasDirectives.hasOwnProperty(name)) {
7764
- for (var directive, directives = $injector.get(name + Suffix),
7765
- i = 0, ii = directives.length; i < ii; i++) {
7766
- try {
7767
- directive = directives[i];
7768
- if ((maxPriority === undefined || maxPriority > directive.priority) &&
7769
- directive.restrict.indexOf(location) != -1) {
7770
- if (startAttrName) {
7771
- directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});
7772
- }
7773
- tDirectives.push(directive);
7774
- match = directive;
7775
- }
7776
- } catch (e) { $exceptionHandler(e); }
7777
- }
7778
- }
7779
- return match;
7780
- }
7781
-
7782
-
7783
- /**
7784
- * looks up the directive and returns true if it is a multi-element directive,
7785
- * and therefore requires DOM nodes between -start and -end markers to be grouped
7786
- * together.
7787
- *
7788
- * @param {string} name name of the directive to look up.
7789
- * @returns true if directive was registered as multi-element.
7790
- */
7791
- function directiveIsMultiElement(name) {
7792
- if (hasDirectives.hasOwnProperty(name)) {
7793
- for (var directive, directives = $injector.get(name + Suffix),
7794
- i = 0, ii = directives.length; i < ii; i++) {
7795
- directive = directives[i];
7796
- if (directive.multiElement) {
7797
- return true;
7798
- }
7799
- }
7800
- }
7801
- return false;
7802
- }
7803
-
7804
- /**
7805
- * When the element is replaced with HTML template then the new attributes
7806
- * on the template need to be merged with the existing attributes in the DOM.
7807
- * The desired effect is to have both of the attributes present.
7808
- *
7809
- * @param {object} dst destination attributes (original DOM)
7810
- * @param {object} src source attributes (from the directive template)
7811
- */
7812
- function mergeTemplateAttributes(dst, src) {
7813
- var srcAttr = src.$attr,
7814
- dstAttr = dst.$attr,
7815
- $element = dst.$$element;
7816
-
7817
- // reapply the old attributes to the new element
7818
- forEach(dst, function(value, key) {
7819
- if (key.charAt(0) != '$') {
7820
- if (src[key] && src[key] !== value) {
7821
- value += (key === 'style' ? ';' : ' ') + src[key];
7822
- }
7823
- dst.$set(key, value, true, srcAttr[key]);
7824
- }
7825
- });
7826
-
7827
- // copy the new attributes on the old attrs object
7828
- forEach(src, function(value, key) {
7829
- if (key == 'class') {
7830
- safeAddClass($element, value);
7831
- dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;
7832
- } else if (key == 'style') {
7833
- $element.attr('style', $element.attr('style') + ';' + value);
7834
- dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;
7835
- // `dst` will never contain hasOwnProperty as DOM parser won't let it.
7836
- // You will get an "InvalidCharacterError: DOM Exception 5" error if you
7837
- // have an attribute like "has-own-property" or "data-has-own-property", etc.
7838
- } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {
7839
- dst[key] = value;
7840
- dstAttr[key] = srcAttr[key];
7841
- }
7842
- });
7843
- }
7844
-
7845
-
7846
- function compileTemplateUrl(directives, $compileNode, tAttrs,
7847
- $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {
7848
- var linkQueue = [],
7849
- afterTemplateNodeLinkFn,
7850
- afterTemplateChildLinkFn,
7851
- beforeTemplateCompileNode = $compileNode[0],
7852
- origAsyncDirective = directives.shift(),
7853
- // The fact that we have to copy and patch the directive seems wrong!
7854
- derivedSyncDirective = extend({}, origAsyncDirective, {
7855
- templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective
7856
- }),
7857
- templateUrl = (isFunction(origAsyncDirective.templateUrl))
7858
- ? origAsyncDirective.templateUrl($compileNode, tAttrs)
7859
- : origAsyncDirective.templateUrl,
7860
- templateNamespace = origAsyncDirective.templateNamespace;
7861
-
7862
- $compileNode.empty();
7863
-
7864
- $templateRequest($sce.getTrustedResourceUrl(templateUrl))
7865
- .then(function(content) {
7866
- var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;
7867
-
7868
- content = denormalizeTemplate(content);
7869
-
7870
- if (origAsyncDirective.replace) {
7871
- if (jqLiteIsTextNode(content)) {
7872
- $template = [];
7873
- } else {
7874
- $template = removeComments(wrapTemplate(templateNamespace, trim(content)));
7875
- }
7876
- compileNode = $template[0];
7877
-
7878
- if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
7879
- throw $compileMinErr('tplrt',
7880
- "Template for directive '{0}' must have exactly one root element. {1}",
7881
- origAsyncDirective.name, templateUrl);
7882
- }
7883
-
7884
- tempTemplateAttrs = {$attr: {}};
7885
- replaceWith($rootElement, $compileNode, compileNode);
7886
- var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);
7887
-
7888
- if (isObject(origAsyncDirective.scope)) {
7889
- markDirectivesAsIsolate(templateDirectives);
7890
- }
7891
- directives = templateDirectives.concat(directives);
7892
- mergeTemplateAttributes(tAttrs, tempTemplateAttrs);
7893
- } else {
7894
- compileNode = beforeTemplateCompileNode;
7895
- $compileNode.html(content);
7896
- }
7897
-
7898
- directives.unshift(derivedSyncDirective);
7899
-
7900
- afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,
7901
- childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,
7902
- previousCompileContext);
7903
- forEach($rootElement, function(node, i) {
7904
- if (node == compileNode) {
7905
- $rootElement[i] = $compileNode[0];
7906
- }
7907
- });
7908
- afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);
7909
-
7910
- while (linkQueue.length) {
7911
- var scope = linkQueue.shift(),
7912
- beforeTemplateLinkNode = linkQueue.shift(),
7913
- linkRootElement = linkQueue.shift(),
7914
- boundTranscludeFn = linkQueue.shift(),
7915
- linkNode = $compileNode[0];
7916
-
7917
- if (scope.$$destroyed) continue;
7918
-
7919
- if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {
7920
- var oldClasses = beforeTemplateLinkNode.className;
7921
-
7922
- if (!(previousCompileContext.hasElementTranscludeDirective &&
7923
- origAsyncDirective.replace)) {
7924
- // it was cloned therefore we have to clone as well.
7925
- linkNode = jqLiteClone(compileNode);
7926
- }
7927
- replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);
7928
-
7929
- // Copy in CSS classes from original node
7930
- safeAddClass(jqLite(linkNode), oldClasses);
7931
- }
7932
- if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
7933
- childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
7934
- } else {
7935
- childBoundTranscludeFn = boundTranscludeFn;
7936
- }
7937
- afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,
7938
- childBoundTranscludeFn);
7939
- }
7940
- linkQueue = null;
7941
- });
7942
-
7943
- return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {
7944
- var childBoundTranscludeFn = boundTranscludeFn;
7945
- if (scope.$$destroyed) return;
7946
- if (linkQueue) {
7947
- linkQueue.push(scope,
7948
- node,
7949
- rootElement,
7950
- childBoundTranscludeFn);
7951
- } else {
7952
- if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
7953
- childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
7954
- }
7955
- afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn);
7956
- }
7957
- };
7958
- }
7959
-
7960
-
7961
- /**
7962
- * Sorting function for bound directives.
7963
- */
7964
- function byPriority(a, b) {
7965
- var diff = b.priority - a.priority;
7966
- if (diff !== 0) return diff;
7967
- if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;
7968
- return a.index - b.index;
7969
- }
7970
-
7971
-
7972
- function assertNoDuplicate(what, previousDirective, directive, element) {
7973
- if (previousDirective) {
7974
- throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',
7975
- previousDirective.name, directive.name, what, startingTag(element));
7976
- }
7977
- }
7978
-
7979
-
7980
- function addTextInterpolateDirective(directives, text) {
7981
- var interpolateFn = $interpolate(text, true);
7982
- if (interpolateFn) {
7983
- directives.push({
7984
- priority: 0,
7985
- compile: function textInterpolateCompileFn(templateNode) {
7986
- var templateNodeParent = templateNode.parent(),
7987
- hasCompileParent = !!templateNodeParent.length;
7988
-
7989
- // When transcluding a template that has bindings in the root
7990
- // we don't have a parent and thus need to add the class during linking fn.
7991
- if (hasCompileParent) compile.$$addBindingClass(templateNodeParent);
7992
-
7993
- return function textInterpolateLinkFn(scope, node) {
7994
- var parent = node.parent();
7995
- if (!hasCompileParent) compile.$$addBindingClass(parent);
7996
- compile.$$addBindingInfo(parent, interpolateFn.expressions);
7997
- scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {
7998
- node[0].nodeValue = value;
7999
- });
8000
- };
8001
- }
8002
- });
8003
- }
8004
- }
8005
-
8006
-
8007
- function wrapTemplate(type, template) {
8008
- type = lowercase(type || 'html');
8009
- switch (type) {
8010
- case 'svg':
8011
- case 'math':
8012
- var wrapper = document.createElement('div');
8013
- wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>';
8014
- return wrapper.childNodes[0].childNodes;
8015
- default:
8016
- return template;
8017
- }
8018
- }
8019
-
8020
-
8021
- function getTrustedContext(node, attrNormalizedName) {
8022
- if (attrNormalizedName == "srcdoc") {
8023
- return $sce.HTML;
8024
- }
8025
- var tag = nodeName_(node);
8026
- // maction[xlink:href] can source SVG. It's not limited to <maction>.
8027
- if (attrNormalizedName == "xlinkHref" ||
8028
- (tag == "form" && attrNormalizedName == "action") ||
8029
- (tag != "img" && (attrNormalizedName == "src" ||
8030
- attrNormalizedName == "ngSrc"))) {
8031
- return $sce.RESOURCE_URL;
8032
- }
8033
- }
8034
-
8035
-
8036
- function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {
8037
- var interpolateFn = $interpolate(value, true);
8038
-
8039
- // no interpolation found -> ignore
8040
- if (!interpolateFn) return;
8041
-
8042
-
8043
- if (name === "multiple" && nodeName_(node) === "select") {
8044
- throw $compileMinErr("selmulti",
8045
- "Binding to the 'multiple' attribute is not supported. Element: {0}",
8046
- startingTag(node));
8047
- }
8048
-
8049
- directives.push({
8050
- priority: 100,
8051
- compile: function() {
8052
- return {
8053
- pre: function attrInterpolatePreLinkFn(scope, element, attr) {
8054
- var $$observers = (attr.$$observers || (attr.$$observers = {}));
8055
-
8056
- if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {
8057
- throw $compileMinErr('nodomevents',
8058
- "Interpolations for HTML DOM event attributes are disallowed. Please use the " +
8059
- "ng- versions (such as ng-click instead of onclick) instead.");
8060
- }
8061
-
8062
- // If the attribute was removed, then we are done
8063
- if (!attr[name]) {
8064
- return;
8065
- }
8066
-
8067
- // we need to interpolate again, in case the attribute value has been updated
8068
- // (e.g. by another directive's compile function)
8069
- interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name),
8070
- ALL_OR_NOTHING_ATTRS[name] || allOrNothing);
8071
-
8072
- // if attribute was updated so that there is no interpolation going on we don't want to
8073
- // register any observers
8074
- if (!interpolateFn) return;
8075
-
8076
- // initialize attr object so that it's ready in case we need the value for isolate
8077
- // scope initialization, otherwise the value would not be available from isolate
8078
- // directive's linking fn during linking phase
8079
- attr[name] = interpolateFn(scope);
8080
-
8081
- ($$observers[name] || ($$observers[name] = [])).$$inter = true;
8082
- (attr.$$observers && attr.$$observers[name].$$scope || scope).
8083
- $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {
8084
- //special case for class attribute addition + removal
8085
- //so that class changes can tap into the animation
8086
- //hooks provided by the $animate service. Be sure to
8087
- //skip animations when the first digest occurs (when
8088
- //both the new and the old values are the same) since
8089
- //the CSS classes are the non-interpolated values
8090
- if (name === 'class' && newValue != oldValue) {
8091
- attr.$updateClass(newValue, oldValue);
8092
- } else {
8093
- attr.$set(name, newValue);
8094
- }
8095
- });
8096
- }
8097
- };
8098
- }
8099
- });
8100
- }
8101
-
8102
-
8103
- /**
8104
- * This is a special jqLite.replaceWith, which can replace items which
8105
- * have no parents, provided that the containing jqLite collection is provided.
8106
- *
8107
- * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes
8108
- * in the root of the tree.
8109
- * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep
8110
- * the shell, but replace its DOM node reference.
8111
- * @param {Node} newNode The new DOM node.
8112
- */
8113
- function replaceWith($rootElement, elementsToRemove, newNode) {
8114
- var firstElementToRemove = elementsToRemove[0],
8115
- removeCount = elementsToRemove.length,
8116
- parent = firstElementToRemove.parentNode,
8117
- i, ii;
8118
-
8119
- if ($rootElement) {
8120
- for (i = 0, ii = $rootElement.length; i < ii; i++) {
8121
- if ($rootElement[i] == firstElementToRemove) {
8122
- $rootElement[i++] = newNode;
8123
- for (var j = i, j2 = j + removeCount - 1,
8124
- jj = $rootElement.length;
8125
- j < jj; j++, j2++) {
8126
- if (j2 < jj) {
8127
- $rootElement[j] = $rootElement[j2];
8128
- } else {
8129
- delete $rootElement[j];
8130
- }
8131
- }
8132
- $rootElement.length -= removeCount - 1;
8133
-
8134
- // If the replaced element is also the jQuery .context then replace it
8135
- // .context is a deprecated jQuery api, so we should set it only when jQuery set it
8136
- // http://api.jquery.com/context/
8137
- if ($rootElement.context === firstElementToRemove) {
8138
- $rootElement.context = newNode;
8139
- }
8140
- break;
8141
- }
8142
- }
8143
- }
8144
-
8145
- if (parent) {
8146
- parent.replaceChild(newNode, firstElementToRemove);
8147
- }
8148
-
8149
- // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it?
8150
- var fragment = document.createDocumentFragment();
8151
- fragment.appendChild(firstElementToRemove);
8152
-
8153
- // Copy over user data (that includes Angular's $scope etc.). Don't copy private
8154
- // data here because there's no public interface in jQuery to do that and copying over
8155
- // event listeners (which is the main use of private data) wouldn't work anyway.
8156
- jqLite(newNode).data(jqLite(firstElementToRemove).data());
8157
-
8158
- // Remove data of the replaced element. We cannot just call .remove()
8159
- // on the element it since that would deallocate scope that is needed
8160
- // for the new node. Instead, remove the data "manually".
8161
- if (!jQuery) {
8162
- delete jqLite.cache[firstElementToRemove[jqLite.expando]];
8163
- } else {
8164
- // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after
8165
- // the replaced element. The cleanData version monkey-patched by Angular would cause
8166
- // the scope to be trashed and we do need the very same scope to work with the new
8167
- // element. However, we cannot just cache the non-patched version and use it here as
8168
- // that would break if another library patches the method after Angular does (one
8169
- // example is jQuery UI). Instead, set a flag indicating scope destroying should be
8170
- // skipped this one time.
8171
- skipDestroyOnNextJQueryCleanData = true;
8172
- jQuery.cleanData([firstElementToRemove]);
8173
- }
8174
-
8175
- for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {
8176
- var element = elementsToRemove[k];
8177
- jqLite(element).remove(); // must do this way to clean up expando
8178
- fragment.appendChild(element);
8179
- delete elementsToRemove[k];
8180
- }
8181
-
8182
- elementsToRemove[0] = newNode;
8183
- elementsToRemove.length = 1;
8184
- }
8185
-
8186
-
8187
- function cloneAndAnnotateFn(fn, annotation) {
8188
- return extend(function() { return fn.apply(null, arguments); }, fn, annotation);
8189
- }
8190
-
8191
-
8192
- function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {
8193
- try {
8194
- linkFn(scope, $element, attrs, controllers, transcludeFn);
8195
- } catch (e) {
8196
- $exceptionHandler(e, startingTag($element));
8197
- }
8198
- }
8199
- }];
8200
-}
8201
-
8202
-var PREFIX_REGEXP = /^((?:x|data)[\:\-_])/i;
8203
-/**
8204
- * Converts all accepted directives format into proper directive name.
8205
- * @param name Name to normalize
8206
- */
8207
-function directiveNormalize(name) {
8208
- return camelCase(name.replace(PREFIX_REGEXP, ''));
8209
-}
8210
-
8211
-/**
8212
- * @ngdoc type
8213
- * @name $compile.directive.Attributes
8214
- *
8215
- * @description
8216
- * A shared object between directive compile / linking functions which contains normalized DOM
8217
- * element attributes. The values reflect current binding state `{{ }}`. The normalization is
8218
- * needed since all of these are treated as equivalent in Angular:
8219
- *
8220
- * ```
8221
- * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a">
8222
- * ```
8223
- */
8224
-
8225
-/**
8226
- * @ngdoc property
8227
- * @name $compile.directive.Attributes#$attr
8228
- *
8229
- * @description
8230
- * A map of DOM element attribute names to the normalized name. This is
8231
- * needed to do reverse lookup from normalized name back to actual name.
8232
- */
8233
-
8234
-
8235
-/**
8236
- * @ngdoc method
8237
- * @name $compile.directive.Attributes#$set
8238
- * @kind function
8239
- *
8240
- * @description
8241
- * Set DOM element attribute value.
8242
- *
8243
- *
8244
- * @param {string} name Normalized element attribute name of the property to modify. The name is
8245
- * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}
8246
- * property to the original name.
8247
- * @param {string} value Value to set the attribute to. The value can be an interpolated string.
8248
- */
8249
-
8250
-
8251
-
8252
-/**
8253
- * Closure compiler type information
8254
- */
8255
-
8256
-function nodesetLinkingFn(
8257
- /* angular.Scope */ scope,
8258
- /* NodeList */ nodeList,
8259
- /* Element */ rootElement,
8260
- /* function(Function) */ boundTranscludeFn
8261
-) {}
8262
-
8263
-function directiveLinkingFn(
8264
- /* nodesetLinkingFn */ nodesetLinkingFn,
8265
- /* angular.Scope */ scope,
8266
- /* Node */ node,
8267
- /* Element */ rootElement,
8268
- /* function(Function) */ boundTranscludeFn
8269
-) {}
8270
-
8271
-function tokenDifference(str1, str2) {
8272
- var values = '',
8273
- tokens1 = str1.split(/\s+/),
8274
- tokens2 = str2.split(/\s+/);
8275
-
8276
- outer:
8277
- for (var i = 0; i < tokens1.length; i++) {
8278
- var token = tokens1[i];
8279
- for (var j = 0; j < tokens2.length; j++) {
8280
- if (token == tokens2[j]) continue outer;
8281
- }
8282
- values += (values.length > 0 ? ' ' : '') + token;
8283
- }
8284
- return values;
8285
-}
8286
-
8287
-function removeComments(jqNodes) {
8288
- jqNodes = jqLite(jqNodes);
8289
- var i = jqNodes.length;
8290
-
8291
- if (i <= 1) {
8292
- return jqNodes;
8293
- }
8294
-
8295
- while (i--) {
8296
- var node = jqNodes[i];
8297
- if (node.nodeType === NODE_TYPE_COMMENT) {
8298
- splice.call(jqNodes, i, 1);
8299
- }
8300
- }
8301
- return jqNodes;
8302
-}
8303
-
8304
-/**
8305
- * @ngdoc provider
8306
- * @name $controllerProvider
8307
- * @description
8308
- * The {@link ng.$controller $controller service} is used by Angular to create new
8309
- * controllers.
8310
- *
8311
- * This provider allows controller registration via the
8312
- * {@link ng.$controllerProvider#register register} method.
8313
- */
8314
-function $ControllerProvider() {
8315
- var controllers = {},
8316
- globals = false,
8317
- CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/;
8318
-
8319
-
8320
- /**
8321
- * @ngdoc method
8322
- * @name $controllerProvider#register
8323
- * @param {string|Object} name Controller name, or an object map of controllers where the keys are
8324
- * the names and the values are the constructors.
8325
- * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI
8326
- * annotations in the array notation).
8327
- */
8328
- this.register = function(name, constructor) {
8329
- assertNotHasOwnProperty(name, 'controller');
8330
- if (isObject(name)) {
8331
- extend(controllers, name);
8332
- } else {
8333
- controllers[name] = constructor;
8334
- }
8335
- };
8336
-
8337
- /**
8338
- * @ngdoc method
8339
- * @name $controllerProvider#allowGlobals
8340
- * @description If called, allows `$controller` to find controller constructors on `window`
8341
- */
8342
- this.allowGlobals = function() {
8343
- globals = true;
8344
- };
8345
-
8346
-
8347
- this.$get = ['$injector', '$window', function($injector, $window) {
8348
-
8349
- /**
8350
- * @ngdoc service
8351
- * @name $controller
8352
- * @requires $injector
8353
- *
8354
- * @param {Function|string} constructor If called with a function then it's considered to be the
8355
- * controller constructor function. Otherwise it's considered to be a string which is used
8356
- * to retrieve the controller constructor using the following steps:
8357
- *
8358
- * * check if a controller with given name is registered via `$controllerProvider`
8359
- * * check if evaluating the string on the current scope returns a constructor
8360
- * * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
8361
- * `window` object (not recommended)
8362
- *
8363
- * The string can use the `controller as property` syntax, where the controller instance is published
8364
- * as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
8365
- * to work correctly.
8366
- *
8367
- * @param {Object} locals Injection locals for Controller.
8368
- * @return {Object} Instance of given controller.
8369
- *
8370
- * @description
8371
- * `$controller` service is responsible for instantiating controllers.
8372
- *
8373
- * It's just a simple call to {@link auto.$injector $injector}, but extracted into
8374
- * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).
8375
- */
8376
- return function(expression, locals, later, ident) {
8377
- // PRIVATE API:
8378
- // param `later` --- indicates that the controller's constructor is invoked at a later time.
8379
- // If true, $controller will allocate the object with the correct
8380
- // prototype chain, but will not invoke the controller until a returned
8381
- // callback is invoked.
8382
- // param `ident` --- An optional label which overrides the label parsed from the controller
8383
- // expression, if any.
8384
- var instance, match, constructor, identifier;
8385
- later = later === true;
8386
- if (ident && isString(ident)) {
8387
- identifier = ident;
8388
- }
8389
-
8390
- if (isString(expression)) {
8391
- match = expression.match(CNTRL_REG),
8392
- constructor = match[1],
8393
- identifier = identifier || match[3];
8394
- expression = controllers.hasOwnProperty(constructor)
8395
- ? controllers[constructor]
8396
- : getter(locals.$scope, constructor, true) ||
8397
- (globals ? getter($window, constructor, true) : undefined);
8398
-
8399
- assertArgFn(expression, constructor, true);
8400
- }
8401
-
8402
- if (later) {
8403
- // Instantiate controller later:
8404
- // This machinery is used to create an instance of the object before calling the
8405
- // controller's constructor itself.
8406
- //
8407
- // This allows properties to be added to the controller before the constructor is
8408
- // invoked. Primarily, this is used for isolate scope bindings in $compile.
8409
- //
8410
- // This feature is not intended for use by applications, and is thus not documented
8411
- // publicly.
8412
- // Object creation: http://jsperf.com/create-constructor/2
8413
- var controllerPrototype = (isArray(expression) ?
8414
- expression[expression.length - 1] : expression).prototype;
8415
- instance = Object.create(controllerPrototype);
8416
-
8417
- if (identifier) {
8418
- addIdentifier(locals, identifier, instance, constructor || expression.name);
8419
- }
8420
-
8421
- return extend(function() {
8422
- $injector.invoke(expression, instance, locals, constructor);
8423
- return instance;
8424
- }, {
8425
- instance: instance,
8426
- identifier: identifier
8427
- });
8428
- }
8429
-
8430
- instance = $injector.instantiate(expression, locals, constructor);
8431
-
8432
- if (identifier) {
8433
- addIdentifier(locals, identifier, instance, constructor || expression.name);
8434
- }
8435
-
8436
- return instance;
8437
- };
8438
-
8439
- function addIdentifier(locals, identifier, instance, name) {
8440
- if (!(locals && isObject(locals.$scope))) {
8441
- throw minErr('$controller')('noscp',
8442
- "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",
8443
- name, identifier);
8444
- }
8445
-
8446
- locals.$scope[identifier] = instance;
8447
- }
8448
- }];
8449
-}
8450
-
8451
-/**
8452
- * @ngdoc service
8453
- * @name $document
8454
- * @requires $window
8455
- *
8456
- * @description
8457
- * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.
8458
- *
8459
- * @example
8460
- <example module="documentExample">
8461
- <file name="index.html">
8462
- <div ng-controller="ExampleController">
8463
- <p>$document title: <b ng-bind="title"></b></p>
8464
- <p>window.document title: <b ng-bind="windowTitle"></b></p>
8465
- </div>
8466
- </file>
8467
- <file name="script.js">
8468
- angular.module('documentExample', [])
8469
- .controller('ExampleController', ['$scope', '$document', function($scope, $document) {
8470
- $scope.title = $document[0].title;
8471
- $scope.windowTitle = angular.element(window.document)[0].title;
8472
- }]);
8473
- </file>
8474
- </example>
8475
- */
8476
-function $DocumentProvider() {
8477
- this.$get = ['$window', function(window) {
8478
- return jqLite(window.document);
8479
- }];
8480
-}
8481
-
8482
-/**
8483
- * @ngdoc service
8484
- * @name $exceptionHandler
8485
- * @requires ng.$log
8486
- *
8487
- * @description
8488
- * Any uncaught exception in angular expressions is delegated to this service.
8489
- * The default implementation simply delegates to `$log.error` which logs it into
8490
- * the browser console.
8491
- *
8492
- * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by
8493
- * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.
8494
- *
8495
- * ## Example:
8496
- *
8497
- * ```js
8498
- * angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {
8499
- * return function(exception, cause) {
8500
- * exception.message += ' (caused by "' + cause + '")';
8501
- * throw exception;
8502
- * };
8503
- * });
8504
- * ```
8505
- *
8506
- * This example will override the normal action of `$exceptionHandler`, to make angular
8507
- * exceptions fail hard when they happen, instead of just logging to the console.
8508
- *
8509
- * <hr />
8510
- * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind`
8511
- * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler}
8512
- * (unless executed during a digest).
8513
- *
8514
- * If you wish, you can manually delegate exceptions, e.g.
8515
- * `try { ... } catch(e) { $exceptionHandler(e); }`
8516
- *
8517
- * @param {Error} exception Exception associated with the error.
8518
- * @param {string=} cause optional information about the context in which
8519
- * the error was thrown.
8520
- *
8521
- */
8522
-function $ExceptionHandlerProvider() {
8523
- this.$get = ['$log', function($log) {
8524
- return function(exception, cause) {
8525
- $log.error.apply($log, arguments);
8526
- };
8527
- }];
8528
-}
8529
-
8530
-var APPLICATION_JSON = 'application/json';
8531
-var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};
8532
-var JSON_START = /^\s*(\[|\{[^\{])/;
8533
-var JSON_END = /[\}\]]\s*$/;
8534
-var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
8535
-
8536
-function defaultHttpResponseTransform(data, headers) {
8537
- if (isString(data)) {
8538
- // strip json vulnerability protection prefix
8539
- data = data.replace(JSON_PROTECTION_PREFIX, '');
8540
- var contentType = headers('Content-Type');
8541
- if ((contentType && contentType.indexOf(APPLICATION_JSON) === 0 && data.trim()) ||
8542
- (JSON_START.test(data) && JSON_END.test(data))) {
8543
- data = fromJson(data);
8544
- }
8545
- }
8546
- return data;
8547
-}
8548
-
8549
-/**
8550
- * Parse headers into key value object
8551
- *
8552
- * @param {string} headers Raw headers as a string
8553
- * @returns {Object} Parsed headers as key value object
8554
- */
8555
-function parseHeaders(headers) {
8556
- var parsed = createMap(), key, val, i;
8557
-
8558
- if (!headers) return parsed;
8559
-
8560
- forEach(headers.split('\n'), function(line) {
8561
- i = line.indexOf(':');
8562
- key = lowercase(trim(line.substr(0, i)));
8563
- val = trim(line.substr(i + 1));
8564
-
8565
- if (key) {
8566
- parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
8567
- }
8568
- });
8569
-
8570
- return parsed;
8571
-}
8572
-
8573
-
8574
-/**
8575
- * Returns a function that provides access to parsed headers.
8576
- *
8577
- * Headers are lazy parsed when first requested.
8578
- * @see parseHeaders
8579
- *
8580
- * @param {(string|Object)} headers Headers to provide access to.
8581
- * @returns {function(string=)} Returns a getter function which if called with:
8582
- *
8583
- * - if called with single an argument returns a single header value or null
8584
- * - if called with no arguments returns an object containing all headers.
8585
- */
8586
-function headersGetter(headers) {
8587
- var headersObj = isObject(headers) ? headers : undefined;
8588
-
8589
- return function(name) {
8590
- if (!headersObj) headersObj = parseHeaders(headers);
8591
-
8592
- if (name) {
8593
- var value = headersObj[lowercase(name)];
8594
- if (value === void 0) {
8595
- value = null;
8596
- }
8597
- return value;
8598
- }
8599
-
8600
- return headersObj;
8601
- };
8602
-}
8603
-
8604
-
8605
-/**
8606
- * Chain all given functions
8607
- *
8608
- * This function is used for both request and response transforming
8609
- *
8610
- * @param {*} data Data to transform.
8611
- * @param {function(string=)} headers Http headers getter fn.
8612
- * @param {(Function|Array.<Function>)} fns Function or an array of functions.
8613
- * @returns {*} Transformed data.
8614
- */
8615
-function transformData(data, headers, fns) {
8616
- if (isFunction(fns))
8617
- return fns(data, headers);
8618
-
8619
- forEach(fns, function(fn) {
8620
- data = fn(data, headers);
8621
- });
8622
-
8623
- return data;
8624
-}
8625
-
8626
-
8627
-function isSuccess(status) {
8628
- return 200 <= status && status < 300;
8629
-}
8630
-
8631
-
8632
-/**
8633
- * @ngdoc provider
8634
- * @name $httpProvider
8635
- * @description
8636
- * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.
8637
- * */
8638
-function $HttpProvider() {
8639
- /**
8640
- * @ngdoc property
8641
- * @name $httpProvider#defaults
8642
- * @description
8643
- *
8644
- * Object containing default values for all {@link ng.$http $http} requests.
8645
- *
8646
- * - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`}
8647
- * that will provide the cache for all requests who set their `cache` property to `true`.
8648
- * If you set the `default.cache = false` then only requests that specify their own custom
8649
- * cache object will be cached. See {@link $http#caching $http Caching} for more information.
8650
- *
8651
- * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.
8652
- * Defaults value is `'XSRF-TOKEN'`.
8653
- *
8654
- * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the
8655
- * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.
8656
- *
8657
- * - **`defaults.headers`** - {Object} - Default headers for all $http requests.
8658
- * Refer to {@link ng.$http#setting-http-headers $http} for documentation on
8659
- * setting default headers.
8660
- * - **`defaults.headers.common`**
8661
- * - **`defaults.headers.post`**
8662
- * - **`defaults.headers.put`**
8663
- * - **`defaults.headers.patch`**
8664
- *
8665
- **/
8666
- var defaults = this.defaults = {
8667
- // transform incoming response data
8668
- transformResponse: [defaultHttpResponseTransform],
8669
-
8670
- // transform outgoing request data
8671
- transformRequest: [function(d) {
8672
- return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d;
8673
- }],
8674
-
8675
- // default headers
8676
- headers: {
8677
- common: {
8678
- 'Accept': 'application/json, text/plain, */*'
8679
- },
8680
- post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
8681
- put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
8682
- patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON)
8683
- },
8684
-
8685
- xsrfCookieName: 'XSRF-TOKEN',
8686
- xsrfHeaderName: 'X-XSRF-TOKEN'
8687
- };
8688
-
8689
- var useApplyAsync = false;
8690
- /**
8691
- * @ngdoc method
8692
- * @name $httpProvider#useApplyAsync
8693
- * @description
8694
- *
8695
- * Configure $http service to combine processing of multiple http responses received at around
8696
- * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in
8697
- * significant performance improvement for bigger applications that make many HTTP requests
8698
- * concurrently (common during application bootstrap).
8699
- *
8700
- * Defaults to false. If no value is specifed, returns the current configured value.
8701
- *
8702
- * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred
8703
- * "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window
8704
- * to load and share the same digest cycle.
8705
- *
8706
- * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
8707
- * otherwise, returns the current configured value.
8708
- **/
8709
- this.useApplyAsync = function(value) {
8710
- if (isDefined(value)) {
8711
- useApplyAsync = !!value;
8712
- return this;
8713
- }
8714
- return useApplyAsync;
8715
- };
8716
-
8717
- /**
8718
- * @ngdoc property
8719
- * @name $httpProvider#interceptors
8720
- * @description
8721
- *
8722
- * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http}
8723
- * pre-processing of request or postprocessing of responses.
8724
- *
8725
- * These service factories are ordered by request, i.e. they are applied in the same order as the
8726
- * array, on request, but reverse order, on response.
8727
- *
8728
- * {@link ng.$http#interceptors Interceptors detailed info}
8729
- **/
8730
- var interceptorFactories = this.interceptors = [];
8731
-
8732
- this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',
8733
- function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {
8734
-
8735
- var defaultCache = $cacheFactory('$http');
8736
-
8737
- /**
8738
- * Interceptors stored in reverse order. Inner interceptors before outer interceptors.
8739
- * The reversal is needed so that we can build up the interception chain around the
8740
- * server request.
8741
- */
8742
- var reversedInterceptors = [];
8743
-
8744
- forEach(interceptorFactories, function(interceptorFactory) {
8745
- reversedInterceptors.unshift(isString(interceptorFactory)
8746
- ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));
8747
- });
8748
-
8749
- /**
8750
- * @ngdoc service
8751
- * @kind function
8752
- * @name $http
8753
- * @requires ng.$httpBackend
8754
- * @requires $cacheFactory
8755
- * @requires $rootScope
8756
- * @requires $q
8757
- * @requires $injector
8758
- *
8759
- * @description
8760
- * The `$http` service is a core Angular service that facilitates communication with the remote
8761
- * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)
8762
- * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).
8763
- *
8764
- * For unit testing applications that use `$http` service, see
8765
- * {@link ngMock.$httpBackend $httpBackend mock}.
8766
- *
8767
- * For a higher level of abstraction, please check out the {@link ngResource.$resource
8768
- * $resource} service.
8769
- *
8770
- * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by
8771
- * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage
8772
- * it is important to familiarize yourself with these APIs and the guarantees they provide.
8773
- *
8774
- *
8775
- * ## General usage
8776
- * The `$http` service is a function which takes a single argument — a configuration object —
8777
- * that is used to generate an HTTP request and returns a {@link ng.$q promise}
8778
- * with two $http specific methods: `success` and `error`.
8779
- *
8780
- * ```js
8781
- * // Simple GET request example :
8782
- * $http.get('/someUrl').
8783
- * success(function(data, status, headers, config) {
8784
- * // this callback will be called asynchronously
8785
- * // when the response is available
8786
- * }).
8787
- * error(function(data, status, headers, config) {
8788
- * // called asynchronously if an error occurs
8789
- * // or server returns response with an error status.
8790
- * });
8791
- * ```
8792
- *
8793
- * ```js
8794
- * // Simple POST request example (passing data) :
8795
- * $http.post('/someUrl', {msg:'hello word!'}).
8796
- * success(function(data, status, headers, config) {
8797
- * // this callback will be called asynchronously
8798
- * // when the response is available
8799
- * }).
8800
- * error(function(data, status, headers, config) {
8801
- * // called asynchronously if an error occurs
8802
- * // or server returns response with an error status.
8803
- * });
8804
- * ```
8805
- *
8806
- *
8807
- * Since the returned value of calling the $http function is a `promise`, you can also use
8808
- * the `then` method to register callbacks, and these callbacks will receive a single argument –
8809
- * an object representing the response. See the API signature and type info below for more
8810
- * details.
8811
- *
8812
- * A response status code between 200 and 299 is considered a success status and
8813
- * will result in the success callback being called. Note that if the response is a redirect,
8814
- * XMLHttpRequest will transparently follow it, meaning that the error callback will not be
8815
- * called for such responses.
8816
- *
8817
- * ## Writing Unit Tests that use $http
8818
- * When unit testing (using {@link ngMock ngMock}), it is necessary to call
8819
- * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending
8820
- * request using trained responses.
8821
- *
8822
- * ```
8823
- * $httpBackend.expectGET(...);
8824
- * $http.get(...);
8825
- * $httpBackend.flush();
8826
- * ```
8827
- *
8828
- * ## Shortcut methods
8829
- *
8830
- * Shortcut methods are also available. All shortcut methods require passing in the URL, and
8831
- * request data must be passed in for POST/PUT requests.
8832
- *
8833
- * ```js
8834
- * $http.get('/someUrl').success(successCallback);
8835
- * $http.post('/someUrl', data).success(successCallback);
8836
- * ```
8837
- *
8838
- * Complete list of shortcut methods:
8839
- *
8840
- * - {@link ng.$http#get $http.get}
8841
- * - {@link ng.$http#head $http.head}
8842
- * - {@link ng.$http#post $http.post}
8843
- * - {@link ng.$http#put $http.put}
8844
- * - {@link ng.$http#delete $http.delete}
8845
- * - {@link ng.$http#jsonp $http.jsonp}
8846
- * - {@link ng.$http#patch $http.patch}
8847
- *
8848
- *
8849
- * ## Setting HTTP Headers
8850
- *
8851
- * The $http service will automatically add certain HTTP headers to all requests. These defaults
8852
- * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration
8853
- * object, which currently contains this default configuration:
8854
- *
8855
- * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):
8856
- * - `Accept: application/json, text/plain, * / *`
8857
- * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)
8858
- * - `Content-Type: application/json`
8859
- * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)
8860
- * - `Content-Type: application/json`
8861
- *
8862
- * To add or overwrite these defaults, simply add or remove a property from these configuration
8863
- * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object
8864
- * with the lowercased HTTP method name as the key, e.g.
8865
- * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.
8866
- *
8867
- * The defaults can also be set at runtime via the `$http.defaults` object in the same
8868
- * fashion. For example:
8869
- *
8870
- * ```
8871
- * module.run(function($http) {
8872
- * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'
8873
- * });
8874
- * ```
8875
- *
8876
- * In addition, you can supply a `headers` property in the config object passed when
8877
- * calling `$http(config)`, which overrides the defaults without changing them globally.
8878
- *
8879
- * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis,
8880
- * Use the `headers` property, setting the desired header to `undefined`. For example:
8881
- *
8882
- * ```js
8883
- * var req = {
8884
- * method: 'POST',
8885
- * url: 'http://example.com',
8886
- * headers: {
8887
- * 'Content-Type': undefined
8888
- * },
8889
- * data: { test: 'test' },
8890
- * }
8891
- *
8892
- * $http(req).success(function(){...}).error(function(){...});
8893
- * ```
8894
- *
8895
- * ## Transforming Requests and Responses
8896
- *
8897
- * Both requests and responses can be transformed using transformation functions: `transformRequest`
8898
- * and `transformResponse`. These properties can be a single function that returns
8899
- * the transformed value (`{function(data, headersGetter)`) or an array of such transformation functions,
8900
- * which allows you to `push` or `unshift` a new transformation function into the transformation chain.
8901
- *
8902
- * ### Default Transformations
8903
- *
8904
- * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and
8905
- * `defaults.transformResponse` properties. If a request does not provide its own transformations
8906
- * then these will be applied.
8907
- *
8908
- * You can augment or replace the default transformations by modifying these properties by adding to or
8909
- * replacing the array.
8910
- *
8911
- * Angular provides the following default transformations:
8912
- *
8913
- * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):
8914
- *
8915
- * - If the `data` property of the request configuration object contains an object, serialize it
8916
- * into JSON format.
8917
- *
8918
- * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):
8919
- *
8920
- * - If XSRF prefix is detected, strip it (see Security Considerations section below).
8921
- * - If JSON response is detected, deserialize it using a JSON parser.
8922
- *
8923
- *
8924
- * ### Overriding the Default Transformations Per Request
8925
- *
8926
- * If you wish override the request/response transformations only for a single request then provide
8927
- * `transformRequest` and/or `transformResponse` properties on the configuration object passed
8928
- * into `$http`.
8929
- *
8930
- * Note that if you provide these properties on the config object the default transformations will be
8931
- * overwritten. If you wish to augment the default transformations then you must include them in your
8932
- * local transformation array.
8933
- *
8934
- * The following code demonstrates adding a new response transformation to be run after the default response
8935
- * transformations have been run.
8936
- *
8937
- * ```js
8938
- * function appendTransform(defaults, transform) {
8939
- *
8940
- * // We can't guarantee that the default transformation is an array
8941
- * defaults = angular.isArray(defaults) ? defaults : [defaults];
8942
- *
8943
- * // Append the new transformation to the defaults
8944
- * return defaults.concat(transform);
8945
- * }
8946
- *
8947
- * $http({
8948
- * url: '...',
8949
- * method: 'GET',
8950
- * transformResponse: appendTransform($http.defaults.transformResponse, function(value) {
8951
- * return doTransform(value);
8952
- * })
8953
- * });
8954
- * ```
8955
- *
8956
- *
8957
- * ## Caching
8958
- *
8959
- * To enable caching, set the request configuration `cache` property to `true` (to use default
8960
- * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).
8961
- * When the cache is enabled, `$http` stores the response from the server in the specified
8962
- * cache. The next time the same request is made, the response is served from the cache without
8963
- * sending a request to the server.
8964
- *
8965
- * Note that even if the response is served from cache, delivery of the data is asynchronous in
8966
- * the same way that real requests are.
8967
- *
8968
- * If there are multiple GET requests for the same URL that should be cached using the same
8969
- * cache, but the cache is not populated yet, only one request to the server will be made and
8970
- * the remaining requests will be fulfilled using the response from the first request.
8971
- *
8972
- * You can change the default cache to a new object (built with
8973
- * {@link ng.$cacheFactory `$cacheFactory`}) by updating the
8974
- * {@link ng.$http#defaults `$http.defaults.cache`} property. All requests who set
8975
- * their `cache` property to `true` will now use this cache object.
8976
- *
8977
- * If you set the default cache to `false` then only requests that specify their own custom
8978
- * cache object will be cached.
8979
- *
8980
- * ## Interceptors
8981
- *
8982
- * Before you start creating interceptors, be sure to understand the
8983
- * {@link ng.$q $q and deferred/promise APIs}.
8984
- *
8985
- * For purposes of global error handling, authentication, or any kind of synchronous or
8986
- * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be
8987
- * able to intercept requests before they are handed to the server and
8988
- * responses before they are handed over to the application code that
8989
- * initiated these requests. The interceptors leverage the {@link ng.$q
8990
- * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.
8991
- *
8992
- * The interceptors are service factories that are registered with the `$httpProvider` by
8993
- * adding them to the `$httpProvider.interceptors` array. The factory is called and
8994
- * injected with dependencies (if specified) and returns the interceptor.
8995
- *
8996
- * There are two kinds of interceptors (and two kinds of rejection interceptors):
8997
- *
8998
- * * `request`: interceptors get called with a http `config` object. The function is free to
8999
- * modify the `config` object or create a new one. The function needs to return the `config`
9000
- * object directly, or a promise containing the `config` or a new `config` object.
9001
- * * `requestError`: interceptor gets called when a previous interceptor threw an error or
9002
- * resolved with a rejection.
9003
- * * `response`: interceptors get called with http `response` object. The function is free to
9004
- * modify the `response` object or create a new one. The function needs to return the `response`
9005
- * object directly, or as a promise containing the `response` or a new `response` object.
9006
- * * `responseError`: interceptor gets called when a previous interceptor threw an error or
9007
- * resolved with a rejection.
9008
- *
9009
- *
9010
- * ```js
9011
- * // register the interceptor as a service
9012
- * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
9013
- * return {
9014
- * // optional method
9015
- * 'request': function(config) {
9016
- * // do something on success
9017
- * return config;
9018
- * },
9019
- *
9020
- * // optional method
9021
- * 'requestError': function(rejection) {
9022
- * // do something on error
9023
- * if (canRecover(rejection)) {
9024
- * return responseOrNewPromise
9025
- * }
9026
- * return $q.reject(rejection);
9027
- * },
9028
- *
9029
- *
9030
- *
9031
- * // optional method
9032
- * 'response': function(response) {
9033
- * // do something on success
9034
- * return response;
9035
- * },
9036
- *
9037
- * // optional method
9038
- * 'responseError': function(rejection) {
9039
- * // do something on error
9040
- * if (canRecover(rejection)) {
9041
- * return responseOrNewPromise
9042
- * }
9043
- * return $q.reject(rejection);
9044
- * }
9045
- * };
9046
- * });
9047
- *
9048
- * $httpProvider.interceptors.push('myHttpInterceptor');
9049
- *
9050
- *
9051
- * // alternatively, register the interceptor via an anonymous factory
9052
- * $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
9053
- * return {
9054
- * 'request': function(config) {
9055
- * // same as above
9056
- * },
9057
- *
9058
- * 'response': function(response) {
9059
- * // same as above
9060
- * }
9061
- * };
9062
- * });
9063
- * ```
9064
- *
9065
- * ## Security Considerations
9066
- *
9067
- * When designing web applications, consider security threats from:
9068
- *
9069
- * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
9070
- * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)
9071
- *
9072
- * Both server and the client must cooperate in order to eliminate these threats. Angular comes
9073
- * pre-configured with strategies that address these issues, but for this to work backend server
9074
- * cooperation is required.
9075
- *
9076
- * ### JSON Vulnerability Protection
9077
- *
9078
- * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
9079
- * allows third party website to turn your JSON resource URL into
9080
- * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To
9081
- * counter this your server can prefix all JSON requests with following string `")]}',\n"`.
9082
- * Angular will automatically strip the prefix before processing it as JSON.
9083
- *
9084
- * For example if your server needs to return:
9085
- * ```js
9086
- * ['one','two']
9087
- * ```
9088
- *
9089
- * which is vulnerable to attack, your server can return:
9090
- * ```js
9091
- * )]}',
9092
- * ['one','two']
9093
- * ```
9094
- *
9095
- * Angular will strip the prefix, before processing the JSON.
9096
- *
9097
- *
9098
- * ### Cross Site Request Forgery (XSRF) Protection
9099
- *
9100
- * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which
9101
- * an unauthorized site can gain your user's private data. Angular provides a mechanism
9102
- * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie
9103
- * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only
9104
- * JavaScript that runs on your domain could read the cookie, your server can be assured that
9105
- * the XHR came from JavaScript running on your domain. The header will not be set for
9106
- * cross-domain requests.
9107
- *
9108
- * To take advantage of this, your server needs to set a token in a JavaScript readable session
9109
- * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the
9110
- * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure
9111
- * that only JavaScript running on your domain could have sent the request. The token must be
9112
- * unique for each user and must be verifiable by the server (to prevent the JavaScript from
9113
- * making up its own tokens). We recommend that the token is a digest of your site's
9114
- * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography&#41;)
9115
- * for added security.
9116
- *
9117
- * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName
9118
- * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,
9119
- * or the per-request config object.
9120
- *
9121
- *
9122
- * @param {object} config Object describing the request to be made and how it should be
9123
- * processed. The object has following properties:
9124
- *
9125
- * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)
9126
- * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.
9127
- * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned
9128
- * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be
9129
- * JSONified.
9130
- * - **data** – `{string|Object}` – Data to be sent as the request message data.
9131
- * - **headers** – `{Object}` – Map of strings or functions which return strings representing
9132
- * HTTP headers to send to the server. If the return value of a function is null, the
9133
- * header will not be sent.
9134
- * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.
9135
- * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.
9136
- * - **transformRequest** –
9137
- * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
9138
- * transform function or an array of such functions. The transform function takes the http
9139
- * request body and headers and returns its transformed (typically serialized) version.
9140
- * See {@link ng.$http#overriding-the-default-transformations-per-request
9141
- * Overriding the Default Transformations}
9142
- * - **transformResponse** –
9143
- * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
9144
- * transform function or an array of such functions. The transform function takes the http
9145
- * response body and headers and returns its transformed (typically deserialized) version.
9146
- * See {@link ng.$http#overriding-the-default-transformations-per-request
9147
- * Overriding the Default Transformations}
9148
- * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
9149
- * GET request, otherwise if a cache instance built with
9150
- * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
9151
- * caching.
9152
- * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}
9153
- * that should abort the request when resolved.
9154
- * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the
9155
- * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)
9156
- * for more information.
9157
- * - **responseType** - `{string}` - see
9158
- * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).
9159
- *
9160
- * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the
9161
- * standard `then` method and two http specific methods: `success` and `error`. The `then`
9162
- * method takes two arguments a success and an error callback which will be called with a
9163
- * response object. The `success` and `error` methods take a single argument - a function that
9164
- * will be called when the request succeeds or fails respectively. The arguments passed into
9165
- * these functions are destructured representation of the response object passed into the
9166
- * `then` method. The response object has these properties:
9167
- *
9168
- * - **data** – `{string|Object}` – The response body transformed with the transform
9169
- * functions.
9170
- * - **status** – `{number}` – HTTP status code of the response.
9171
- * - **headers** – `{function([headerName])}` – Header getter function.
9172
- * - **config** – `{Object}` – The configuration object that was used to generate the request.
9173
- * - **statusText** – `{string}` – HTTP status text of the response.
9174
- *
9175
- * @property {Array.<Object>} pendingRequests Array of config objects for currently pending
9176
- * requests. This is primarily meant to be used for debugging purposes.
9177
- *
9178
- *
9179
- * @example
9180
-<example module="httpExample">
9181
-<file name="index.html">
9182
- <div ng-controller="FetchController">
9183
- <select ng-model="method">
9184
- <option>GET</option>
9185
- <option>JSONP</option>
9186
- </select>
9187
- <input type="text" ng-model="url" size="80"/>
9188
- <button id="fetchbtn" ng-click="fetch()">fetch</button><br>
9189
- <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button>
9190
- <button id="samplejsonpbtn"
9191
- ng-click="updateModel('JSONP',
9192
- 'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')">
9193
- Sample JSONP
9194
- </button>
9195
- <button id="invalidjsonpbtn"
9196
- ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')">
9197
- Invalid JSONP
9198
- </button>
9199
- <pre>http status code: {{status}}</pre>
9200
- <pre>http response data: {{data}}</pre>
9201
- </div>
9202
-</file>
9203
-<file name="script.js">
9204
- angular.module('httpExample', [])
9205
- .controller('FetchController', ['$scope', '$http', '$templateCache',
9206
- function($scope, $http, $templateCache) {
9207
- $scope.method = 'GET';
9208
- $scope.url = 'http-hello.html';
9209
-
9210
- $scope.fetch = function() {
9211
- $scope.code = null;
9212
- $scope.response = null;
9213
-
9214
- $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
9215
- success(function(data, status) {
9216
- $scope.status = status;
9217
- $scope.data = data;
9218
- }).
9219
- error(function(data, status) {
9220
- $scope.data = data || "Request failed";
9221
- $scope.status = status;
9222
- });
9223
- };
9224
-
9225
- $scope.updateModel = function(method, url) {
9226
- $scope.method = method;
9227
- $scope.url = url;
9228
- };
9229
- }]);
9230
-</file>
9231
-<file name="http-hello.html">
9232
- Hello, $http!
9233
-</file>
9234
-<file name="protractor.js" type="protractor">
9235
- var status = element(by.binding('status'));
9236
- var data = element(by.binding('data'));
9237
- var fetchBtn = element(by.id('fetchbtn'));
9238
- var sampleGetBtn = element(by.id('samplegetbtn'));
9239
- var sampleJsonpBtn = element(by.id('samplejsonpbtn'));
9240
- var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));
9241
-
9242
- it('should make an xhr GET request', function() {
9243
- sampleGetBtn.click();
9244
- fetchBtn.click();
9245
- expect(status.getText()).toMatch('200');
9246
- expect(data.getText()).toMatch(/Hello, \$http!/);
9247
- });
9248
-
9249
-// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185
9250
-// it('should make a JSONP request to angularjs.org', function() {
9251
-// sampleJsonpBtn.click();
9252
-// fetchBtn.click();
9253
-// expect(status.getText()).toMatch('200');
9254
-// expect(data.getText()).toMatch(/Super Hero!/);
9255
-// });
9256
-
9257
- it('should make JSONP request to invalid URL and invoke the error handler',
9258
- function() {
9259
- invalidJsonpBtn.click();
9260
- fetchBtn.click();
9261
- expect(status.getText()).toMatch('0');
9262
- expect(data.getText()).toMatch('Request failed');
9263
- });
9264
-</file>
9265
-</example>
9266
- */
9267
- function $http(requestConfig) {
9268
- var config = {
9269
- method: 'get',
9270
- transformRequest: defaults.transformRequest,
9271
- transformResponse: defaults.transformResponse
9272
- };
9273
- var headers = mergeHeaders(requestConfig);
9274
-
9275
- if (!angular.isObject(requestConfig)) {
9276
- throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig);
9277
- }
9278
-
9279
- extend(config, requestConfig);
9280
- config.headers = headers;
9281
- config.method = uppercase(config.method);
9282
-
9283
- var serverRequest = function(config) {
9284
- headers = config.headers;
9285
- var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);
9286
-
9287
- // strip content-type if data is undefined
9288
- if (isUndefined(reqData)) {
9289
- forEach(headers, function(value, header) {
9290
- if (lowercase(header) === 'content-type') {
9291
- delete headers[header];
9292
- }
9293
- });
9294
- }
9295
-
9296
- if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
9297
- config.withCredentials = defaults.withCredentials;
9298
- }
9299
-
9300
- // send request
9301
- return sendReq(config, reqData, headers).then(transformResponse, transformResponse);
9302
- };
9303
-
9304
- var chain = [serverRequest, undefined];
9305
- var promise = $q.when(config);
9306
-
9307
- // apply interceptors
9308
- forEach(reversedInterceptors, function(interceptor) {
9309
- if (interceptor.request || interceptor.requestError) {
9310
- chain.unshift(interceptor.request, interceptor.requestError);
9311
- }
9312
- if (interceptor.response || interceptor.responseError) {
9313
- chain.push(interceptor.response, interceptor.responseError);
9314
- }
9315
- });
9316
-
9317
- while (chain.length) {
9318
- var thenFn = chain.shift();
9319
- var rejectFn = chain.shift();
9320
-
9321
- promise = promise.then(thenFn, rejectFn);
9322
- }
9323
-
9324
- promise.success = function(fn) {
9325
- promise.then(function(response) {
9326
- fn(response.data, response.status, response.headers, config);
9327
- });
9328
- return promise;
9329
- };
9330
-
9331
- promise.error = function(fn) {
9332
- promise.then(null, function(response) {
9333
- fn(response.data, response.status, response.headers, config);
9334
- });
9335
- return promise;
9336
- };
9337
-
9338
- return promise;
9339
-
9340
- function transformResponse(response) {
9341
- // make a copy since the response must be cacheable
9342
- var resp = extend({}, response);
9343
- if (!response.data) {
9344
- resp.data = response.data;
9345
- } else {
9346
- resp.data = transformData(response.data, response.headers, config.transformResponse);
9347
- }
9348
- return (isSuccess(response.status))
9349
- ? resp
9350
- : $q.reject(resp);
9351
- }
9352
-
9353
- function mergeHeaders(config) {
9354
- var defHeaders = defaults.headers,
9355
- reqHeaders = extend({}, config.headers),
9356
- defHeaderName, lowercaseDefHeaderName, reqHeaderName;
9357
-
9358
- defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);
9359
-
9360
- // using for-in instead of forEach to avoid unecessary iteration after header has been found
9361
- defaultHeadersIteration:
9362
- for (defHeaderName in defHeaders) {
9363
- lowercaseDefHeaderName = lowercase(defHeaderName);
9364
-
9365
- for (reqHeaderName in reqHeaders) {
9366
- if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {
9367
- continue defaultHeadersIteration;
9368
- }
9369
- }
9370
-
9371
- reqHeaders[defHeaderName] = defHeaders[defHeaderName];
9372
- }
9373
-
9374
- // execute if header value is a function for merged headers
9375
- execHeaders(reqHeaders);
9376
- return reqHeaders;
9377
-
9378
- function execHeaders(headers) {
9379
- var headerContent;
9380
-
9381
- forEach(headers, function(headerFn, header) {
9382
- if (isFunction(headerFn)) {
9383
- headerContent = headerFn();
9384
- if (headerContent != null) {
9385
- headers[header] = headerContent;
9386
- } else {
9387
- delete headers[header];
9388
- }
9389
- }
9390
- });
9391
- }
9392
- }
9393
- }
9394
-
9395
- $http.pendingRequests = [];
9396
-
9397
- /**
9398
- * @ngdoc method
9399
- * @name $http#get
9400
- *
9401
- * @description
9402
- * Shortcut method to perform `GET` request.
9403
- *
9404
- * @param {string} url Relative or absolute URL specifying the destination of the request
9405
- * @param {Object=} config Optional configuration object
9406
- * @returns {HttpPromise} Future object
9407
- */
9408
-
9409
- /**
9410
- * @ngdoc method
9411
- * @name $http#delete
9412
- *
9413
- * @description
9414
- * Shortcut method to perform `DELETE` request.
9415
- *
9416
- * @param {string} url Relative or absolute URL specifying the destination of the request
9417
- * @param {Object=} config Optional configuration object
9418
- * @returns {HttpPromise} Future object
9419
- */
9420
-
9421
- /**
9422
- * @ngdoc method
9423
- * @name $http#head
9424
- *
9425
- * @description
9426
- * Shortcut method to perform `HEAD` request.
9427
- *
9428
- * @param {string} url Relative or absolute URL specifying the destination of the request
9429
- * @param {Object=} config Optional configuration object
9430
- * @returns {HttpPromise} Future object
9431
- */
9432
-
9433
- /**
9434
- * @ngdoc method
9435
- * @name $http#jsonp
9436
- *
9437
- * @description
9438
- * Shortcut method to perform `JSONP` request.
9439
- *
9440
- * @param {string} url Relative or absolute URL specifying the destination of the request.
9441
- * The name of the callback should be the string `JSON_CALLBACK`.
9442
- * @param {Object=} config Optional configuration object
9443
- * @returns {HttpPromise} Future object
9444
- */
9445
- createShortMethods('get', 'delete', 'head', 'jsonp');
9446
-
9447
- /**
9448
- * @ngdoc method
9449
- * @name $http#post
9450
- *
9451
- * @description
9452
- * Shortcut method to perform `POST` request.
9453
- *
9454
- * @param {string} url Relative or absolute URL specifying the destination of the request
9455
- * @param {*} data Request content
9456
- * @param {Object=} config Optional configuration object
9457
- * @returns {HttpPromise} Future object
9458
- */
9459
-
9460
- /**
9461
- * @ngdoc method
9462
- * @name $http#put
9463
- *
9464
- * @description
9465
- * Shortcut method to perform `PUT` request.
9466
- *
9467
- * @param {string} url Relative or absolute URL specifying the destination of the request
9468
- * @param {*} data Request content
9469
- * @param {Object=} config Optional configuration object
9470
- * @returns {HttpPromise} Future object
9471
- */
9472
-
9473
- /**
9474
- * @ngdoc method
9475
- * @name $http#patch
9476
- *
9477
- * @description
9478
- * Shortcut method to perform `PATCH` request.
9479
- *
9480
- * @param {string} url Relative or absolute URL specifying the destination of the request
9481
- * @param {*} data Request content
9482
- * @param {Object=} config Optional configuration object
9483
- * @returns {HttpPromise} Future object
9484
- */
9485
- createShortMethodsWithData('post', 'put', 'patch');
9486
-
9487
- /**
9488
- * @ngdoc property
9489
- * @name $http#defaults
9490
- *
9491
- * @description
9492
- * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of
9493
- * default headers, withCredentials as well as request and response transformations.
9494
- *
9495
- * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above.
9496
- */
9497
- $http.defaults = defaults;
9498
-
9499
-
9500
- return $http;
9501
-
9502
-
9503
- function createShortMethods(names) {
9504
- forEach(arguments, function(name) {
9505
- $http[name] = function(url, config) {
9506
- return $http(extend(config || {}, {
9507
- method: name,
9508
- url: url
9509
- }));
9510
- };
9511
- });
9512
- }
9513
-
9514
-
9515
- function createShortMethodsWithData(name) {
9516
- forEach(arguments, function(name) {
9517
- $http[name] = function(url, data, config) {
9518
- return $http(extend(config || {}, {
9519
- method: name,
9520
- url: url,
9521
- data: data
9522
- }));
9523
- };
9524
- });
9525
- }
9526
-
9527
-
9528
- /**
9529
- * Makes the request.
9530
- *
9531
- * !!! ACCESSES CLOSURE VARS:
9532
- * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests
9533
- */
9534
- function sendReq(config, reqData, reqHeaders) {
9535
- var deferred = $q.defer(),
9536
- promise = deferred.promise,
9537
- cache,
9538
- cachedResp,
9539
- url = buildUrl(config.url, config.params);
9540
-
9541
- $http.pendingRequests.push(config);
9542
- promise.then(removePendingReq, removePendingReq);
9543
-
9544
-
9545
- if ((config.cache || defaults.cache) && config.cache !== false &&
9546
- (config.method === 'GET' || config.method === 'JSONP')) {
9547
- cache = isObject(config.cache) ? config.cache
9548
- : isObject(defaults.cache) ? defaults.cache
9549
- : defaultCache;
9550
- }
9551
-
9552
- if (cache) {
9553
- cachedResp = cache.get(url);
9554
- if (isDefined(cachedResp)) {
9555
- if (isPromiseLike(cachedResp)) {
9556
- // cached request has already been sent, but there is no response yet
9557
- cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult);
9558
- } else {
9559
- // serving from cache
9560
- if (isArray(cachedResp)) {
9561
- resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);
9562
- } else {
9563
- resolvePromise(cachedResp, 200, {}, 'OK');
9564
- }
9565
- }
9566
- } else {
9567
- // put the promise for the non-transformed response into cache as a placeholder
9568
- cache.put(url, promise);
9569
- }
9570
- }
9571
-
9572
-
9573
- // if we won't have the response in cache, set the xsrf headers and
9574
- // send the request to the backend
9575
- if (isUndefined(cachedResp)) {
9576
- var xsrfValue = urlIsSameOrigin(config.url)
9577
- ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]
9578
- : undefined;
9579
- if (xsrfValue) {
9580
- reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
9581
- }
9582
-
9583
- $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
9584
- config.withCredentials, config.responseType);
9585
- }
9586
-
9587
- return promise;
9588
-
9589
-
9590
- /**
9591
- * Callback registered to $httpBackend():
9592
- * - caches the response if desired
9593
- * - resolves the raw $http promise
9594
- * - calls $apply
9595
- */
9596
- function done(status, response, headersString, statusText) {
9597
- if (cache) {
9598
- if (isSuccess(status)) {
9599
- cache.put(url, [status, response, parseHeaders(headersString), statusText]);
9600
- } else {
9601
- // remove promise from the cache
9602
- cache.remove(url);
9603
- }
9604
- }
9605
-
9606
- function resolveHttpPromise() {
9607
- resolvePromise(response, status, headersString, statusText);
9608
- }
9609
-
9610
- if (useApplyAsync) {
9611
- $rootScope.$applyAsync(resolveHttpPromise);
9612
- } else {
9613
- resolveHttpPromise();
9614
- if (!$rootScope.$$phase) $rootScope.$apply();
9615
- }
9616
- }
9617
-
9618
-
9619
- /**
9620
- * Resolves the raw $http promise.
9621
- */
9622
- function resolvePromise(response, status, headers, statusText) {
9623
- // normalize internal statuses to 0
9624
- status = Math.max(status, 0);
9625
-
9626
- (isSuccess(status) ? deferred.resolve : deferred.reject)({
9627
- data: response,
9628
- status: status,
9629
- headers: headersGetter(headers),
9630
- config: config,
9631
- statusText: statusText
9632
- });
9633
- }
9634
-
9635
- function resolvePromiseWithResult(result) {
9636
- resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText);
9637
- }
9638
-
9639
- function removePendingReq() {
9640
- var idx = $http.pendingRequests.indexOf(config);
9641
- if (idx !== -1) $http.pendingRequests.splice(idx, 1);
9642
- }
9643
- }
9644
-
9645
-
9646
- function buildUrl(url, params) {
9647
- if (!params) return url;
9648
- var parts = [];
9649
- forEachSorted(params, function(value, key) {
9650
- if (value === null || isUndefined(value)) return;
9651
- if (!isArray(value)) value = [value];
9652
-
9653
- forEach(value, function(v) {
9654
- if (isObject(v)) {
9655
- if (isDate(v)) {
9656
- v = v.toISOString();
9657
- } else {
9658
- v = toJson(v);
9659
- }
9660
- }
9661
- parts.push(encodeUriQuery(key) + '=' +
9662
- encodeUriQuery(v));
9663
- });
9664
- });
9665
- if (parts.length > 0) {
9666
- url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');
9667
- }
9668
- return url;
9669
- }
9670
- }];
9671
-}
9672
-
9673
-function createXhr() {
9674
- return new window.XMLHttpRequest();
9675
-}
9676
-
9677
-/**
9678
- * @ngdoc service
9679
- * @name $httpBackend
9680
- * @requires $window
9681
- * @requires $document
9682
- *
9683
- * @description
9684
- * HTTP backend used by the {@link ng.$http service} that delegates to
9685
- * XMLHttpRequest object or JSONP and deals with browser incompatibilities.
9686
- *
9687
- * You should never need to use this service directly, instead use the higher-level abstractions:
9688
- * {@link ng.$http $http} or {@link ngResource.$resource $resource}.
9689
- *
9690
- * During testing this implementation is swapped with {@link ngMock.$httpBackend mock
9691
- * $httpBackend} which can be trained with responses.
9692
- */
9693
-function $HttpBackendProvider() {
9694
- this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {
9695
- return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);
9696
- }];
9697
-}
9698
-
9699
-function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {
9700
- // TODO(vojta): fix the signature
9701
- return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
9702
- $browser.$$incOutstandingRequestCount();
9703
- url = url || $browser.url();
9704
-
9705
- if (lowercase(method) == 'jsonp') {
9706
- var callbackId = '_' + (callbacks.counter++).toString(36);
9707
- callbacks[callbackId] = function(data) {
9708
- callbacks[callbackId].data = data;
9709
- callbacks[callbackId].called = true;
9710
- };
9711
-
9712
- var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
9713
- callbackId, function(status, text) {
9714
- completeRequest(callback, status, callbacks[callbackId].data, "", text);
9715
- callbacks[callbackId] = noop;
9716
- });
9717
- } else {
9718
-
9719
- var xhr = createXhr();
9720
-
9721
- xhr.open(method, url, true);
9722
- forEach(headers, function(value, key) {
9723
- if (isDefined(value)) {
9724
- xhr.setRequestHeader(key, value);
9725
- }
9726
- });
9727
-
9728
- xhr.onload = function requestLoaded() {
9729
- var statusText = xhr.statusText || '';
9730
-
9731
- // responseText is the old-school way of retrieving response (supported by IE8 & 9)
9732
- // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
9733
- var response = ('response' in xhr) ? xhr.response : xhr.responseText;
9734
-
9735
- // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
9736
- var status = xhr.status === 1223 ? 204 : xhr.status;
9737
-
9738
- // fix status code when it is 0 (0 status is undocumented).
9739
- // Occurs when accessing file resources or on Android 4.1 stock browser
9740
- // while retrieving files from application cache.
9741
- if (status === 0) {
9742
- status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;
9743
- }
9744
-
9745
- completeRequest(callback,
9746
- status,
9747
- response,
9748
- xhr.getAllResponseHeaders(),
9749
- statusText);
9750
- };
9751
-
9752
- var requestError = function() {
9753
- // The response is always empty
9754
- // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error
9755
- completeRequest(callback, -1, null, null, '');
9756
- };
9757
-
9758
- xhr.onerror = requestError;
9759
- xhr.onabort = requestError;
9760
-
9761
- if (withCredentials) {
9762
- xhr.withCredentials = true;
9763
- }
9764
-
9765
- if (responseType) {
9766
- try {
9767
- xhr.responseType = responseType;
9768
- } catch (e) {
9769
- // WebKit added support for the json responseType value on 09/03/2013
9770
- // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are
9771
- // known to throw when setting the value "json" as the response type. Other older
9772
- // browsers implementing the responseType
9773
- //
9774
- // The json response type can be ignored if not supported, because JSON payloads are
9775
- // parsed on the client-side regardless.
9776
- if (responseType !== 'json') {
9777
- throw e;
9778
- }
9779
- }
9780
- }
9781
-
9782
- xhr.send(post || null);
9783
- }
9784
-
9785
- if (timeout > 0) {
9786
- var timeoutId = $browserDefer(timeoutRequest, timeout);
9787
- } else if (isPromiseLike(timeout)) {
9788
- timeout.then(timeoutRequest);
9789
- }
9790
-
9791
-
9792
- function timeoutRequest() {
9793
- jsonpDone && jsonpDone();
9794
- xhr && xhr.abort();
9795
- }
9796
-
9797
- function completeRequest(callback, status, response, headersString, statusText) {
9798
- // cancel timeout and subsequent timeout promise resolution
9799
- if (timeoutId !== undefined) {
9800
- $browserDefer.cancel(timeoutId);
9801
- }
9802
- jsonpDone = xhr = null;
9803
-
9804
- callback(status, response, headersString, statusText);
9805
- $browser.$$completeOutstandingRequest(noop);
9806
- }
9807
- };
9808
-
9809
- function jsonpReq(url, callbackId, done) {
9810
- // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:
9811
- // - fetches local scripts via XHR and evals them
9812
- // - adds and immediately removes script elements from the document
9813
- var script = rawDocument.createElement('script'), callback = null;
9814
- script.type = "text/javascript";
9815
- script.src = url;
9816
- script.async = true;
9817
-
9818
- callback = function(event) {
9819
- removeEventListenerFn(script, "load", callback);
9820
- removeEventListenerFn(script, "error", callback);
9821
- rawDocument.body.removeChild(script);
9822
- script = null;
9823
- var status = -1;
9824
- var text = "unknown";
9825
-
9826
- if (event) {
9827
- if (event.type === "load" && !callbacks[callbackId].called) {
9828
- event = { type: "error" };
9829
- }
9830
- text = event.type;
9831
- status = event.type === "error" ? 404 : 200;
9832
- }
9833
-
9834
- if (done) {
9835
- done(status, text);
9836
- }
9837
- };
9838
-
9839
- addEventListenerFn(script, "load", callback);
9840
- addEventListenerFn(script, "error", callback);
9841
- rawDocument.body.appendChild(script);
9842
- return callback;
9843
- }
9844
-}
9845
-
9846
-var $interpolateMinErr = minErr('$interpolate');
9847
-
9848
-/**
9849
- * @ngdoc provider
9850
- * @name $interpolateProvider
9851
- *
9852
- * @description
9853
- *
9854
- * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
9855
- *
9856
- * @example
9857
-<example module="customInterpolationApp">
9858
-<file name="index.html">
9859
-<script>
9860
- var customInterpolationApp = angular.module('customInterpolationApp', []);
9861
-
9862
- customInterpolationApp.config(function($interpolateProvider) {
9863
- $interpolateProvider.startSymbol('//');
9864
- $interpolateProvider.endSymbol('//');
9865
- });
9866
-
9867
-
9868
- customInterpolationApp.controller('DemoController', function() {
9869
- this.label = "This binding is brought you by // interpolation symbols.";
9870
- });
9871
-</script>
9872
-<div ng-app="App" ng-controller="DemoController as demo">
9873
- //demo.label//
9874
-</div>
9875
-</file>
9876
-<file name="protractor.js" type="protractor">
9877
- it('should interpolate binding with custom symbols', function() {
9878
- expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');
9879
- });
9880
-</file>
9881
-</example>
9882
- */
9883
-function $InterpolateProvider() {
9884
- var startSymbol = '{{';
9885
- var endSymbol = '}}';
9886
-
9887
- /**
9888
- * @ngdoc method
9889
- * @name $interpolateProvider#startSymbol
9890
- * @description
9891
- * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.
9892
- *
9893
- * @param {string=} value new value to set the starting symbol to.
9894
- * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
9895
- */
9896
- this.startSymbol = function(value) {
9897
- if (value) {
9898
- startSymbol = value;
9899
- return this;
9900
- } else {
9901
- return startSymbol;
9902
- }
9903
- };
9904
-
9905
- /**
9906
- * @ngdoc method
9907
- * @name $interpolateProvider#endSymbol
9908
- * @description
9909
- * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
9910
- *
9911
- * @param {string=} value new value to set the ending symbol to.
9912
- * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
9913
- */
9914
- this.endSymbol = function(value) {
9915
- if (value) {
9916
- endSymbol = value;
9917
- return this;
9918
- } else {
9919
- return endSymbol;
9920
- }
9921
- };
9922
-
9923
-
9924
- this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {
9925
- var startSymbolLength = startSymbol.length,
9926
- endSymbolLength = endSymbol.length,
9927
- escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),
9928
- escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g');
9929
-
9930
- function escape(ch) {
9931
- return '\\\\\\' + ch;
9932
- }
9933
-
9934
- /**
9935
- * @ngdoc service
9936
- * @name $interpolate
9937
- * @kind function
9938
- *
9939
- * @requires $parse
9940
- * @requires $sce
9941
- *
9942
- * @description
9943
- *
9944
- * Compiles a string with markup into an interpolation function. This service is used by the
9945
- * HTML {@link ng.$compile $compile} service for data binding. See
9946
- * {@link ng.$interpolateProvider $interpolateProvider} for configuring the
9947
- * interpolation markup.
9948
- *
9949
- *
9950
- * ```js
9951
- * var $interpolate = ...; // injected
9952
- * var exp = $interpolate('Hello {{name | uppercase}}!');
9953
- * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!');
9954
- * ```
9955
- *
9956
- * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is
9957
- * `true`, the interpolation function will return `undefined` unless all embedded expressions
9958
- * evaluate to a value other than `undefined`.
9959
- *
9960
- * ```js
9961
- * var $interpolate = ...; // injected
9962
- * var context = {greeting: 'Hello', name: undefined };
9963
- *
9964
- * // default "forgiving" mode
9965
- * var exp = $interpolate('{{greeting}} {{name}}!');
9966
- * expect(exp(context)).toEqual('Hello !');
9967
- *
9968
- * // "allOrNothing" mode
9969
- * exp = $interpolate('{{greeting}} {{name}}!', false, null, true);
9970
- * expect(exp(context)).toBeUndefined();
9971
- * context.name = 'Angular';
9972
- * expect(exp(context)).toEqual('Hello Angular!');
9973
- * ```
9974
- *
9975
- * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.
9976
- *
9977
- * ####Escaped Interpolation
9978
- * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers
9979
- * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).
9980
- * It will be rendered as a regular start/end marker, and will not be interpreted as an expression
9981
- * or binding.
9982
- *
9983
- * This enables web-servers to prevent script injection attacks and defacing attacks, to some
9984
- * degree, while also enabling code examples to work without relying on the
9985
- * {@link ng.directive:ngNonBindable ngNonBindable} directive.
9986
- *
9987
- * **For security purposes, it is strongly encouraged that web servers escape user-supplied data,
9988
- * replacing angle brackets (&lt;, &gt;) with &amp;lt; and &amp;gt; respectively, and replacing all
9989
- * interpolation start/end markers with their escaped counterparts.**
9990
- *
9991
- * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered
9992
- * output when the $interpolate service processes the text. So, for HTML elements interpolated
9993
- * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter
9994
- * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such,
9995
- * this is typically useful only when user-data is used in rendering a template from the server, or
9996
- * when otherwise untrusted data is used by a directive.
9997
- *
9998
- * <example>
9999
- * <file name="index.html">
10000
- * <div ng-init="username='A user'">
10001
- * <p ng-init="apptitle='Escaping demo'">{{apptitle}}: \{\{ username = "defaced value"; \}\}
10002
- * </p>
10003
- * <p><strong>{{username}}</strong> attempts to inject code which will deface the
10004
- * application, but fails to accomplish their task, because the server has correctly
10005
- * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash)
10006
- * characters.</p>
10007
- * <p>Instead, the result of the attempted script injection is visible, and can be removed
10008
- * from the database by an administrator.</p>
10009
- * </div>
10010
- * </file>
10011
- * </example>
10012
- *
10013
- * @param {string} text The text with markup to interpolate.
10014
- * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have
10015
- * embedded expression in order to return an interpolation function. Strings with no
10016
- * embedded expression will return null for the interpolation function.
10017
- * @param {string=} trustedContext when provided, the returned function passes the interpolated
10018
- * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,
10019
- * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that
10020
- * provides Strict Contextual Escaping for details.
10021
- * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined
10022
- * unless all embedded expressions evaluate to a value other than `undefined`.
10023
- * @returns {function(context)} an interpolation function which is used to compute the
10024
- * interpolated string. The function has these parameters:
10025
- *
10026
- * - `context`: evaluation context for all expressions embedded in the interpolated text
10027
- */
10028
- function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
10029
- allOrNothing = !!allOrNothing;
10030
- var startIndex,
10031
- endIndex,
10032
- index = 0,
10033
- expressions = [],
10034
- parseFns = [],
10035
- textLength = text.length,
10036
- exp,
10037
- concat = [],
10038
- expressionPositions = [];
10039
-
10040
- while (index < textLength) {
10041
- if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&
10042
- ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {
10043
- if (index !== startIndex) {
10044
- concat.push(unescapeText(text.substring(index, startIndex)));
10045
- }
10046
- exp = text.substring(startIndex + startSymbolLength, endIndex);
10047
- expressions.push(exp);
10048
- parseFns.push($parse(exp, parseStringifyInterceptor));
10049
- index = endIndex + endSymbolLength;
10050
- expressionPositions.push(concat.length);
10051
- concat.push('');
10052
- } else {
10053
- // we did not find an interpolation, so we have to add the remainder to the separators array
10054
- if (index !== textLength) {
10055
- concat.push(unescapeText(text.substring(index)));
10056
- }
10057
- break;
10058
- }
10059
- }
10060
-
10061
- // Concatenating expressions makes it hard to reason about whether some combination of
10062
- // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a
10063
- // single expression be used for iframe[src], object[src], etc., we ensure that the value
10064
- // that's used is assigned or constructed by some JS code somewhere that is more testable or
10065
- // make it obvious that you bound the value to some user controlled value. This helps reduce
10066
- // the load when auditing for XSS issues.
10067
- if (trustedContext && concat.length > 1) {
10068
- throw $interpolateMinErr('noconcat',
10069
- "Error while interpolating: {0}\nStrict Contextual Escaping disallows " +
10070
- "interpolations that concatenate multiple expressions when a trusted value is " +
10071
- "required. See http://docs.angularjs.org/api/ng.$sce", text);
10072
- }
10073
-
10074
- if (!mustHaveExpression || expressions.length) {
10075
- var compute = function(values) {
10076
- for (var i = 0, ii = expressions.length; i < ii; i++) {
10077
- if (allOrNothing && isUndefined(values[i])) return;
10078
- concat[expressionPositions[i]] = values[i];
10079
- }
10080
- return concat.join('');
10081
- };
10082
-
10083
- var getValue = function(value) {
10084
- return trustedContext ?
10085
- $sce.getTrusted(trustedContext, value) :
10086
- $sce.valueOf(value);
10087
- };
10088
-
10089
- var stringify = function(value) {
10090
- if (value == null) { // null || undefined
10091
- return '';
10092
- }
10093
- switch (typeof value) {
10094
- case 'string':
10095
- break;
10096
- case 'number':
10097
- value = '' + value;
10098
- break;
10099
- default:
10100
- value = toJson(value);
10101
- }
10102
-
10103
- return value;
10104
- };
10105
-
10106
- return extend(function interpolationFn(context) {
10107
- var i = 0;
10108
- var ii = expressions.length;
10109
- var values = new Array(ii);
10110
-
10111
- try {
10112
- for (; i < ii; i++) {
10113
- values[i] = parseFns[i](context);
10114
- }
10115
-
10116
- return compute(values);
10117
- } catch (err) {
10118
- var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
10119
- err.toString());
10120
- $exceptionHandler(newErr);
10121
- }
10122
-
10123
- }, {
10124
- // all of these properties are undocumented for now
10125
- exp: text, //just for compatibility with regular watchers created via $watch
10126
- expressions: expressions,
10127
- $$watchDelegate: function(scope, listener, objectEquality) {
10128
- var lastValue;
10129
- return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {
10130
- var currValue = compute(values);
10131
- if (isFunction(listener)) {
10132
- listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);
10133
- }
10134
- lastValue = currValue;
10135
- }, objectEquality);
10136
- }
10137
- });
10138
- }
10139
-
10140
- function unescapeText(text) {
10141
- return text.replace(escapedStartRegexp, startSymbol).
10142
- replace(escapedEndRegexp, endSymbol);
10143
- }
10144
-
10145
- function parseStringifyInterceptor(value) {
10146
- try {
10147
- value = getValue(value);
10148
- return allOrNothing && !isDefined(value) ? value : stringify(value);
10149
- } catch (err) {
10150
- var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
10151
- err.toString());
10152
- $exceptionHandler(newErr);
10153
- }
10154
- }
10155
- }
10156
-
10157
-
10158
- /**
10159
- * @ngdoc method
10160
- * @name $interpolate#startSymbol
10161
- * @description
10162
- * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.
10163
- *
10164
- * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change
10165
- * the symbol.
10166
- *
10167
- * @returns {string} start symbol.
10168
- */
10169
- $interpolate.startSymbol = function() {
10170
- return startSymbol;
10171
- };
10172
-
10173
-
10174
- /**
10175
- * @ngdoc method
10176
- * @name $interpolate#endSymbol
10177
- * @description
10178
- * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
10179
- *
10180
- * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change
10181
- * the symbol.
10182
- *
10183
- * @returns {string} end symbol.
10184
- */
10185
- $interpolate.endSymbol = function() {
10186
- return endSymbol;
10187
- };
10188
-
10189
- return $interpolate;
10190
- }];
10191
-}
10192
-
10193
-function $IntervalProvider() {
10194
- this.$get = ['$rootScope', '$window', '$q', '$$q',
10195
- function($rootScope, $window, $q, $$q) {
10196
- var intervals = {};
10197
-
10198
-
10199
- /**
10200
- * @ngdoc service
10201
- * @name $interval
10202
- *
10203
- * @description
10204
- * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`
10205
- * milliseconds.
10206
- *
10207
- * The return value of registering an interval function is a promise. This promise will be
10208
- * notified upon each tick of the interval, and will be resolved after `count` iterations, or
10209
- * run indefinitely if `count` is not defined. The value of the notification will be the
10210
- * number of iterations that have run.
10211
- * To cancel an interval, call `$interval.cancel(promise)`.
10212
- *
10213
- * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
10214
- * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
10215
- * time.
10216
- *
10217
- * <div class="alert alert-warning">
10218
- * **Note**: Intervals created by this service must be explicitly destroyed when you are finished
10219
- * with them. In particular they are not automatically destroyed when a controller's scope or a
10220
- * directive's element are destroyed.
10221
- * You should take this into consideration and make sure to always cancel the interval at the
10222
- * appropriate moment. See the example below for more details on how and when to do this.
10223
- * </div>
10224
- *
10225
- * @param {function()} fn A function that should be called repeatedly.
10226
- * @param {number} delay Number of milliseconds between each function call.
10227
- * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
10228
- * indefinitely.
10229
- * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
10230
- * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
10231
- * @returns {promise} A promise which will be notified on each iteration.
10232
- *
10233
- * @example
10234
- * <example module="intervalExample">
10235
- * <file name="index.html">
10236
- * <script>
10237
- * angular.module('intervalExample', [])
10238
- * .controller('ExampleController', ['$scope', '$interval',
10239
- * function($scope, $interval) {
10240
- * $scope.format = 'M/d/yy h:mm:ss a';
10241
- * $scope.blood_1 = 100;
10242
- * $scope.blood_2 = 120;
10243
- *
10244
- * var stop;
10245
- * $scope.fight = function() {
10246
- * // Don't start a new fight if we are already fighting
10247
- * if ( angular.isDefined(stop) ) return;
10248
- *
10249
- * stop = $interval(function() {
10250
- * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {
10251
- * $scope.blood_1 = $scope.blood_1 - 3;
10252
- * $scope.blood_2 = $scope.blood_2 - 4;
10253
- * } else {
10254
- * $scope.stopFight();
10255
- * }
10256
- * }, 100);
10257
- * };
10258
- *
10259
- * $scope.stopFight = function() {
10260
- * if (angular.isDefined(stop)) {
10261
- * $interval.cancel(stop);
10262
- * stop = undefined;
10263
- * }
10264
- * };
10265
- *
10266
- * $scope.resetFight = function() {
10267
- * $scope.blood_1 = 100;
10268
- * $scope.blood_2 = 120;
10269
- * };
10270
- *
10271
- * $scope.$on('$destroy', function() {
10272
- * // Make sure that the interval is destroyed too
10273
- * $scope.stopFight();
10274
- * });
10275
- * }])
10276
- * // Register the 'myCurrentTime' directive factory method.
10277
- * // We inject $interval and dateFilter service since the factory method is DI.
10278
- * .directive('myCurrentTime', ['$interval', 'dateFilter',
10279
- * function($interval, dateFilter) {
10280
- * // return the directive link function. (compile function not needed)
10281
- * return function(scope, element, attrs) {
10282
- * var format, // date format
10283
- * stopTime; // so that we can cancel the time updates
10284
- *
10285
- * // used to update the UI
10286
- * function updateTime() {
10287
- * element.text(dateFilter(new Date(), format));
10288
- * }
10289
- *
10290
- * // watch the expression, and update the UI on change.
10291
- * scope.$watch(attrs.myCurrentTime, function(value) {
10292
- * format = value;
10293
- * updateTime();
10294
- * });
10295
- *
10296
- * stopTime = $interval(updateTime, 1000);
10297
- *
10298
- * // listen on DOM destroy (removal) event, and cancel the next UI update
10299
- * // to prevent updating time after the DOM element was removed.
10300
- * element.on('$destroy', function() {
10301
- * $interval.cancel(stopTime);
10302
- * });
10303
- * }
10304
- * }]);
10305
- * </script>
10306
- *
10307
- * <div>
10308
- * <div ng-controller="ExampleController">
10309
- * Date format: <input ng-model="format"> <hr/>
10310
- * Current time is: <span my-current-time="format"></span>
10311
- * <hr/>
10312
- * Blood 1 : <font color='red'>{{blood_1}}</font>
10313
- * Blood 2 : <font color='red'>{{blood_2}}</font>
10314
- * <button type="button" data-ng-click="fight()">Fight</button>
10315
- * <button type="button" data-ng-click="stopFight()">StopFight</button>
10316
- * <button type="button" data-ng-click="resetFight()">resetFight</button>
10317
- * </div>
10318
- * </div>
10319
- *
10320
- * </file>
10321
- * </example>
10322
- */
10323
- function interval(fn, delay, count, invokeApply) {
10324
- var setInterval = $window.setInterval,
10325
- clearInterval = $window.clearInterval,
10326
- iteration = 0,
10327
- skipApply = (isDefined(invokeApply) && !invokeApply),
10328
- deferred = (skipApply ? $$q : $q).defer(),
10329
- promise = deferred.promise;
10330
-
10331
- count = isDefined(count) ? count : 0;
10332
-
10333
- promise.then(null, null, fn);
10334
-
10335
- promise.$$intervalId = setInterval(function tick() {
10336
- deferred.notify(iteration++);
10337
-
10338
- if (count > 0 && iteration >= count) {
10339
- deferred.resolve(iteration);
10340
- clearInterval(promise.$$intervalId);
10341
- delete intervals[promise.$$intervalId];
10342
- }
10343
-
10344
- if (!skipApply) $rootScope.$apply();
10345
-
10346
- }, delay);
10347
-
10348
- intervals[promise.$$intervalId] = deferred;
10349
-
10350
- return promise;
10351
- }
10352
-
10353
-
10354
- /**
10355
- * @ngdoc method
10356
- * @name $interval#cancel
10357
- *
10358
- * @description
10359
- * Cancels a task associated with the `promise`.
10360
- *
10361
- * @param {promise} promise returned by the `$interval` function.
10362
- * @returns {boolean} Returns `true` if the task was successfully canceled.
10363
- */
10364
- interval.cancel = function(promise) {
10365
- if (promise && promise.$$intervalId in intervals) {
10366
- intervals[promise.$$intervalId].reject('canceled');
10367
- $window.clearInterval(promise.$$intervalId);
10368
- delete intervals[promise.$$intervalId];
10369
- return true;
10370
- }
10371
- return false;
10372
- };
10373
-
10374
- return interval;
10375
- }];
10376
-}
10377
-
10378
-/**
10379
- * @ngdoc service
10380
- * @name $locale
10381
- *
10382
- * @description
10383
- * $locale service provides localization rules for various Angular components. As of right now the
10384
- * only public api is:
10385
- *
10386
- * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)
10387
- */
10388
-function $LocaleProvider() {
10389
- this.$get = function() {
10390
- return {
10391
- id: 'en-us',
10392
-
10393
- NUMBER_FORMATS: {
10394
- DECIMAL_SEP: '.',
10395
- GROUP_SEP: ',',
10396
- PATTERNS: [
10397
- { // Decimal Pattern
10398
- minInt: 1,
10399
- minFrac: 0,
10400
- maxFrac: 3,
10401
- posPre: '',
10402
- posSuf: '',
10403
- negPre: '-',
10404
- negSuf: '',
10405
- gSize: 3,
10406
- lgSize: 3
10407
- },{ //Currency Pattern
10408
- minInt: 1,
10409
- minFrac: 2,
10410
- maxFrac: 2,
10411
- posPre: '\u00A4',
10412
- posSuf: '',
10413
- negPre: '(\u00A4',
10414
- negSuf: ')',
10415
- gSize: 3,
10416
- lgSize: 3
10417
- }
10418
- ],
10419
- CURRENCY_SYM: '$'
10420
- },
10421
-
10422
- DATETIME_FORMATS: {
10423
- MONTH:
10424
- 'January,February,March,April,May,June,July,August,September,October,November,December'
10425
- .split(','),
10426
- SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),
10427
- DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),
10428
- SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),
10429
- AMPMS: ['AM','PM'],
10430
- medium: 'MMM d, y h:mm:ss a',
10431
- 'short': 'M/d/yy h:mm a',
10432
- fullDate: 'EEEE, MMMM d, y',
10433
- longDate: 'MMMM d, y',
10434
- mediumDate: 'MMM d, y',
10435
- shortDate: 'M/d/yy',
10436
- mediumTime: 'h:mm:ss a',
10437
- shortTime: 'h:mm a'
10438
- },
10439
-
10440
- pluralCat: function(num) {
10441
- if (num === 1) {
10442
- return 'one';
10443
- }
10444
- return 'other';
10445
- }
10446
- };
10447
- };
10448
-}
10449
-
10450
-var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
10451
- DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
10452
-var $locationMinErr = minErr('$location');
10453
-
10454
-
10455
-/**
10456
- * Encode path using encodeUriSegment, ignoring forward slashes
10457
- *
10458
- * @param {string} path Path to encode
10459
- * @returns {string}
10460
- */
10461
-function encodePath(path) {
10462
- var segments = path.split('/'),
10463
- i = segments.length;
10464
-
10465
- while (i--) {
10466
- segments[i] = encodeUriSegment(segments[i]);
10467
- }
10468
-
10469
- return segments.join('/');
10470
-}
10471
-
10472
-function parseAbsoluteUrl(absoluteUrl, locationObj) {
10473
- var parsedUrl = urlResolve(absoluteUrl);
10474
-
10475
- locationObj.$$protocol = parsedUrl.protocol;
10476
- locationObj.$$host = parsedUrl.hostname;
10477
- locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;
10478
-}
10479
-
10480
-
10481
-function parseAppUrl(relativeUrl, locationObj) {
10482
- var prefixed = (relativeUrl.charAt(0) !== '/');
10483
- if (prefixed) {
10484
- relativeUrl = '/' + relativeUrl;
10485
- }
10486
- var match = urlResolve(relativeUrl);
10487
- locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?
10488
- match.pathname.substring(1) : match.pathname);
10489
- locationObj.$$search = parseKeyValue(match.search);
10490
- locationObj.$$hash = decodeURIComponent(match.hash);
10491
-
10492
- // make sure path starts with '/';
10493
- if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {
10494
- locationObj.$$path = '/' + locationObj.$$path;
10495
- }
10496
-}
10497
-
10498
-
10499
-/**
10500
- *
10501
- * @param {string} begin
10502
- * @param {string} whole
10503
- * @returns {string} returns text from whole after begin or undefined if it does not begin with
10504
- * expected string.
10505
- */
10506
-function beginsWith(begin, whole) {
10507
- if (whole.indexOf(begin) === 0) {
10508
- return whole.substr(begin.length);
10509
- }
10510
-}
10511
-
10512
-
10513
-function stripHash(url) {
10514
- var index = url.indexOf('#');
10515
- return index == -1 ? url : url.substr(0, index);
10516
-}
10517
-
10518
-function trimEmptyHash(url) {
10519
- return url.replace(/(#.+)|#$/, '$1');
10520
-}
10521
-
10522
-
10523
-function stripFile(url) {
10524
- return url.substr(0, stripHash(url).lastIndexOf('/') + 1);
10525
-}
10526
-
10527
-/* return the server only (scheme://host:port) */
10528
-function serverBase(url) {
10529
- return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));
10530
-}
10531
-
10532
-
10533
-/**
10534
- * LocationHtml5Url represents an url
10535
- * This object is exposed as $location service when HTML5 mode is enabled and supported
10536
- *
10537
- * @constructor
10538
- * @param {string} appBase application base URL
10539
- * @param {string} basePrefix url path prefix
10540
- */
10541
-function LocationHtml5Url(appBase, basePrefix) {
10542
- this.$$html5 = true;
10543
- basePrefix = basePrefix || '';
10544
- var appBaseNoFile = stripFile(appBase);
10545
- parseAbsoluteUrl(appBase, this);
10546
-
10547
-
10548
- /**
10549
- * Parse given html5 (regular) url string into properties
10550
- * @param {string} url HTML5 url
10551
- * @private
10552
- */
10553
- this.$$parse = function(url) {
10554
- var pathUrl = beginsWith(appBaseNoFile, url);
10555
- if (!isString(pathUrl)) {
10556
- throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url,
10557
- appBaseNoFile);
10558
- }
10559
-
10560
- parseAppUrl(pathUrl, this);
10561
-
10562
- if (!this.$$path) {
10563
- this.$$path = '/';
10564
- }
10565
-
10566
- this.$$compose();
10567
- };
10568
-
10569
- /**
10570
- * Compose url and update `absUrl` property
10571
- * @private
10572
- */
10573
- this.$$compose = function() {
10574
- var search = toKeyValue(this.$$search),
10575
- hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
10576
-
10577
- this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
10578
- this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'
10579
- };
10580
-
10581
- this.$$parseLinkUrl = function(url, relHref) {
10582
- if (relHref && relHref[0] === '#') {
10583
- // special case for links to hash fragments:
10584
- // keep the old url and only replace the hash fragment
10585
- this.hash(relHref.slice(1));
10586
- return true;
10587
- }
10588
- var appUrl, prevAppUrl;
10589
- var rewrittenUrl;
10590
-
10591
- if ((appUrl = beginsWith(appBase, url)) !== undefined) {
10592
- prevAppUrl = appUrl;
10593
- if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) {
10594
- rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
10595
- } else {
10596
- rewrittenUrl = appBase + prevAppUrl;
10597
- }
10598
- } else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) {
10599
- rewrittenUrl = appBaseNoFile + appUrl;
10600
- } else if (appBaseNoFile == url + '/') {
10601
- rewrittenUrl = appBaseNoFile;
10602
- }
10603
- if (rewrittenUrl) {
10604
- this.$$parse(rewrittenUrl);
10605
- }
10606
- return !!rewrittenUrl;
10607
- };
10608
-}
10609
-
10610
-
10611
-/**
10612
- * LocationHashbangUrl represents url
10613
- * This object is exposed as $location service when developer doesn't opt into html5 mode.
10614
- * It also serves as the base class for html5 mode fallback on legacy browsers.
10615
- *
10616
- * @constructor
10617
- * @param {string} appBase application base URL
10618
- * @param {string} hashPrefix hashbang prefix
10619
- */
10620
-function LocationHashbangUrl(appBase, hashPrefix) {
10621
- var appBaseNoFile = stripFile(appBase);
10622
-
10623
- parseAbsoluteUrl(appBase, this);
10624
-
10625
-
10626
- /**
10627
- * Parse given hashbang url into properties
10628
- * @param {string} url Hashbang url
10629
- * @private
10630
- */
10631
- this.$$parse = function(url) {
10632
- var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);
10633
- var withoutHashUrl;
10634
-
10635
- if (withoutBaseUrl.charAt(0) === '#') {
10636
-
10637
- // The rest of the url starts with a hash so we have
10638
- // got either a hashbang path or a plain hash fragment
10639
- withoutHashUrl = beginsWith(hashPrefix, withoutBaseUrl);
10640
- if (isUndefined(withoutHashUrl)) {
10641
- // There was no hashbang prefix so we just have a hash fragment
10642
- withoutHashUrl = withoutBaseUrl;
10643
- }
10644
-
10645
- } else {
10646
- // There was no hashbang path nor hash fragment:
10647
- // If we are in HTML5 mode we use what is left as the path;
10648
- // Otherwise we ignore what is left
10649
- withoutHashUrl = this.$$html5 ? withoutBaseUrl : '';
10650
- }
10651
-
10652
- parseAppUrl(withoutHashUrl, this);
10653
-
10654
- this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);
10655
-
10656
- this.$$compose();
10657
-
10658
- /*
10659
- * In Windows, on an anchor node on documents loaded from
10660
- * the filesystem, the browser will return a pathname
10661
- * prefixed with the drive name ('/C:/path') when a
10662
- * pathname without a drive is set:
10663
- * * a.setAttribute('href', '/foo')
10664
- * * a.pathname === '/C:/foo' //true
10665
- *
10666
- * Inside of Angular, we're always using pathnames that
10667
- * do not include drive names for routing.
10668
- */
10669
- function removeWindowsDriveName(path, url, base) {
10670
- /*
10671
- Matches paths for file protocol on windows,
10672
- such as /C:/foo/bar, and captures only /foo/bar.
10673
- */
10674
- var windowsFilePathExp = /^\/[A-Z]:(\/.*)/;
10675
-
10676
- var firstPathSegmentMatch;
10677
-
10678
- //Get the relative path from the input URL.
10679
- if (url.indexOf(base) === 0) {
10680
- url = url.replace(base, '');
10681
- }
10682
-
10683
- // The input URL intentionally contains a first path segment that ends with a colon.
10684
- if (windowsFilePathExp.exec(url)) {
10685
- return path;
10686
- }
10687
-
10688
- firstPathSegmentMatch = windowsFilePathExp.exec(path);
10689
- return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;
10690
- }
10691
- };
10692
-
10693
- /**
10694
- * Compose hashbang url and update `absUrl` property
10695
- * @private
10696
- */
10697
- this.$$compose = function() {
10698
- var search = toKeyValue(this.$$search),
10699
- hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
10700
-
10701
- this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
10702
- this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');
10703
- };
10704
-
10705
- this.$$parseLinkUrl = function(url, relHref) {
10706
- if (stripHash(appBase) == stripHash(url)) {
10707
- this.$$parse(url);
10708
- return true;
10709
- }
10710
- return false;
10711
- };
10712
-}
10713
-
10714
-
10715
-/**
10716
- * LocationHashbangUrl represents url
10717
- * This object is exposed as $location service when html5 history api is enabled but the browser
10718
- * does not support it.
10719
- *
10720
- * @constructor
10721
- * @param {string} appBase application base URL
10722
- * @param {string} hashPrefix hashbang prefix
10723
- */
10724
-function LocationHashbangInHtml5Url(appBase, hashPrefix) {
10725
- this.$$html5 = true;
10726
- LocationHashbangUrl.apply(this, arguments);
10727
-
10728
- var appBaseNoFile = stripFile(appBase);
10729
-
10730
- this.$$parseLinkUrl = function(url, relHref) {
10731
- if (relHref && relHref[0] === '#') {
10732
- // special case for links to hash fragments:
10733
- // keep the old url and only replace the hash fragment
10734
- this.hash(relHref.slice(1));
10735
- return true;
10736
- }
10737
-
10738
- var rewrittenUrl;
10739
- var appUrl;
10740
-
10741
- if (appBase == stripHash(url)) {
10742
- rewrittenUrl = url;
10743
- } else if ((appUrl = beginsWith(appBaseNoFile, url))) {
10744
- rewrittenUrl = appBase + hashPrefix + appUrl;
10745
- } else if (appBaseNoFile === url + '/') {
10746
- rewrittenUrl = appBaseNoFile;
10747
- }
10748
- if (rewrittenUrl) {
10749
- this.$$parse(rewrittenUrl);
10750
- }
10751
- return !!rewrittenUrl;
10752
- };
10753
-
10754
- this.$$compose = function() {
10755
- var search = toKeyValue(this.$$search),
10756
- hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
10757
-
10758
- this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
10759
- // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#'
10760
- this.$$absUrl = appBase + hashPrefix + this.$$url;
10761
- };
10762
-
10763
-}
10764
-
10765
-
10766
-var locationPrototype = {
10767
-
10768
- /**
10769
- * Are we in html5 mode?
10770
- * @private
10771
- */
10772
- $$html5: false,
10773
-
10774
- /**
10775
- * Has any change been replacing?
10776
- * @private
10777
- */
10778
- $$replace: false,
10779
-
10780
- /**
10781
- * @ngdoc method
10782
- * @name $location#absUrl
10783
- *
10784
- * @description
10785
- * This method is getter only.
10786
- *
10787
- * Return full url representation with all segments encoded according to rules specified in
10788
- * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).
10789
- *
10790
- *
10791
- * ```js
10792
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
10793
- * var absUrl = $location.absUrl();
10794
- * // => "http://example.com/#/some/path?foo=bar&baz=xoxo"
10795
- * ```
10796
- *
10797
- * @return {string} full url
10798
- */
10799
- absUrl: locationGetter('$$absUrl'),
10800
-
10801
- /**
10802
- * @ngdoc method
10803
- * @name $location#url
10804
- *
10805
- * @description
10806
- * This method is getter / setter.
10807
- *
10808
- * Return url (e.g. `/path?a=b#hash`) when called without any parameter.
10809
- *
10810
- * Change path, search and hash, when called with parameter and return `$location`.
10811
- *
10812
- *
10813
- * ```js
10814
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
10815
- * var url = $location.url();
10816
- * // => "/some/path?foo=bar&baz=xoxo"
10817
- * ```
10818
- *
10819
- * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)
10820
- * @return {string} url
10821
- */
10822
- url: function(url) {
10823
- if (isUndefined(url))
10824
- return this.$$url;
10825
-
10826
- var match = PATH_MATCH.exec(url);
10827
- if (match[1] || url === '') this.path(decodeURIComponent(match[1]));
10828
- if (match[2] || match[1] || url === '') this.search(match[3] || '');
10829
- this.hash(match[5] || '');
10830
-
10831
- return this;
10832
- },
10833
-
10834
- /**
10835
- * @ngdoc method
10836
- * @name $location#protocol
10837
- *
10838
- * @description
10839
- * This method is getter only.
10840
- *
10841
- * Return protocol of current url.
10842
- *
10843
- *
10844
- * ```js
10845
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
10846
- * var protocol = $location.protocol();
10847
- * // => "http"
10848
- * ```
10849
- *
10850
- * @return {string} protocol of current url
10851
- */
10852
- protocol: locationGetter('$$protocol'),
10853
-
10854
- /**
10855
- * @ngdoc method
10856
- * @name $location#host
10857
- *
10858
- * @description
10859
- * This method is getter only.
10860
- *
10861
- * Return host of current url.
10862
- *
10863
- *
10864
- * ```js
10865
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
10866
- * var host = $location.host();
10867
- * // => "example.com"
10868
- * ```
10869
- *
10870
- * @return {string} host of current url.
10871
- */
10872
- host: locationGetter('$$host'),
10873
-
10874
- /**
10875
- * @ngdoc method
10876
- * @name $location#port
10877
- *
10878
- * @description
10879
- * This method is getter only.
10880
- *
10881
- * Return port of current url.
10882
- *
10883
- *
10884
- * ```js
10885
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
10886
- * var port = $location.port();
10887
- * // => 80
10888
- * ```
10889
- *
10890
- * @return {Number} port
10891
- */
10892
- port: locationGetter('$$port'),
10893
-
10894
- /**
10895
- * @ngdoc method
10896
- * @name $location#path
10897
- *
10898
- * @description
10899
- * This method is getter / setter.
10900
- *
10901
- * Return path of current url when called without any parameter.
10902
- *
10903
- * Change path when called with parameter and return `$location`.
10904
- *
10905
- * Note: Path should always begin with forward slash (/), this method will add the forward slash
10906
- * if it is missing.
10907
- *
10908
- *
10909
- * ```js
10910
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
10911
- * var path = $location.path();
10912
- * // => "/some/path"
10913
- * ```
10914
- *
10915
- * @param {(string|number)=} path New path
10916
- * @return {string} path
10917
- */
10918
- path: locationGetterSetter('$$path', function(path) {
10919
- path = path !== null ? path.toString() : '';
10920
- return path.charAt(0) == '/' ? path : '/' + path;
10921
- }),
10922
-
10923
- /**
10924
- * @ngdoc method
10925
- * @name $location#search
10926
- *
10927
- * @description
10928
- * This method is getter / setter.
10929
- *
10930
- * Return search part (as object) of current url when called without any parameter.
10931
- *
10932
- * Change search part when called with parameter and return `$location`.
10933
- *
10934
- *
10935
- * ```js
10936
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
10937
- * var searchObject = $location.search();
10938
- * // => {foo: 'bar', baz: 'xoxo'}
10939
- *
10940
- * // set foo to 'yipee'
10941
- * $location.search('foo', 'yipee');
10942
- * // $location.search() => {foo: 'yipee', baz: 'xoxo'}
10943
- * ```
10944
- *
10945
- * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or
10946
- * hash object.
10947
- *
10948
- * When called with a single argument the method acts as a setter, setting the `search` component
10949
- * of `$location` to the specified value.
10950
- *
10951
- * If the argument is a hash object containing an array of values, these values will be encoded
10952
- * as duplicate search parameters in the url.
10953
- *
10954
- * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`
10955
- * will override only a single search property.
10956
- *
10957
- * If `paramValue` is an array, it will override the property of the `search` component of
10958
- * `$location` specified via the first argument.
10959
- *
10960
- * If `paramValue` is `null`, the property specified via the first argument will be deleted.
10961
- *
10962
- * If `paramValue` is `true`, the property specified via the first argument will be added with no
10963
- * value nor trailing equal sign.
10964
- *
10965
- * @return {Object} If called with no arguments returns the parsed `search` object. If called with
10966
- * one or more arguments returns `$location` object itself.
10967
- */
10968
- search: function(search, paramValue) {
10969
- switch (arguments.length) {
10970
- case 0:
10971
- return this.$$search;
10972
- case 1:
10973
- if (isString(search) || isNumber(search)) {
10974
- search = search.toString();
10975
- this.$$search = parseKeyValue(search);
10976
- } else if (isObject(search)) {
10977
- search = copy(search, {});
10978
- // remove object undefined or null properties
10979
- forEach(search, function(value, key) {
10980
- if (value == null) delete search[key];
10981
- });
10982
-
10983
- this.$$search = search;
10984
- } else {
10985
- throw $locationMinErr('isrcharg',
10986
- 'The first argument of the `$location#search()` call must be a string or an object.');
10987
- }
10988
- break;
10989
- default:
10990
- if (isUndefined(paramValue) || paramValue === null) {
10991
- delete this.$$search[search];
10992
- } else {
10993
- this.$$search[search] = paramValue;
10994
- }
10995
- }
10996
-
10997
- this.$$compose();
10998
- return this;
10999
- },
11000
-
11001
- /**
11002
- * @ngdoc method
11003
- * @name $location#hash
11004
- *
11005
- * @description
11006
- * This method is getter / setter.
11007
- *
11008
- * Return hash fragment when called without any parameter.
11009
- *
11010
- * Change hash fragment when called with parameter and return `$location`.
11011
- *
11012
- *
11013
- * ```js
11014
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue
11015
- * var hash = $location.hash();
11016
- * // => "hashValue"
11017
- * ```
11018
- *
11019
- * @param {(string|number)=} hash New hash fragment
11020
- * @return {string} hash
11021
- */
11022
- hash: locationGetterSetter('$$hash', function(hash) {
11023
- return hash !== null ? hash.toString() : '';
11024
- }),
11025
-
11026
- /**
11027
- * @ngdoc method
11028
- * @name $location#replace
11029
- *
11030
- * @description
11031
- * If called, all changes to $location during current `$digest` will be replacing current history
11032
- * record, instead of adding new one.
11033
- */
11034
- replace: function() {
11035
- this.$$replace = true;
11036
- return this;
11037
- }
11038
-};
11039
-
11040
-forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) {
11041
- Location.prototype = Object.create(locationPrototype);
11042
-
11043
- /**
11044
- * @ngdoc method
11045
- * @name $location#state
11046
- *
11047
- * @description
11048
- * This method is getter / setter.
11049
- *
11050
- * Return the history state object when called without any parameter.
11051
- *
11052
- * Change the history state object when called with one parameter and return `$location`.
11053
- * The state object is later passed to `pushState` or `replaceState`.
11054
- *
11055
- * NOTE: This method is supported only in HTML5 mode and only in browsers supporting
11056
- * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support
11057
- * older browsers (like IE9 or Android < 4.0), don't use this method.
11058
- *
11059
- * @param {object=} state State object for pushState or replaceState
11060
- * @return {object} state
11061
- */
11062
- Location.prototype.state = function(state) {
11063
- if (!arguments.length)
11064
- return this.$$state;
11065
-
11066
- if (Location !== LocationHtml5Url || !this.$$html5) {
11067
- throw $locationMinErr('nostate', 'History API state support is available only ' +
11068
- 'in HTML5 mode and only in browsers supporting HTML5 History API');
11069
- }
11070
- // The user might modify `stateObject` after invoking `$location.state(stateObject)`
11071
- // but we're changing the $$state reference to $browser.state() during the $digest
11072
- // so the modification window is narrow.
11073
- this.$$state = isUndefined(state) ? null : state;
11074
-
11075
- return this;
11076
- };
11077
-});
11078
-
11079
-
11080
-function locationGetter(property) {
11081
- return function() {
11082
- return this[property];
11083
- };
11084
-}
11085
-
11086
-
11087
-function locationGetterSetter(property, preprocess) {
11088
- return function(value) {
11089
- if (isUndefined(value))
11090
- return this[property];
11091
-
11092
- this[property] = preprocess(value);
11093
- this.$$compose();
11094
-
11095
- return this;
11096
- };
11097
-}
11098
-
11099
-
11100
-/**
11101
- * @ngdoc service
11102
- * @name $location
11103
- *
11104
- * @requires $rootElement
11105
- *
11106
- * @description
11107
- * The $location service parses the URL in the browser address bar (based on the
11108
- * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL
11109
- * available to your application. Changes to the URL in the address bar are reflected into
11110
- * $location service and changes to $location are reflected into the browser address bar.
11111
- *
11112
- * **The $location service:**
11113
- *
11114
- * - Exposes the current URL in the browser address bar, so you can
11115
- * - Watch and observe the URL.
11116
- * - Change the URL.
11117
- * - Synchronizes the URL with the browser when the user
11118
- * - Changes the address bar.
11119
- * - Clicks the back or forward button (or clicks a History link).
11120
- * - Clicks on a link.
11121
- * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).
11122
- *
11123
- * For more information see {@link guide/$location Developer Guide: Using $location}
11124
- */
11125
-
11126
-/**
11127
- * @ngdoc provider
11128
- * @name $locationProvider
11129
- * @description
11130
- * Use the `$locationProvider` to configure how the application deep linking paths are stored.
11131
- */
11132
-function $LocationProvider() {
11133
- var hashPrefix = '',
11134
- html5Mode = {
11135
- enabled: false,
11136
- requireBase: true,
11137
- rewriteLinks: true
11138
- };
11139
-
11140
- /**
11141
- * @ngdoc method
11142
- * @name $locationProvider#hashPrefix
11143
- * @description
11144
- * @param {string=} prefix Prefix for hash part (containing path and search)
11145
- * @returns {*} current value if used as getter or itself (chaining) if used as setter
11146
- */
11147
- this.hashPrefix = function(prefix) {
11148
- if (isDefined(prefix)) {
11149
- hashPrefix = prefix;
11150
- return this;
11151
- } else {
11152
- return hashPrefix;
11153
- }
11154
- };
11155
-
11156
- /**
11157
- * @ngdoc method
11158
- * @name $locationProvider#html5Mode
11159
- * @description
11160
- * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value.
11161
- * If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported
11162
- * properties:
11163
- * - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to
11164
- * change urls where supported. Will fall back to hash-prefixed paths in browsers that do not
11165
- * support `pushState`.
11166
- * - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies
11167
- * whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are
11168
- * true, and a base tag is not present, an error will be thrown when `$location` is injected.
11169
- * See the {@link guide/$location $location guide for more information}
11170
- * - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled,
11171
- * enables/disables url rewriting for relative links.
11172
- *
11173
- * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter
11174
- */
11175
- this.html5Mode = function(mode) {
11176
- if (isBoolean(mode)) {
11177
- html5Mode.enabled = mode;
11178
- return this;
11179
- } else if (isObject(mode)) {
11180
-
11181
- if (isBoolean(mode.enabled)) {
11182
- html5Mode.enabled = mode.enabled;
11183
- }
11184
-
11185
- if (isBoolean(mode.requireBase)) {
11186
- html5Mode.requireBase = mode.requireBase;
11187
- }
11188
-
11189
- if (isBoolean(mode.rewriteLinks)) {
11190
- html5Mode.rewriteLinks = mode.rewriteLinks;
11191
- }
11192
-
11193
- return this;
11194
- } else {
11195
- return html5Mode;
11196
- }
11197
- };
11198
-
11199
- /**
11200
- * @ngdoc event
11201
- * @name $location#$locationChangeStart
11202
- * @eventType broadcast on root scope
11203
- * @description
11204
- * Broadcasted before a URL will change.
11205
- *
11206
- * This change can be prevented by calling
11207
- * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
11208
- * details about event object. Upon successful change
11209
- * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired.
11210
- *
11211
- * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
11212
- * the browser supports the HTML5 History API.
11213
- *
11214
- * @param {Object} angularEvent Synthetic event object.
11215
- * @param {string} newUrl New URL
11216
- * @param {string=} oldUrl URL that was before it was changed.
11217
- * @param {string=} newState New history state object
11218
- * @param {string=} oldState History state object that was before it was changed.
11219
- */
11220
-
11221
- /**
11222
- * @ngdoc event
11223
- * @name $location#$locationChangeSuccess
11224
- * @eventType broadcast on root scope
11225
- * @description
11226
- * Broadcasted after a URL was changed.
11227
- *
11228
- * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
11229
- * the browser supports the HTML5 History API.
11230
- *
11231
- * @param {Object} angularEvent Synthetic event object.
11232
- * @param {string} newUrl New URL
11233
- * @param {string=} oldUrl URL that was before it was changed.
11234
- * @param {string=} newState New history state object
11235
- * @param {string=} oldState History state object that was before it was changed.
11236
- */
11237
-
11238
- this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',
11239
- function($rootScope, $browser, $sniffer, $rootElement) {
11240
- var $location,
11241
- LocationMode,
11242
- baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''
11243
- initialUrl = $browser.url(),
11244
- appBase;
11245
-
11246
- if (html5Mode.enabled) {
11247
- if (!baseHref && html5Mode.requireBase) {
11248
- throw $locationMinErr('nobase',
11249
- "$location in HTML5 mode requires a <base> tag to be present!");
11250
- }
11251
- appBase = serverBase(initialUrl) + (baseHref || '/');
11252
- LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
11253
- } else {
11254
- appBase = stripHash(initialUrl);
11255
- LocationMode = LocationHashbangUrl;
11256
- }
11257
- $location = new LocationMode(appBase, '#' + hashPrefix);
11258
- $location.$$parseLinkUrl(initialUrl, initialUrl);
11259
-
11260
- $location.$$state = $browser.state();
11261
-
11262
- var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i;
11263
-
11264
- function setBrowserUrlWithFallback(url, replace, state) {
11265
- var oldUrl = $location.url();
11266
- var oldState = $location.$$state;
11267
- try {
11268
- $browser.url(url, replace, state);
11269
-
11270
- // Make sure $location.state() returns referentially identical (not just deeply equal)
11271
- // state object; this makes possible quick checking if the state changed in the digest
11272
- // loop. Checking deep equality would be too expensive.
11273
- $location.$$state = $browser.state();
11274
- } catch (e) {
11275
- // Restore old values if pushState fails
11276
- $location.url(oldUrl);
11277
- $location.$$state = oldState;
11278
-
11279
- throw e;
11280
- }
11281
- }
11282
-
11283
- $rootElement.on('click', function(event) {
11284
- // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
11285
- // currently we open nice url link and redirect then
11286
-
11287
- if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.which == 2) return;
11288
-
11289
- var elm = jqLite(event.target);
11290
-
11291
- // traverse the DOM up to find first A tag
11292
- while (nodeName_(elm[0]) !== 'a') {
11293
- // ignore rewriting if no A tag (reached root element, or no parent - removed from document)
11294
- if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;
11295
- }
11296
-
11297
- var absHref = elm.prop('href');
11298
- // get the actual href attribute - see
11299
- // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx
11300
- var relHref = elm.attr('href') || elm.attr('xlink:href');
11301
-
11302
- if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {
11303
- // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during
11304
- // an animation.
11305
- absHref = urlResolve(absHref.animVal).href;
11306
- }
11307
-
11308
- // Ignore when url is started with javascript: or mailto:
11309
- if (IGNORE_URI_REGEXP.test(absHref)) return;
11310
-
11311
- if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) {
11312
- if ($location.$$parseLinkUrl(absHref, relHref)) {
11313
- // We do a preventDefault for all urls that are part of the angular application,
11314
- // in html5mode and also without, so that we are able to abort navigation without
11315
- // getting double entries in the location history.
11316
- event.preventDefault();
11317
- // update location manually
11318
- if ($location.absUrl() != $browser.url()) {
11319
- $rootScope.$apply();
11320
- // hack to work around FF6 bug 684208 when scenario runner clicks on links
11321
- window.angular['ff-684208-preventDefault'] = true;
11322
- }
11323
- }
11324
- }
11325
- });
11326
-
11327
-
11328
- // rewrite hashbang url <> html5 url
11329
- if ($location.absUrl() != initialUrl) {
11330
- $browser.url($location.absUrl(), true);
11331
- }
11332
-
11333
- var initializing = true;
11334
-
11335
- // update $location when $browser url changes
11336
- $browser.onUrlChange(function(newUrl, newState) {
11337
- $rootScope.$evalAsync(function() {
11338
- var oldUrl = $location.absUrl();
11339
- var oldState = $location.$$state;
11340
- var defaultPrevented;
11341
-
11342
- $location.$$parse(newUrl);
11343
- $location.$$state = newState;
11344
-
11345
- defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
11346
- newState, oldState).defaultPrevented;
11347
-
11348
- // if the location was changed by a `$locationChangeStart` handler then stop
11349
- // processing this location change
11350
- if ($location.absUrl() !== newUrl) return;
11351
-
11352
- if (defaultPrevented) {
11353
- $location.$$parse(oldUrl);
11354
- $location.$$state = oldState;
11355
- setBrowserUrlWithFallback(oldUrl, false, oldState);
11356
- } else {
11357
- initializing = false;
11358
- afterLocationChange(oldUrl, oldState);
11359
- }
11360
- });
11361
- if (!$rootScope.$$phase) $rootScope.$digest();
11362
- });
11363
-
11364
- // update browser
11365
- $rootScope.$watch(function $locationWatch() {
11366
- var oldUrl = trimEmptyHash($browser.url());
11367
- var newUrl = trimEmptyHash($location.absUrl());
11368
- var oldState = $browser.state();
11369
- var currentReplace = $location.$$replace;
11370
- var urlOrStateChanged = oldUrl !== newUrl ||
11371
- ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);
11372
-
11373
- if (initializing || urlOrStateChanged) {
11374
- initializing = false;
11375
-
11376
- $rootScope.$evalAsync(function() {
11377
- var newUrl = $location.absUrl();
11378
- var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
11379
- $location.$$state, oldState).defaultPrevented;
11380
-
11381
- // if the location was changed by a `$locationChangeStart` handler then stop
11382
- // processing this location change
11383
- if ($location.absUrl() !== newUrl) return;
11384
-
11385
- if (defaultPrevented) {
11386
- $location.$$parse(oldUrl);
11387
- $location.$$state = oldState;
11388
- } else {
11389
- if (urlOrStateChanged) {
11390
- setBrowserUrlWithFallback(newUrl, currentReplace,
11391
- oldState === $location.$$state ? null : $location.$$state);
11392
- }
11393
- afterLocationChange(oldUrl, oldState);
11394
- }
11395
- });
11396
- }
11397
-
11398
- $location.$$replace = false;
11399
-
11400
- // we don't need to return anything because $evalAsync will make the digest loop dirty when
11401
- // there is a change
11402
- });
11403
-
11404
- return $location;
11405
-
11406
- function afterLocationChange(oldUrl, oldState) {
11407
- $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl,
11408
- $location.$$state, oldState);
11409
- }
11410
-}];
11411
-}
11412
-
11413
-/**
11414
- * @ngdoc service
11415
- * @name $log
11416
- * @requires $window
11417
- *
11418
- * @description
11419
- * Simple service for logging. Default implementation safely writes the message
11420
- * into the browser's console (if present).
11421
- *
11422
- * The main purpose of this service is to simplify debugging and troubleshooting.
11423
- *
11424
- * The default is to log `debug` messages. You can use
11425
- * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.
11426
- *
11427
- * @example
11428
- <example module="logExample">
11429
- <file name="script.js">
11430
- angular.module('logExample', [])
11431
- .controller('LogController', ['$scope', '$log', function($scope, $log) {
11432
- $scope.$log = $log;
11433
- $scope.message = 'Hello World!';
11434
- }]);
11435
- </file>
11436
- <file name="index.html">
11437
- <div ng-controller="LogController">
11438
- <p>Reload this page with open console, enter text and hit the log button...</p>
11439
- Message:
11440
- <input type="text" ng-model="message"/>
11441
- <button ng-click="$log.log(message)">log</button>
11442
- <button ng-click="$log.warn(message)">warn</button>
11443
- <button ng-click="$log.info(message)">info</button>
11444
- <button ng-click="$log.error(message)">error</button>
11445
- </div>
11446
- </file>
11447
- </example>
11448
- */
11449
-
11450
-/**
11451
- * @ngdoc provider
11452
- * @name $logProvider
11453
- * @description
11454
- * Use the `$logProvider` to configure how the application logs messages
11455
- */
11456
-function $LogProvider() {
11457
- var debug = true,
11458
- self = this;
11459
-
11460
- /**
11461
- * @ngdoc method
11462
- * @name $logProvider#debugEnabled
11463
- * @description
11464
- * @param {boolean=} flag enable or disable debug level messages
11465
- * @returns {*} current value if used as getter or itself (chaining) if used as setter
11466
- */
11467
- this.debugEnabled = function(flag) {
11468
- if (isDefined(flag)) {
11469
- debug = flag;
11470
- return this;
11471
- } else {
11472
- return debug;
11473
- }
11474
- };
11475
-
11476
- this.$get = ['$window', function($window) {
11477
- return {
11478
- /**
11479
- * @ngdoc method
11480
- * @name $log#log
11481
- *
11482
- * @description
11483
- * Write a log message
11484
- */
11485
- log: consoleLog('log'),
11486
-
11487
- /**
11488
- * @ngdoc method
11489
- * @name $log#info
11490
- *
11491
- * @description
11492
- * Write an information message
11493
- */
11494
- info: consoleLog('info'),
11495
-
11496
- /**
11497
- * @ngdoc method
11498
- * @name $log#warn
11499
- *
11500
- * @description
11501
- * Write a warning message
11502
- */
11503
- warn: consoleLog('warn'),
11504
-
11505
- /**
11506
- * @ngdoc method
11507
- * @name $log#error
11508
- *
11509
- * @description
11510
- * Write an error message
11511
- */
11512
- error: consoleLog('error'),
11513
-
11514
- /**
11515
- * @ngdoc method
11516
- * @name $log#debug
11517
- *
11518
- * @description
11519
- * Write a debug message
11520
- */
11521
- debug: (function() {
11522
- var fn = consoleLog('debug');
11523
-
11524
- return function() {
11525
- if (debug) {
11526
- fn.apply(self, arguments);
11527
- }
11528
- };
11529
- }())
11530
- };
11531
-
11532
- function formatError(arg) {
11533
- if (arg instanceof Error) {
11534
- if (arg.stack) {
11535
- arg = (arg.message && arg.stack.indexOf(arg.message) === -1)
11536
- ? 'Error: ' + arg.message + '\n' + arg.stack
11537
- : arg.stack;
11538
- } else if (arg.sourceURL) {
11539
- arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line;
11540
- }
11541
- }
11542
- return arg;
11543
- }
11544
-
11545
- function consoleLog(type) {
11546
- var console = $window.console || {},
11547
- logFn = console[type] || console.log || noop,
11548
- hasApply = false;
11549
-
11550
- // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.
11551
- // The reason behind this is that console.log has type "object" in IE8...
11552
- try {
11553
- hasApply = !!logFn.apply;
11554
- } catch (e) {}
11555
-
11556
- if (hasApply) {
11557
- return function() {
11558
- var args = [];
11559
- forEach(arguments, function(arg) {
11560
- args.push(formatError(arg));
11561
- });
11562
- return logFn.apply(console, args);
11563
- };
11564
- }
11565
-
11566
- // we are IE which either doesn't have window.console => this is noop and we do nothing,
11567
- // or we are IE where console.log doesn't have apply so we log at least first 2 args
11568
- return function(arg1, arg2) {
11569
- logFn(arg1, arg2 == null ? '' : arg2);
11570
- };
11571
- }
11572
- }];
11573
-}
11574
-
11575
-var $parseMinErr = minErr('$parse');
11576
-
11577
-// Sandboxing Angular Expressions
11578
-// ------------------------------
11579
-// Angular expressions are generally considered safe because these expressions only have direct
11580
-// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by
11581
-// obtaining a reference to native JS functions such as the Function constructor.
11582
-//
11583
-// As an example, consider the following Angular expression:
11584
-//
11585
-// {}.toString.constructor('alert("evil JS code")')
11586
-//
11587
-// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits
11588
-// against the expression language, but not to prevent exploits that were enabled by exposing
11589
-// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good
11590
-// practice and therefore we are not even trying to protect against interaction with an object
11591
-// explicitly exposed in this way.
11592
-//
11593
-// In general, it is not possible to access a Window object from an angular expression unless a
11594
-// window or some DOM object that has a reference to window is published onto a Scope.
11595
-// Similarly we prevent invocations of function known to be dangerous, as well as assignments to
11596
-// native objects.
11597
-//
11598
-// See https://docs.angularjs.org/guide/security
11599
-
11600
-
11601
-function ensureSafeMemberName(name, fullExpression) {
11602
- if (name === "__defineGetter__" || name === "__defineSetter__"
11603
- || name === "__lookupGetter__" || name === "__lookupSetter__"
11604
- || name === "__proto__") {
11605
- throw $parseMinErr('isecfld',
11606
- 'Attempting to access a disallowed field in Angular expressions! '
11607
- + 'Expression: {0}', fullExpression);
11608
- }
11609
- return name;
11610
-}
11611
-
11612
-function ensureSafeObject(obj, fullExpression) {
11613
- // nifty check if obj is Function that is fast and works across iframes and other contexts
11614
- if (obj) {
11615
- if (obj.constructor === obj) {
11616
- throw $parseMinErr('isecfn',
11617
- 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
11618
- fullExpression);
11619
- } else if (// isWindow(obj)
11620
- obj.window === obj) {
11621
- throw $parseMinErr('isecwindow',
11622
- 'Referencing the Window in Angular expressions is disallowed! Expression: {0}',
11623
- fullExpression);
11624
- } else if (// isElement(obj)
11625
- obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {
11626
- throw $parseMinErr('isecdom',
11627
- 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',
11628
- fullExpression);
11629
- } else if (// block Object so that we can't get hold of dangerous Object.* methods
11630
- obj === Object) {
11631
- throw $parseMinErr('isecobj',
11632
- 'Referencing Object in Angular expressions is disallowed! Expression: {0}',
11633
- fullExpression);
11634
- }
11635
- }
11636
- return obj;
11637
-}
11638
-
11639
-var CALL = Function.prototype.call;
11640
-var APPLY = Function.prototype.apply;
11641
-var BIND = Function.prototype.bind;
11642
-
11643
-function ensureSafeFunction(obj, fullExpression) {
11644
- if (obj) {
11645
- if (obj.constructor === obj) {
11646
- throw $parseMinErr('isecfn',
11647
- 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
11648
- fullExpression);
11649
- } else if (obj === CALL || obj === APPLY || obj === BIND) {
11650
- throw $parseMinErr('isecff',
11651
- 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',
11652
- fullExpression);
11653
- }
11654
- }
11655
-}
11656
-
11657
-//Keyword constants
11658
-var CONSTANTS = createMap();
11659
-forEach({
11660
- 'null': function() { return null; },
11661
- 'true': function() { return true; },
11662
- 'false': function() { return false; },
11663
- 'undefined': function() {}
11664
-}, function(constantGetter, name) {
11665
- constantGetter.constant = constantGetter.literal = constantGetter.sharedGetter = true;
11666
- CONSTANTS[name] = constantGetter;
11667
-});
11668
-
11669
-//Not quite a constant, but can be lex/parsed the same
11670
-CONSTANTS['this'] = function(self) { return self; };
11671
-CONSTANTS['this'].sharedGetter = true;
11672
-
11673
-
11674
-//Operators - will be wrapped by binaryFn/unaryFn/assignment/filter
11675
-var OPERATORS = extend(createMap(), {
11676
- '+':function(self, locals, a, b) {
11677
- a=a(self, locals); b=b(self, locals);
11678
- if (isDefined(a)) {
11679
- if (isDefined(b)) {
11680
- return a + b;
11681
- }
11682
- return a;
11683
- }
11684
- return isDefined(b) ? b : undefined;},
11685
- '-':function(self, locals, a, b) {
11686
- a=a(self, locals); b=b(self, locals);
11687
- return (isDefined(a) ? a : 0) - (isDefined(b) ? b : 0);
11688
- },
11689
- '*':function(self, locals, a, b) {return a(self, locals) * b(self, locals);},
11690
- '/':function(self, locals, a, b) {return a(self, locals) / b(self, locals);},
11691
- '%':function(self, locals, a, b) {return a(self, locals) % b(self, locals);},
11692
- '===':function(self, locals, a, b) {return a(self, locals) === b(self, locals);},
11693
- '!==':function(self, locals, a, b) {return a(self, locals) !== b(self, locals);},
11694
- '==':function(self, locals, a, b) {return a(self, locals) == b(self, locals);},
11695
- '!=':function(self, locals, a, b) {return a(self, locals) != b(self, locals);},
11696
- '<':function(self, locals, a, b) {return a(self, locals) < b(self, locals);},
11697
- '>':function(self, locals, a, b) {return a(self, locals) > b(self, locals);},
11698
- '<=':function(self, locals, a, b) {return a(self, locals) <= b(self, locals);},
11699
- '>=':function(self, locals, a, b) {return a(self, locals) >= b(self, locals);},
11700
- '&&':function(self, locals, a, b) {return a(self, locals) && b(self, locals);},
11701
- '||':function(self, locals, a, b) {return a(self, locals) || b(self, locals);},
11702
- '!':function(self, locals, a) {return !a(self, locals);},
11703
-
11704
- //Tokenized as operators but parsed as assignment/filters
11705
- '=':true,
11706
- '|':true
11707
-});
11708
-var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'};
11709
-
11710
-
11711
-/////////////////////////////////////////
11712
-
11713
-
11714
-/**
11715
- * @constructor
11716
- */
11717
-var Lexer = function(options) {
11718
- this.options = options;
11719
-};
11720
-
11721
-Lexer.prototype = {
11722
- constructor: Lexer,
11723
-
11724
- lex: function(text) {
11725
- this.text = text;
11726
- this.index = 0;
11727
- this.tokens = [];
11728
-
11729
- while (this.index < this.text.length) {
11730
- var ch = this.text.charAt(this.index);
11731
- if (ch === '"' || ch === "'") {
11732
- this.readString(ch);
11733
- } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) {
11734
- this.readNumber();
11735
- } else if (this.isIdent(ch)) {
11736
- this.readIdent();
11737
- } else if (this.is(ch, '(){}[].,;:?')) {
11738
- this.tokens.push({index: this.index, text: ch});
11739
- this.index++;
11740
- } else if (this.isWhitespace(ch)) {
11741
- this.index++;
11742
- } else {
11743
- var ch2 = ch + this.peek();
11744
- var ch3 = ch2 + this.peek(2);
11745
- var op1 = OPERATORS[ch];
11746
- var op2 = OPERATORS[ch2];
11747
- var op3 = OPERATORS[ch3];
11748
- if (op1 || op2 || op3) {
11749
- var token = op3 ? ch3 : (op2 ? ch2 : ch);
11750
- this.tokens.push({index: this.index, text: token, operator: true});
11751
- this.index += token.length;
11752
- } else {
11753
- this.throwError('Unexpected next character ', this.index, this.index + 1);
11754
- }
11755
- }
11756
- }
11757
- return this.tokens;
11758
- },
11759
-
11760
- is: function(ch, chars) {
11761
- return chars.indexOf(ch) !== -1;
11762
- },
11763
-
11764
- peek: function(i) {
11765
- var num = i || 1;
11766
- return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;
11767
- },
11768
-
11769
- isNumber: function(ch) {
11770
- return ('0' <= ch && ch <= '9') && typeof ch === "string";
11771
- },
11772
-
11773
- isWhitespace: function(ch) {
11774
- // IE treats non-breaking space as \u00A0
11775
- return (ch === ' ' || ch === '\r' || ch === '\t' ||
11776
- ch === '\n' || ch === '\v' || ch === '\u00A0');
11777
- },
11778
-
11779
- isIdent: function(ch) {
11780
- return ('a' <= ch && ch <= 'z' ||
11781
- 'A' <= ch && ch <= 'Z' ||
11782
- '_' === ch || ch === '$');
11783
- },
11784
-
11785
- isExpOperator: function(ch) {
11786
- return (ch === '-' || ch === '+' || this.isNumber(ch));
11787
- },
11788
-
11789
- throwError: function(error, start, end) {
11790
- end = end || this.index;
11791
- var colStr = (isDefined(start)
11792
- ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']'
11793
- : ' ' + end);
11794
- throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',
11795
- error, colStr, this.text);
11796
- },
11797
-
11798
- readNumber: function() {
11799
- var number = '';
11800
- var start = this.index;
11801
- while (this.index < this.text.length) {
11802
- var ch = lowercase(this.text.charAt(this.index));
11803
- if (ch == '.' || this.isNumber(ch)) {
11804
- number += ch;
11805
- } else {
11806
- var peekCh = this.peek();
11807
- if (ch == 'e' && this.isExpOperator(peekCh)) {
11808
- number += ch;
11809
- } else if (this.isExpOperator(ch) &&
11810
- peekCh && this.isNumber(peekCh) &&
11811
- number.charAt(number.length - 1) == 'e') {
11812
- number += ch;
11813
- } else if (this.isExpOperator(ch) &&
11814
- (!peekCh || !this.isNumber(peekCh)) &&
11815
- number.charAt(number.length - 1) == 'e') {
11816
- this.throwError('Invalid exponent');
11817
- } else {
11818
- break;
11819
- }
11820
- }
11821
- this.index++;
11822
- }
11823
- this.tokens.push({
11824
- index: start,
11825
- text: number,
11826
- constant: true,
11827
- value: Number(number)
11828
- });
11829
- },
11830
-
11831
- readIdent: function() {
11832
- var start = this.index;
11833
- while (this.index < this.text.length) {
11834
- var ch = this.text.charAt(this.index);
11835
- if (!(this.isIdent(ch) || this.isNumber(ch))) {
11836
- break;
11837
- }
11838
- this.index++;
11839
- }
11840
- this.tokens.push({
11841
- index: start,
11842
- text: this.text.slice(start, this.index),
11843
- identifier: true
11844
- });
11845
- },
11846
-
11847
- readString: function(quote) {
11848
- var start = this.index;
11849
- this.index++;
11850
- var string = '';
11851
- var rawString = quote;
11852
- var escape = false;
11853
- while (this.index < this.text.length) {
11854
- var ch = this.text.charAt(this.index);
11855
- rawString += ch;
11856
- if (escape) {
11857
- if (ch === 'u') {
11858
- var hex = this.text.substring(this.index + 1, this.index + 5);
11859
- if (!hex.match(/[\da-f]{4}/i))
11860
- this.throwError('Invalid unicode escape [\\u' + hex + ']');
11861
- this.index += 4;
11862
- string += String.fromCharCode(parseInt(hex, 16));
11863
- } else {
11864
- var rep = ESCAPE[ch];
11865
- string = string + (rep || ch);
11866
- }
11867
- escape = false;
11868
- } else if (ch === '\\') {
11869
- escape = true;
11870
- } else if (ch === quote) {
11871
- this.index++;
11872
- this.tokens.push({
11873
- index: start,
11874
- text: rawString,
11875
- constant: true,
11876
- value: string
11877
- });
11878
- return;
11879
- } else {
11880
- string += ch;
11881
- }
11882
- this.index++;
11883
- }
11884
- this.throwError('Unterminated quote', start);
11885
- }
11886
-};
11887
-
11888
-
11889
-function isConstant(exp) {
11890
- return exp.constant;
11891
-}
11892
-
11893
-/**
11894
- * @constructor
11895
- */
11896
-var Parser = function(lexer, $filter, options) {
11897
- this.lexer = lexer;
11898
- this.$filter = $filter;
11899
- this.options = options;
11900
-};
11901
-
11902
-Parser.ZERO = extend(function() {
11903
- return 0;
11904
-}, {
11905
- sharedGetter: true,
11906
- constant: true
11907
-});
11908
-
11909
-Parser.prototype = {
11910
- constructor: Parser,
11911
-
11912
- parse: function(text) {
11913
- this.text = text;
11914
- this.tokens = this.lexer.lex(text);
11915
-
11916
- var value = this.statements();
11917
-
11918
- if (this.tokens.length !== 0) {
11919
- this.throwError('is an unexpected token', this.tokens[0]);
11920
- }
11921
-
11922
- value.literal = !!value.literal;
11923
- value.constant = !!value.constant;
11924
-
11925
- return value;
11926
- },
11927
-
11928
- primary: function() {
11929
- var primary;
11930
- if (this.expect('(')) {
11931
- primary = this.filterChain();
11932
- this.consume(')');
11933
- } else if (this.expect('[')) {
11934
- primary = this.arrayDeclaration();
11935
- } else if (this.expect('{')) {
11936
- primary = this.object();
11937
- } else if (this.peek().identifier) {
11938
- primary = this.identifier();
11939
- } else if (this.peek().constant) {
11940
- primary = this.constant();
11941
- } else {
11942
- this.throwError('not a primary expression', this.peek());
11943
- }
11944
-
11945
- var next, context;
11946
- while ((next = this.expect('(', '[', '.'))) {
11947
- if (next.text === '(') {
11948
- primary = this.functionCall(primary, context);
11949
- context = null;
11950
- } else if (next.text === '[') {
11951
- context = primary;
11952
- primary = this.objectIndex(primary);
11953
- } else if (next.text === '.') {
11954
- context = primary;
11955
- primary = this.fieldAccess(primary);
11956
- } else {
11957
- this.throwError('IMPOSSIBLE');
11958
- }
11959
- }
11960
- return primary;
11961
- },
11962
-
11963
- throwError: function(msg, token) {
11964
- throw $parseMinErr('syntax',
11965
- 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].',
11966
- token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));
11967
- },
11968
-
11969
- peekToken: function() {
11970
- if (this.tokens.length === 0)
11971
- throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
11972
- return this.tokens[0];
11973
- },
11974
-
11975
- peek: function(e1, e2, e3, e4) {
11976
- return this.peekAhead(0, e1, e2, e3, e4);
11977
- },
11978
- peekAhead: function(i, e1, e2, e3, e4) {
11979
- if (this.tokens.length > i) {
11980
- var token = this.tokens[i];
11981
- var t = token.text;
11982
- if (t === e1 || t === e2 || t === e3 || t === e4 ||
11983
- (!e1 && !e2 && !e3 && !e4)) {
11984
- return token;
11985
- }
11986
- }
11987
- return false;
11988
- },
11989
-
11990
- expect: function(e1, e2, e3, e4) {
11991
- var token = this.peek(e1, e2, e3, e4);
11992
- if (token) {
11993
- this.tokens.shift();
11994
- return token;
11995
- }
11996
- return false;
11997
- },
11998
-
11999
- consume: function(e1) {
12000
- if (this.tokens.length === 0) {
12001
- throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
12002
- }
12003
-
12004
- var token = this.expect(e1);
12005
- if (!token) {
12006
- this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());
12007
- }
12008
- return token;
12009
- },
12010
-
12011
- unaryFn: function(op, right) {
12012
- var fn = OPERATORS[op];
12013
- return extend(function $parseUnaryFn(self, locals) {
12014
- return fn(self, locals, right);
12015
- }, {
12016
- constant:right.constant,
12017
- inputs: [right]
12018
- });
12019
- },
12020
-
12021
- binaryFn: function(left, op, right, isBranching) {
12022
- var fn = OPERATORS[op];
12023
- return extend(function $parseBinaryFn(self, locals) {
12024
- return fn(self, locals, left, right);
12025
- }, {
12026
- constant: left.constant && right.constant,
12027
- inputs: !isBranching && [left, right]
12028
- });
12029
- },
12030
-
12031
- identifier: function() {
12032
- var id = this.consume().text;
12033
-
12034
- //Continue reading each `.identifier` unless it is a method invocation
12035
- while (this.peek('.') && this.peekAhead(1).identifier && !this.peekAhead(2, '(')) {
12036
- id += this.consume().text + this.consume().text;
12037
- }
12038
-
12039
- return CONSTANTS[id] || getterFn(id, this.options, this.text);
12040
- },
12041
-
12042
- constant: function() {
12043
- var value = this.consume().value;
12044
-
12045
- return extend(function $parseConstant() {
12046
- return value;
12047
- }, {
12048
- constant: true,
12049
- literal: true
12050
- });
12051
- },
12052
-
12053
- statements: function() {
12054
- var statements = [];
12055
- while (true) {
12056
- if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))
12057
- statements.push(this.filterChain());
12058
- if (!this.expect(';')) {
12059
- // optimize for the common case where there is only one statement.
12060
- // TODO(size): maybe we should not support multiple statements?
12061
- return (statements.length === 1)
12062
- ? statements[0]
12063
- : function $parseStatements(self, locals) {
12064
- var value;
12065
- for (var i = 0, ii = statements.length; i < ii; i++) {
12066
- value = statements[i](self, locals);
12067
- }
12068
- return value;
12069
- };
12070
- }
12071
- }
12072
- },
12073
-
12074
- filterChain: function() {
12075
- var left = this.expression();
12076
- var token;
12077
- while ((token = this.expect('|'))) {
12078
- left = this.filter(left);
12079
- }
12080
- return left;
12081
- },
12082
-
12083
- filter: function(inputFn) {
12084
- var fn = this.$filter(this.consume().text);
12085
- var argsFn;
12086
- var args;
12087
-
12088
- if (this.peek(':')) {
12089
- argsFn = [];
12090
- args = []; // we can safely reuse the array
12091
- while (this.expect(':')) {
12092
- argsFn.push(this.expression());
12093
- }
12094
- }
12095
-
12096
- var inputs = [inputFn].concat(argsFn || []);
12097
-
12098
- return extend(function $parseFilter(self, locals) {
12099
- var input = inputFn(self, locals);
12100
- if (args) {
12101
- args[0] = input;
12102
-
12103
- var i = argsFn.length;
12104
- while (i--) {
12105
- args[i + 1] = argsFn[i](self, locals);
12106
- }
12107
-
12108
- return fn.apply(undefined, args);
12109
- }
12110
-
12111
- return fn(input);
12112
- }, {
12113
- constant: !fn.$stateful && inputs.every(isConstant),
12114
- inputs: !fn.$stateful && inputs
12115
- });
12116
- },
12117
-
12118
- expression: function() {
12119
- return this.assignment();
12120
- },
12121
-
12122
- assignment: function() {
12123
- var left = this.ternary();
12124
- var right;
12125
- var token;
12126
- if ((token = this.expect('='))) {
12127
- if (!left.assign) {
12128
- this.throwError('implies assignment but [' +
12129
- this.text.substring(0, token.index) + '] can not be assigned to', token);
12130
- }
12131
- right = this.ternary();
12132
- return extend(function $parseAssignment(scope, locals) {
12133
- return left.assign(scope, right(scope, locals), locals);
12134
- }, {
12135
- inputs: [left, right]
12136
- });
12137
- }
12138
- return left;
12139
- },
12140
-
12141
- ternary: function() {
12142
- var left = this.logicalOR();
12143
- var middle;
12144
- var token;
12145
- if ((token = this.expect('?'))) {
12146
- middle = this.assignment();
12147
- if (this.consume(':')) {
12148
- var right = this.assignment();
12149
-
12150
- return extend(function $parseTernary(self, locals) {
12151
- return left(self, locals) ? middle(self, locals) : right(self, locals);
12152
- }, {
12153
- constant: left.constant && middle.constant && right.constant
12154
- });
12155
- }
12156
- }
12157
-
12158
- return left;
12159
- },
12160
-
12161
- logicalOR: function() {
12162
- var left = this.logicalAND();
12163
- var token;
12164
- while ((token = this.expect('||'))) {
12165
- left = this.binaryFn(left, token.text, this.logicalAND(), true);
12166
- }
12167
- return left;
12168
- },
12169
-
12170
- logicalAND: function() {
12171
- var left = this.equality();
12172
- var token;
12173
- while ((token = this.expect('&&'))) {
12174
- left = this.binaryFn(left, token.text, this.equality(), true);
12175
- }
12176
- return left;
12177
- },
12178
-
12179
- equality: function() {
12180
- var left = this.relational();
12181
- var token;
12182
- while ((token = this.expect('==','!=','===','!=='))) {
12183
- left = this.binaryFn(left, token.text, this.relational());
12184
- }
12185
- return left;
12186
- },
12187
-
12188
- relational: function() {
12189
- var left = this.additive();
12190
- var token;
12191
- while ((token = this.expect('<', '>', '<=', '>='))) {
12192
- left = this.binaryFn(left, token.text, this.additive());
12193
- }
12194
- return left;
12195
- },
12196
-
12197
- additive: function() {
12198
- var left = this.multiplicative();
12199
- var token;
12200
- while ((token = this.expect('+','-'))) {
12201
- left = this.binaryFn(left, token.text, this.multiplicative());
12202
- }
12203
- return left;
12204
- },
12205
-
12206
- multiplicative: function() {
12207
- var left = this.unary();
12208
- var token;
12209
- while ((token = this.expect('*','/','%'))) {
12210
- left = this.binaryFn(left, token.text, this.unary());
12211
- }
12212
- return left;
12213
- },
12214
-
12215
- unary: function() {
12216
- var token;
12217
- if (this.expect('+')) {
12218
- return this.primary();
12219
- } else if ((token = this.expect('-'))) {
12220
- return this.binaryFn(Parser.ZERO, token.text, this.unary());
12221
- } else if ((token = this.expect('!'))) {
12222
- return this.unaryFn(token.text, this.unary());
12223
- } else {
12224
- return this.primary();
12225
- }
12226
- },
12227
-
12228
- fieldAccess: function(object) {
12229
- var expression = this.text;
12230
- var field = this.consume().text;
12231
- var getter = getterFn(field, this.options, expression);
12232
-
12233
- return extend(function $parseFieldAccess(scope, locals, self) {
12234
- return getter(self || object(scope, locals));
12235
- }, {
12236
- assign: function(scope, value, locals) {
12237
- var o = object(scope, locals);
12238
- if (!o) object.assign(scope, o = {});
12239
- return setter(o, field, value, expression);
12240
- }
12241
- });
12242
- },
12243
-
12244
- objectIndex: function(obj) {
12245
- var expression = this.text;
12246
-
12247
- var indexFn = this.expression();
12248
- this.consume(']');
12249
-
12250
- return extend(function $parseObjectIndex(self, locals) {
12251
- var o = obj(self, locals),
12252
- i = indexFn(self, locals),
12253
- v;
12254
-
12255
- ensureSafeMemberName(i, expression);
12256
- if (!o) return undefined;
12257
- v = ensureSafeObject(o[i], expression);
12258
- return v;
12259
- }, {
12260
- assign: function(self, value, locals) {
12261
- var key = ensureSafeMemberName(indexFn(self, locals), expression);
12262
- // prevent overwriting of Function.constructor which would break ensureSafeObject check
12263
- var o = ensureSafeObject(obj(self, locals), expression);
12264
- if (!o) obj.assign(self, o = {});
12265
- return o[key] = value;
12266
- }
12267
- });
12268
- },
12269
-
12270
- functionCall: function(fnGetter, contextGetter) {
12271
- var argsFn = [];
12272
- if (this.peekToken().text !== ')') {
12273
- do {
12274
- argsFn.push(this.expression());
12275
- } while (this.expect(','));
12276
- }
12277
- this.consume(')');
12278
-
12279
- var expressionText = this.text;
12280
- // we can safely reuse the array across invocations
12281
- var args = argsFn.length ? [] : null;
12282
-
12283
- return function $parseFunctionCall(scope, locals) {
12284
- var context = contextGetter ? contextGetter(scope, locals) : isDefined(contextGetter) ? undefined : scope;
12285
- var fn = fnGetter(scope, locals, context) || noop;
12286
-
12287
- if (args) {
12288
- var i = argsFn.length;
12289
- while (i--) {
12290
- args[i] = ensureSafeObject(argsFn[i](scope, locals), expressionText);
12291
- }
12292
- }
12293
-
12294
- ensureSafeObject(context, expressionText);
12295
- ensureSafeFunction(fn, expressionText);
12296
-
12297
- // IE doesn't have apply for some native functions
12298
- var v = fn.apply
12299
- ? fn.apply(context, args)
12300
- : fn(args[0], args[1], args[2], args[3], args[4]);
12301
-
12302
- return ensureSafeObject(v, expressionText);
12303
- };
12304
- },
12305
-
12306
- // This is used with json array declaration
12307
- arrayDeclaration: function() {
12308
- var elementFns = [];
12309
- if (this.peekToken().text !== ']') {
12310
- do {
12311
- if (this.peek(']')) {
12312
- // Support trailing commas per ES5.1.
12313
- break;
12314
- }
12315
- elementFns.push(this.expression());
12316
- } while (this.expect(','));
12317
- }
12318
- this.consume(']');
12319
-
12320
- return extend(function $parseArrayLiteral(self, locals) {
12321
- var array = [];
12322
- for (var i = 0, ii = elementFns.length; i < ii; i++) {
12323
- array.push(elementFns[i](self, locals));
12324
- }
12325
- return array;
12326
- }, {
12327
- literal: true,
12328
- constant: elementFns.every(isConstant),
12329
- inputs: elementFns
12330
- });
12331
- },
12332
-
12333
- object: function() {
12334
- var keys = [], valueFns = [];
12335
- if (this.peekToken().text !== '}') {
12336
- do {
12337
- if (this.peek('}')) {
12338
- // Support trailing commas per ES5.1.
12339
- break;
12340
- }
12341
- var token = this.consume();
12342
- if (token.constant) {
12343
- keys.push(token.value);
12344
- } else if (token.identifier) {
12345
- keys.push(token.text);
12346
- } else {
12347
- this.throwError("invalid key", token);
12348
- }
12349
- this.consume(':');
12350
- valueFns.push(this.expression());
12351
- } while (this.expect(','));
12352
- }
12353
- this.consume('}');
12354
-
12355
- return extend(function $parseObjectLiteral(self, locals) {
12356
- var object = {};
12357
- for (var i = 0, ii = valueFns.length; i < ii; i++) {
12358
- object[keys[i]] = valueFns[i](self, locals);
12359
- }
12360
- return object;
12361
- }, {
12362
- literal: true,
12363
- constant: valueFns.every(isConstant),
12364
- inputs: valueFns
12365
- });
12366
- }
12367
-};
12368
-
12369
-
12370
-//////////////////////////////////////////////////
12371
-// Parser helper functions
12372
-//////////////////////////////////////////////////
12373
-
12374
-function setter(obj, path, setValue, fullExp) {
12375
- ensureSafeObject(obj, fullExp);
12376
-
12377
- var element = path.split('.'), key;
12378
- for (var i = 0; element.length > 1; i++) {
12379
- key = ensureSafeMemberName(element.shift(), fullExp);
12380
- var propertyObj = ensureSafeObject(obj[key], fullExp);
12381
- if (!propertyObj) {
12382
- propertyObj = {};
12383
- obj[key] = propertyObj;
12384
- }
12385
- obj = propertyObj;
12386
- }
12387
- key = ensureSafeMemberName(element.shift(), fullExp);
12388
- ensureSafeObject(obj[key], fullExp);
12389
- obj[key] = setValue;
12390
- return setValue;
12391
-}
12392
-
12393
-var getterFnCacheDefault = createMap();
12394
-var getterFnCacheExpensive = createMap();
12395
-
12396
-function isPossiblyDangerousMemberName(name) {
12397
- return name == 'constructor';
12398
-}
12399
-
12400
-/**
12401
- * Implementation of the "Black Hole" variant from:
12402
- * - http://jsperf.com/angularjs-parse-getter/4
12403
- * - http://jsperf.com/path-evaluation-simplified/7
12404
- */
12405
-function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, expensiveChecks) {
12406
- ensureSafeMemberName(key0, fullExp);
12407
- ensureSafeMemberName(key1, fullExp);
12408
- ensureSafeMemberName(key2, fullExp);
12409
- ensureSafeMemberName(key3, fullExp);
12410
- ensureSafeMemberName(key4, fullExp);
12411
- var eso = function(o) {
12412
- return ensureSafeObject(o, fullExp);
12413
- };
12414
- var eso0 = (expensiveChecks || isPossiblyDangerousMemberName(key0)) ? eso : identity;
12415
- var eso1 = (expensiveChecks || isPossiblyDangerousMemberName(key1)) ? eso : identity;
12416
- var eso2 = (expensiveChecks || isPossiblyDangerousMemberName(key2)) ? eso : identity;
12417
- var eso3 = (expensiveChecks || isPossiblyDangerousMemberName(key3)) ? eso : identity;
12418
- var eso4 = (expensiveChecks || isPossiblyDangerousMemberName(key4)) ? eso : identity;
12419
-
12420
- return function cspSafeGetter(scope, locals) {
12421
- var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;
12422
-
12423
- if (pathVal == null) return pathVal;
12424
- pathVal = eso0(pathVal[key0]);
12425
-
12426
- if (!key1) return pathVal;
12427
- if (pathVal == null) return undefined;
12428
- pathVal = eso1(pathVal[key1]);
12429
-
12430
- if (!key2) return pathVal;
12431
- if (pathVal == null) return undefined;
12432
- pathVal = eso2(pathVal[key2]);
12433
-
12434
- if (!key3) return pathVal;
12435
- if (pathVal == null) return undefined;
12436
- pathVal = eso3(pathVal[key3]);
12437
-
12438
- if (!key4) return pathVal;
12439
- if (pathVal == null) return undefined;
12440
- pathVal = eso4(pathVal[key4]);
12441
-
12442
- return pathVal;
12443
- };
12444
-}
12445
-
12446
-function getterFnWithEnsureSafeObject(fn, fullExpression) {
12447
- return function(s, l) {
12448
- return fn(s, l, ensureSafeObject, fullExpression);
12449
- };
12450
-}
12451
-
12452
-function getterFn(path, options, fullExp) {
12453
- var expensiveChecks = options.expensiveChecks;
12454
- var getterFnCache = (expensiveChecks ? getterFnCacheExpensive : getterFnCacheDefault);
12455
- var fn = getterFnCache[path];
12456
- if (fn) return fn;
12457
-
12458
-
12459
- var pathKeys = path.split('.'),
12460
- pathKeysLength = pathKeys.length;
12461
-
12462
- // http://jsperf.com/angularjs-parse-getter/6
12463
- if (options.csp) {
12464
- if (pathKeysLength < 6) {
12465
- fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, expensiveChecks);
12466
- } else {
12467
- fn = function cspSafeGetter(scope, locals) {
12468
- var i = 0, val;
12469
- do {
12470
- val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],
12471
- pathKeys[i++], fullExp, expensiveChecks)(scope, locals);
12472
-
12473
- locals = undefined; // clear after first iteration
12474
- scope = val;
12475
- } while (i < pathKeysLength);
12476
- return val;
12477
- };
12478
- }
12479
- } else {
12480
- var code = '';
12481
- if (expensiveChecks) {
12482
- code += 's = eso(s, fe);\nl = eso(l, fe);\n';
12483
- }
12484
- var needsEnsureSafeObject = expensiveChecks;
12485
- forEach(pathKeys, function(key, index) {
12486
- ensureSafeMemberName(key, fullExp);
12487
- var lookupJs = (index
12488
- // we simply dereference 's' on any .dot notation
12489
- ? 's'
12490
- // but if we are first then we check locals first, and if so read it first
12491
- : '((l&&l.hasOwnProperty("' + key + '"))?l:s)') + '.' + key;
12492
- if (expensiveChecks || isPossiblyDangerousMemberName(key)) {
12493
- lookupJs = 'eso(' + lookupJs + ', fe)';
12494
- needsEnsureSafeObject = true;
12495
- }
12496
- code += 'if(s == null) return undefined;\n' +
12497
- 's=' + lookupJs + ';\n';
12498
- });
12499
- code += 'return s;';
12500
-
12501
- /* jshint -W054 */
12502
- var evaledFnGetter = new Function('s', 'l', 'eso', 'fe', code); // s=scope, l=locals, eso=ensureSafeObject
12503
- /* jshint +W054 */
12504
- evaledFnGetter.toString = valueFn(code);
12505
- if (needsEnsureSafeObject) {
12506
- evaledFnGetter = getterFnWithEnsureSafeObject(evaledFnGetter, fullExp);
12507
- }
12508
- fn = evaledFnGetter;
12509
- }
12510
-
12511
- fn.sharedGetter = true;
12512
- fn.assign = function(self, value) {
12513
- return setter(self, path, value, path);
12514
- };
12515
- getterFnCache[path] = fn;
12516
- return fn;
12517
-}
12518
-
12519
-var objectValueOf = Object.prototype.valueOf;
12520
-
12521
-function getValueOf(value) {
12522
- return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);
12523
-}
12524
-
12525
-///////////////////////////////////
12526
-
12527
-/**
12528
- * @ngdoc service
12529
- * @name $parse
12530
- * @kind function
12531
- *
12532
- * @description
12533
- *
12534
- * Converts Angular {@link guide/expression expression} into a function.
12535
- *
12536
- * ```js
12537
- * var getter = $parse('user.name');
12538
- * var setter = getter.assign;
12539
- * var context = {user:{name:'angular'}};
12540
- * var locals = {user:{name:'local'}};
12541
- *
12542
- * expect(getter(context)).toEqual('angular');
12543
- * setter(context, 'newValue');
12544
- * expect(context.user.name).toEqual('newValue');
12545
- * expect(getter(context, locals)).toEqual('local');
12546
- * ```
12547
- *
12548
- *
12549
- * @param {string} expression String expression to compile.
12550
- * @returns {function(context, locals)} a function which represents the compiled expression:
12551
- *
12552
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
12553
- * are evaluated against (typically a scope object).
12554
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
12555
- * `context`.
12556
- *
12557
- * The returned function also has the following properties:
12558
- * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript
12559
- * literal.
12560
- * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript
12561
- * constant literals.
12562
- * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be
12563
- * set to a function to change its value on the given context.
12564
- *
12565
- */
12566
-
12567
-
12568
-/**
12569
- * @ngdoc provider
12570
- * @name $parseProvider
12571
- *
12572
- * @description
12573
- * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}
12574
- * service.
12575
- */
12576
-function $ParseProvider() {
12577
- var cacheDefault = createMap();
12578
- var cacheExpensive = createMap();
12579
-
12580
-
12581
-
12582
- this.$get = ['$filter', '$sniffer', function($filter, $sniffer) {
12583
- var $parseOptions = {
12584
- csp: $sniffer.csp,
12585
- expensiveChecks: false
12586
- },
12587
- $parseOptionsExpensive = {
12588
- csp: $sniffer.csp,
12589
- expensiveChecks: true
12590
- };
12591
-
12592
- function wrapSharedExpression(exp) {
12593
- var wrapped = exp;
12594
-
12595
- if (exp.sharedGetter) {
12596
- wrapped = function $parseWrapper(self, locals) {
12597
- return exp(self, locals);
12598
- };
12599
- wrapped.literal = exp.literal;
12600
- wrapped.constant = exp.constant;
12601
- wrapped.assign = exp.assign;
12602
- }
12603
-
12604
- return wrapped;
12605
- }
12606
-
12607
- return function $parse(exp, interceptorFn, expensiveChecks) {
12608
- var parsedExpression, oneTime, cacheKey;
12609
-
12610
- switch (typeof exp) {
12611
- case 'string':
12612
- cacheKey = exp = exp.trim();
12613
-
12614
- var cache = (expensiveChecks ? cacheExpensive : cacheDefault);
12615
- parsedExpression = cache[cacheKey];
12616
-
12617
- if (!parsedExpression) {
12618
- if (exp.charAt(0) === ':' && exp.charAt(1) === ':') {
12619
- oneTime = true;
12620
- exp = exp.substring(2);
12621
- }
12622
-
12623
- var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;
12624
- var lexer = new Lexer(parseOptions);
12625
- var parser = new Parser(lexer, $filter, parseOptions);
12626
- parsedExpression = parser.parse(exp);
12627
-
12628
- if (parsedExpression.constant) {
12629
- parsedExpression.$$watchDelegate = constantWatchDelegate;
12630
- } else if (oneTime) {
12631
- //oneTime is not part of the exp passed to the Parser so we may have to
12632
- //wrap the parsedExpression before adding a $$watchDelegate
12633
- parsedExpression = wrapSharedExpression(parsedExpression);
12634
- parsedExpression.$$watchDelegate = parsedExpression.literal ?
12635
- oneTimeLiteralWatchDelegate : oneTimeWatchDelegate;
12636
- } else if (parsedExpression.inputs) {
12637
- parsedExpression.$$watchDelegate = inputsWatchDelegate;
12638
- }
12639
-
12640
- cache[cacheKey] = parsedExpression;
12641
- }
12642
- return addInterceptor(parsedExpression, interceptorFn);
12643
-
12644
- case 'function':
12645
- return addInterceptor(exp, interceptorFn);
12646
-
12647
- default:
12648
- return addInterceptor(noop, interceptorFn);
12649
- }
12650
- };
12651
-
12652
- function collectExpressionInputs(inputs, list) {
12653
- for (var i = 0, ii = inputs.length; i < ii; i++) {
12654
- var input = inputs[i];
12655
- if (!input.constant) {
12656
- if (input.inputs) {
12657
- collectExpressionInputs(input.inputs, list);
12658
- } else if (list.indexOf(input) === -1) { // TODO(perf) can we do better?
12659
- list.push(input);
12660
- }
12661
- }
12662
- }
12663
-
12664
- return list;
12665
- }
12666
-
12667
- function expressionInputDirtyCheck(newValue, oldValueOfValue) {
12668
-
12669
- if (newValue == null || oldValueOfValue == null) { // null/undefined
12670
- return newValue === oldValueOfValue;
12671
- }
12672
-
12673
- if (typeof newValue === 'object') {
12674
-
12675
- // attempt to convert the value to a primitive type
12676
- // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can
12677
- // be cheaply dirty-checked
12678
- newValue = getValueOf(newValue);
12679
-
12680
- if (typeof newValue === 'object') {
12681
- // objects/arrays are not supported - deep-watching them would be too expensive
12682
- return false;
12683
- }
12684
-
12685
- // fall-through to the primitive equality check
12686
- }
12687
-
12688
- //Primitive or NaN
12689
- return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);
12690
- }
12691
-
12692
- function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression) {
12693
- var inputExpressions = parsedExpression.$$inputs ||
12694
- (parsedExpression.$$inputs = collectExpressionInputs(parsedExpression.inputs, []));
12695
-
12696
- var lastResult;
12697
-
12698
- if (inputExpressions.length === 1) {
12699
- var oldInputValue = expressionInputDirtyCheck; // init to something unique so that equals check fails
12700
- inputExpressions = inputExpressions[0];
12701
- return scope.$watch(function expressionInputWatch(scope) {
12702
- var newInputValue = inputExpressions(scope);
12703
- if (!expressionInputDirtyCheck(newInputValue, oldInputValue)) {
12704
- lastResult = parsedExpression(scope);
12705
- oldInputValue = newInputValue && getValueOf(newInputValue);
12706
- }
12707
- return lastResult;
12708
- }, listener, objectEquality);
12709
- }
12710
-
12711
- var oldInputValueOfValues = [];
12712
- for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
12713
- oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails
12714
- }
12715
-
12716
- return scope.$watch(function expressionInputsWatch(scope) {
12717
- var changed = false;
12718
-
12719
- for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
12720
- var newInputValue = inputExpressions[i](scope);
12721
- if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {
12722
- oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);
12723
- }
12724
- }
12725
-
12726
- if (changed) {
12727
- lastResult = parsedExpression(scope);
12728
- }
12729
-
12730
- return lastResult;
12731
- }, listener, objectEquality);
12732
- }
12733
-
12734
- function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {
12735
- var unwatch, lastValue;
12736
- return unwatch = scope.$watch(function oneTimeWatch(scope) {
12737
- return parsedExpression(scope);
12738
- }, function oneTimeListener(value, old, scope) {
12739
- lastValue = value;
12740
- if (isFunction(listener)) {
12741
- listener.apply(this, arguments);
12742
- }
12743
- if (isDefined(value)) {
12744
- scope.$$postDigest(function() {
12745
- if (isDefined(lastValue)) {
12746
- unwatch();
12747
- }
12748
- });
12749
- }
12750
- }, objectEquality);
12751
- }
12752
-
12753
- function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {
12754
- var unwatch, lastValue;
12755
- return unwatch = scope.$watch(function oneTimeWatch(scope) {
12756
- return parsedExpression(scope);
12757
- }, function oneTimeListener(value, old, scope) {
12758
- lastValue = value;
12759
- if (isFunction(listener)) {
12760
- listener.call(this, value, old, scope);
12761
- }
12762
- if (isAllDefined(value)) {
12763
- scope.$$postDigest(function() {
12764
- if (isAllDefined(lastValue)) unwatch();
12765
- });
12766
- }
12767
- }, objectEquality);
12768
-
12769
- function isAllDefined(value) {
12770
- var allDefined = true;
12771
- forEach(value, function(val) {
12772
- if (!isDefined(val)) allDefined = false;
12773
- });
12774
- return allDefined;
12775
- }
12776
- }
12777
-
12778
- function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {
12779
- var unwatch;
12780
- return unwatch = scope.$watch(function constantWatch(scope) {
12781
- return parsedExpression(scope);
12782
- }, function constantListener(value, old, scope) {
12783
- if (isFunction(listener)) {
12784
- listener.apply(this, arguments);
12785
- }
12786
- unwatch();
12787
- }, objectEquality);
12788
- }
12789
-
12790
- function addInterceptor(parsedExpression, interceptorFn) {
12791
- if (!interceptorFn) return parsedExpression;
12792
- var watchDelegate = parsedExpression.$$watchDelegate;
12793
-
12794
- var regularWatch =
12795
- watchDelegate !== oneTimeLiteralWatchDelegate &&
12796
- watchDelegate !== oneTimeWatchDelegate;
12797
-
12798
- var fn = regularWatch ? function regularInterceptedExpression(scope, locals) {
12799
- var value = parsedExpression(scope, locals);
12800
- return interceptorFn(value, scope, locals);
12801
- } : function oneTimeInterceptedExpression(scope, locals) {
12802
- var value = parsedExpression(scope, locals);
12803
- var result = interceptorFn(value, scope, locals);
12804
- // we only return the interceptor's result if the
12805
- // initial value is defined (for bind-once)
12806
- return isDefined(value) ? result : value;
12807
- };
12808
-
12809
- // Propagate $$watchDelegates other then inputsWatchDelegate
12810
- if (parsedExpression.$$watchDelegate &&
12811
- parsedExpression.$$watchDelegate !== inputsWatchDelegate) {
12812
- fn.$$watchDelegate = parsedExpression.$$watchDelegate;
12813
- } else if (!interceptorFn.$stateful) {
12814
- // If there is an interceptor, but no watchDelegate then treat the interceptor like
12815
- // we treat filters - it is assumed to be a pure function unless flagged with $stateful
12816
- fn.$$watchDelegate = inputsWatchDelegate;
12817
- fn.inputs = [parsedExpression];
12818
- }
12819
-
12820
- return fn;
12821
- }
12822
- }];
12823
-}
12824
-
12825
-/**
12826
- * @ngdoc service
12827
- * @name $q
12828
- * @requires $rootScope
12829
- *
12830
- * @description
12831
- * A service that helps you run functions asynchronously, and use their return values (or exceptions)
12832
- * when they are done processing.
12833
- *
12834
- * This is an implementation of promises/deferred objects inspired by
12835
- * [Kris Kowal's Q](https://github.com/kriskowal/q).
12836
- *
12837
- * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred
12838
- * implementations, and the other which resembles ES6 promises to some degree.
12839
- *
12840
- * # $q constructor
12841
- *
12842
- * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`
12843
- * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony,
12844
- * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
12845
- *
12846
- * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are
12847
- * available yet.
12848
- *
12849
- * It can be used like so:
12850
- *
12851
- * ```js
12852
- * // for the purpose of this example let's assume that variables `$q` and `okToGreet`
12853
- * // are available in the current lexical scope (they could have been injected or passed in).
12854
- *
12855
- * function asyncGreet(name) {
12856
- * // perform some asynchronous operation, resolve or reject the promise when appropriate.
12857
- * return $q(function(resolve, reject) {
12858
- * setTimeout(function() {
12859
- * if (okToGreet(name)) {
12860
- * resolve('Hello, ' + name + '!');
12861
- * } else {
12862
- * reject('Greeting ' + name + ' is not allowed.');
12863
- * }
12864
- * }, 1000);
12865
- * });
12866
- * }
12867
- *
12868
- * var promise = asyncGreet('Robin Hood');
12869
- * promise.then(function(greeting) {
12870
- * alert('Success: ' + greeting);
12871
- * }, function(reason) {
12872
- * alert('Failed: ' + reason);
12873
- * });
12874
- * ```
12875
- *
12876
- * Note: progress/notify callbacks are not currently supported via the ES6-style interface.
12877
- *
12878
- * However, the more traditional CommonJS-style usage is still available, and documented below.
12879
- *
12880
- * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an
12881
- * interface for interacting with an object that represents the result of an action that is
12882
- * performed asynchronously, and may or may not be finished at any given point in time.
12883
- *
12884
- * From the perspective of dealing with error handling, deferred and promise APIs are to
12885
- * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.
12886
- *
12887
- * ```js
12888
- * // for the purpose of this example let's assume that variables `$q` and `okToGreet`
12889
- * // are available in the current lexical scope (they could have been injected or passed in).
12890
- *
12891
- * function asyncGreet(name) {
12892
- * var deferred = $q.defer();
12893
- *
12894
- * setTimeout(function() {
12895
- * deferred.notify('About to greet ' + name + '.');
12896
- *
12897
- * if (okToGreet(name)) {
12898
- * deferred.resolve('Hello, ' + name + '!');
12899
- * } else {
12900
- * deferred.reject('Greeting ' + name + ' is not allowed.');
12901
- * }
12902
- * }, 1000);
12903
- *
12904
- * return deferred.promise;
12905
- * }
12906
- *
12907
- * var promise = asyncGreet('Robin Hood');
12908
- * promise.then(function(greeting) {
12909
- * alert('Success: ' + greeting);
12910
- * }, function(reason) {
12911
- * alert('Failed: ' + reason);
12912
- * }, function(update) {
12913
- * alert('Got notification: ' + update);
12914
- * });
12915
- * ```
12916
- *
12917
- * At first it might not be obvious why this extra complexity is worth the trouble. The payoff
12918
- * comes in the way of guarantees that promise and deferred APIs make, see
12919
- * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.
12920
- *
12921
- * Additionally the promise api allows for composition that is very hard to do with the
12922
- * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.
12923
- * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the
12924
- * section on serial or parallel joining of promises.
12925
- *
12926
- * # The Deferred API
12927
- *
12928
- * A new instance of deferred is constructed by calling `$q.defer()`.
12929
- *
12930
- * The purpose of the deferred object is to expose the associated Promise instance as well as APIs
12931
- * that can be used for signaling the successful or unsuccessful completion, as well as the status
12932
- * of the task.
12933
- *
12934
- * **Methods**
12935
- *
12936
- * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection
12937
- * constructed via `$q.reject`, the promise will be rejected instead.
12938
- * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to
12939
- * resolving it with a rejection constructed via `$q.reject`.
12940
- * - `notify(value)` - provides updates on the status of the promise's execution. This may be called
12941
- * multiple times before the promise is either resolved or rejected.
12942
- *
12943
- * **Properties**
12944
- *
12945
- * - promise – `{Promise}` – promise object associated with this deferred.
12946
- *
12947
- *
12948
- * # The Promise API
12949
- *
12950
- * A new promise instance is created when a deferred instance is created and can be retrieved by
12951
- * calling `deferred.promise`.
12952
- *
12953
- * The purpose of the promise object is to allow for interested parties to get access to the result
12954
- * of the deferred task when it completes.
12955
- *
12956
- * **Methods**
12957
- *
12958
- * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or
12959
- * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously
12960
- * as soon as the result is available. The callbacks are called with a single argument: the result
12961
- * or rejection reason. Additionally, the notify callback may be called zero or more times to
12962
- * provide a progress indication, before the promise is resolved or rejected.
12963
- *
12964
- * This method *returns a new promise* which is resolved or rejected via the return value of the
12965
- * `successCallback`, `errorCallback`. It also notifies via the return value of the
12966
- * `notifyCallback` method. The promise cannot be resolved or rejected from the notifyCallback
12967
- * method.
12968
- *
12969
- * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`
12970
- *
12971
- * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise,
12972
- * but to do so without modifying the final value. This is useful to release resources or do some
12973
- * clean-up that needs to be done whether the promise was rejected or resolved. See the [full
12974
- * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for
12975
- * more information.
12976
- *
12977
- * # Chaining promises
12978
- *
12979
- * Because calling the `then` method of a promise returns a new derived promise, it is easily
12980
- * possible to create a chain of promises:
12981
- *
12982
- * ```js
12983
- * promiseB = promiseA.then(function(result) {
12984
- * return result + 1;
12985
- * });
12986
- *
12987
- * // promiseB will be resolved immediately after promiseA is resolved and its value
12988
- * // will be the result of promiseA incremented by 1
12989
- * ```
12990
- *
12991
- * It is possible to create chains of any length and since a promise can be resolved with another
12992
- * promise (which will defer its resolution further), it is possible to pause/defer resolution of
12993
- * the promises at any point in the chain. This makes it possible to implement powerful APIs like
12994
- * $http's response interceptors.
12995
- *
12996
- *
12997
- * # Differences between Kris Kowal's Q and $q
12998
- *
12999
- * There are two main differences:
13000
- *
13001
- * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation
13002
- * mechanism in angular, which means faster propagation of resolution or rejection into your
13003
- * models and avoiding unnecessary browser repaints, which would result in flickering UI.
13004
- * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains
13005
- * all the important functionality needed for common async tasks.
13006
- *
13007
- * # Testing
13008
- *
13009
- * ```js
13010
- * it('should simulate promise', inject(function($q, $rootScope) {
13011
- * var deferred = $q.defer();
13012
- * var promise = deferred.promise;
13013
- * var resolvedValue;
13014
- *
13015
- * promise.then(function(value) { resolvedValue = value; });
13016
- * expect(resolvedValue).toBeUndefined();
13017
- *
13018
- * // Simulate resolving of promise
13019
- * deferred.resolve(123);
13020
- * // Note that the 'then' function does not get called synchronously.
13021
- * // This is because we want the promise API to always be async, whether or not
13022
- * // it got called synchronously or asynchronously.
13023
- * expect(resolvedValue).toBeUndefined();
13024
- *
13025
- * // Propagate promise resolution to 'then' functions using $apply().
13026
- * $rootScope.$apply();
13027
- * expect(resolvedValue).toEqual(123);
13028
- * }));
13029
- * ```
13030
- *
13031
- * @param {function(function, function)} resolver Function which is responsible for resolving or
13032
- * rejecting the newly created promise. The first parameter is a function which resolves the
13033
- * promise, the second parameter is a function which rejects the promise.
13034
- *
13035
- * @returns {Promise} The newly created promise.
13036
- */
13037
-function $QProvider() {
13038
-
13039
- this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {
13040
- return qFactory(function(callback) {
13041
- $rootScope.$evalAsync(callback);
13042
- }, $exceptionHandler);
13043
- }];
13044
-}
13045
-
13046
-function $$QProvider() {
13047
- this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {
13048
- return qFactory(function(callback) {
13049
- $browser.defer(callback);
13050
- }, $exceptionHandler);
13051
- }];
13052
-}
13053
-
13054
-/**
13055
- * Constructs a promise manager.
13056
- *
13057
- * @param {function(function)} nextTick Function for executing functions in the next turn.
13058
- * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for
13059
- * debugging purposes.
13060
- * @returns {object} Promise manager.
13061
- */
13062
-function qFactory(nextTick, exceptionHandler) {
13063
- var $qMinErr = minErr('$q', TypeError);
13064
- function callOnce(self, resolveFn, rejectFn) {
13065
- var called = false;
13066
- function wrap(fn) {
13067
- return function(value) {
13068
- if (called) return;
13069
- called = true;
13070
- fn.call(self, value);
13071
- };
13072
- }
13073
-
13074
- return [wrap(resolveFn), wrap(rejectFn)];
13075
- }
13076
-
13077
- /**
13078
- * @ngdoc method
13079
- * @name ng.$q#defer
13080
- * @kind function
13081
- *
13082
- * @description
13083
- * Creates a `Deferred` object which represents a task which will finish in the future.
13084
- *
13085
- * @returns {Deferred} Returns a new instance of deferred.
13086
- */
13087
- var defer = function() {
13088
- return new Deferred();
13089
- };
13090
-
13091
- function Promise() {
13092
- this.$$state = { status: 0 };
13093
- }
13094
-
13095
- Promise.prototype = {
13096
- then: function(onFulfilled, onRejected, progressBack) {
13097
- var result = new Deferred();
13098
-
13099
- this.$$state.pending = this.$$state.pending || [];
13100
- this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);
13101
- if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);
13102
-
13103
- return result.promise;
13104
- },
13105
-
13106
- "catch": function(callback) {
13107
- return this.then(null, callback);
13108
- },
13109
-
13110
- "finally": function(callback, progressBack) {
13111
- return this.then(function(value) {
13112
- return handleCallback(value, true, callback);
13113
- }, function(error) {
13114
- return handleCallback(error, false, callback);
13115
- }, progressBack);
13116
- }
13117
- };
13118
-
13119
- //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native
13120
- function simpleBind(context, fn) {
13121
- return function(value) {
13122
- fn.call(context, value);
13123
- };
13124
- }
13125
-
13126
- function processQueue(state) {
13127
- var fn, promise, pending;
13128
-
13129
- pending = state.pending;
13130
- state.processScheduled = false;
13131
- state.pending = undefined;
13132
- for (var i = 0, ii = pending.length; i < ii; ++i) {
13133
- promise = pending[i][0];
13134
- fn = pending[i][state.status];
13135
- try {
13136
- if (isFunction(fn)) {
13137
- promise.resolve(fn(state.value));
13138
- } else if (state.status === 1) {
13139
- promise.resolve(state.value);
13140
- } else {
13141
- promise.reject(state.value);
13142
- }
13143
- } catch (e) {
13144
- promise.reject(e);
13145
- exceptionHandler(e);
13146
- }
13147
- }
13148
- }
13149
-
13150
- function scheduleProcessQueue(state) {
13151
- if (state.processScheduled || !state.pending) return;
13152
- state.processScheduled = true;
13153
- nextTick(function() { processQueue(state); });
13154
- }
13155
-
13156
- function Deferred() {
13157
- this.promise = new Promise();
13158
- //Necessary to support unbound execution :/
13159
- this.resolve = simpleBind(this, this.resolve);
13160
- this.reject = simpleBind(this, this.reject);
13161
- this.notify = simpleBind(this, this.notify);
13162
- }
13163
-
13164
- Deferred.prototype = {
13165
- resolve: function(val) {
13166
- if (this.promise.$$state.status) return;
13167
- if (val === this.promise) {
13168
- this.$$reject($qMinErr(
13169
- 'qcycle',
13170
- "Expected promise to be resolved with value other than itself '{0}'",
13171
- val));
13172
- }
13173
- else {
13174
- this.$$resolve(val);
13175
- }
13176
-
13177
- },
13178
-
13179
- $$resolve: function(val) {
13180
- var then, fns;
13181
-
13182
- fns = callOnce(this, this.$$resolve, this.$$reject);
13183
- try {
13184
- if ((isObject(val) || isFunction(val))) then = val && val.then;
13185
- if (isFunction(then)) {
13186
- this.promise.$$state.status = -1;
13187
- then.call(val, fns[0], fns[1], this.notify);
13188
- } else {
13189
- this.promise.$$state.value = val;
13190
- this.promise.$$state.status = 1;
13191
- scheduleProcessQueue(this.promise.$$state);
13192
- }
13193
- } catch (e) {
13194
- fns[1](e);
13195
- exceptionHandler(e);
13196
- }
13197
- },
13198
-
13199
- reject: function(reason) {
13200
- if (this.promise.$$state.status) return;
13201
- this.$$reject(reason);
13202
- },
13203
-
13204
- $$reject: function(reason) {
13205
- this.promise.$$state.value = reason;
13206
- this.promise.$$state.status = 2;
13207
- scheduleProcessQueue(this.promise.$$state);
13208
- },
13209
-
13210
- notify: function(progress) {
13211
- var callbacks = this.promise.$$state.pending;
13212
-
13213
- if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {
13214
- nextTick(function() {
13215
- var callback, result;
13216
- for (var i = 0, ii = callbacks.length; i < ii; i++) {
13217
- result = callbacks[i][0];
13218
- callback = callbacks[i][3];
13219
- try {
13220
- result.notify(isFunction(callback) ? callback(progress) : progress);
13221
- } catch (e) {
13222
- exceptionHandler(e);
13223
- }
13224
- }
13225
- });
13226
- }
13227
- }
13228
- };
13229
-
13230
- /**
13231
- * @ngdoc method
13232
- * @name $q#reject
13233
- * @kind function
13234
- *
13235
- * @description
13236
- * Creates a promise that is resolved as rejected with the specified `reason`. This api should be
13237
- * used to forward rejection in a chain of promises. If you are dealing with the last promise in
13238
- * a promise chain, you don't need to worry about it.
13239
- *
13240
- * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of
13241
- * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via
13242
- * a promise error callback and you want to forward the error to the promise derived from the
13243
- * current promise, you have to "rethrow" the error by returning a rejection constructed via
13244
- * `reject`.
13245
- *
13246
- * ```js
13247
- * promiseB = promiseA.then(function(result) {
13248
- * // success: do something and resolve promiseB
13249
- * // with the old or a new result
13250
- * return result;
13251
- * }, function(reason) {
13252
- * // error: handle the error if possible and
13253
- * // resolve promiseB with newPromiseOrValue,
13254
- * // otherwise forward the rejection to promiseB
13255
- * if (canHandle(reason)) {
13256
- * // handle the error and recover
13257
- * return newPromiseOrValue;
13258
- * }
13259
- * return $q.reject(reason);
13260
- * });
13261
- * ```
13262
- *
13263
- * @param {*} reason Constant, message, exception or an object representing the rejection reason.
13264
- * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
13265
- */
13266
- var reject = function(reason) {
13267
- var result = new Deferred();
13268
- result.reject(reason);
13269
- return result.promise;
13270
- };
13271
-
13272
- var makePromise = function makePromise(value, resolved) {
13273
- var result = new Deferred();
13274
- if (resolved) {
13275
- result.resolve(value);
13276
- } else {
13277
- result.reject(value);
13278
- }
13279
- return result.promise;
13280
- };
13281
-
13282
- var handleCallback = function handleCallback(value, isResolved, callback) {
13283
- var callbackOutput = null;
13284
- try {
13285
- if (isFunction(callback)) callbackOutput = callback();
13286
- } catch (e) {
13287
- return makePromise(e, false);
13288
- }
13289
- if (isPromiseLike(callbackOutput)) {
13290
- return callbackOutput.then(function() {
13291
- return makePromise(value, isResolved);
13292
- }, function(error) {
13293
- return makePromise(error, false);
13294
- });
13295
- } else {
13296
- return makePromise(value, isResolved);
13297
- }
13298
- };
13299
-
13300
- /**
13301
- * @ngdoc method
13302
- * @name $q#when
13303
- * @kind function
13304
- *
13305
- * @description
13306
- * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.
13307
- * This is useful when you are dealing with an object that might or might not be a promise, or if
13308
- * the promise comes from a source that can't be trusted.
13309
- *
13310
- * @param {*} value Value or a promise
13311
- * @returns {Promise} Returns a promise of the passed value or promise
13312
- */
13313
-
13314
-
13315
- var when = function(value, callback, errback, progressBack) {
13316
- var result = new Deferred();
13317
- result.resolve(value);
13318
- return result.promise.then(callback, errback, progressBack);
13319
- };
13320
-
13321
- /**
13322
- * @ngdoc method
13323
- * @name $q#all
13324
- * @kind function
13325
- *
13326
- * @description
13327
- * Combines multiple promises into a single promise that is resolved when all of the input
13328
- * promises are resolved.
13329
- *
13330
- * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.
13331
- * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,
13332
- * each value corresponding to the promise at the same index/key in the `promises` array/hash.
13333
- * If any of the promises is resolved with a rejection, this resulting promise will be rejected
13334
- * with the same rejection value.
13335
- */
13336
-
13337
- function all(promises) {
13338
- var deferred = new Deferred(),
13339
- counter = 0,
13340
- results = isArray(promises) ? [] : {};
13341
-
13342
- forEach(promises, function(promise, key) {
13343
- counter++;
13344
- when(promise).then(function(value) {
13345
- if (results.hasOwnProperty(key)) return;
13346
- results[key] = value;
13347
- if (!(--counter)) deferred.resolve(results);
13348
- }, function(reason) {
13349
- if (results.hasOwnProperty(key)) return;
13350
- deferred.reject(reason);
13351
- });
13352
- });
13353
-
13354
- if (counter === 0) {
13355
- deferred.resolve(results);
13356
- }
13357
-
13358
- return deferred.promise;
13359
- }
13360
-
13361
- var $Q = function Q(resolver) {
13362
- if (!isFunction(resolver)) {
13363
- throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver);
13364
- }
13365
-
13366
- if (!(this instanceof Q)) {
13367
- // More useful when $Q is the Promise itself.
13368
- return new Q(resolver);
13369
- }
13370
-
13371
- var deferred = new Deferred();
13372
-
13373
- function resolveFn(value) {
13374
- deferred.resolve(value);
13375
- }
13376
-
13377
- function rejectFn(reason) {
13378
- deferred.reject(reason);
13379
- }
13380
-
13381
- resolver(resolveFn, rejectFn);
13382
-
13383
- return deferred.promise;
13384
- };
13385
-
13386
- $Q.defer = defer;
13387
- $Q.reject = reject;
13388
- $Q.when = when;
13389
- $Q.all = all;
13390
-
13391
- return $Q;
13392
-}
13393
-
13394
-function $$RAFProvider() { //rAF
13395
- this.$get = ['$window', '$timeout', function($window, $timeout) {
13396
- var requestAnimationFrame = $window.requestAnimationFrame ||
13397
- $window.webkitRequestAnimationFrame ||
13398
- $window.mozRequestAnimationFrame;
13399
-
13400
- var cancelAnimationFrame = $window.cancelAnimationFrame ||
13401
- $window.webkitCancelAnimationFrame ||
13402
- $window.mozCancelAnimationFrame ||
13403
- $window.webkitCancelRequestAnimationFrame;
13404
-
13405
- var rafSupported = !!requestAnimationFrame;
13406
- var raf = rafSupported
13407
- ? function(fn) {
13408
- var id = requestAnimationFrame(fn);
13409
- return function() {
13410
- cancelAnimationFrame(id);
13411
- };
13412
- }
13413
- : function(fn) {
13414
- var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666
13415
- return function() {
13416
- $timeout.cancel(timer);
13417
- };
13418
- };
13419
-
13420
- raf.supported = rafSupported;
13421
-
13422
- return raf;
13423
- }];
13424
-}
13425
-
13426
-/**
13427
- * DESIGN NOTES
13428
- *
13429
- * The design decisions behind the scope are heavily favored for speed and memory consumption.
13430
- *
13431
- * The typical use of scope is to watch the expressions, which most of the time return the same
13432
- * value as last time so we optimize the operation.
13433
- *
13434
- * Closures construction is expensive in terms of speed as well as memory:
13435
- * - No closures, instead use prototypical inheritance for API
13436
- * - Internal state needs to be stored on scope directly, which means that private state is
13437
- * exposed as $$____ properties
13438
- *
13439
- * Loop operations are optimized by using while(count--) { ... }
13440
- * - this means that in order to keep the same order of execution as addition we have to add
13441
- * items to the array at the beginning (unshift) instead of at the end (push)
13442
- *
13443
- * Child scopes are created and removed often
13444
- * - Using an array would be slow since inserts in middle are expensive so we use linked list
13445
- *
13446
- * There are few watches then a lot of observers. This is why you don't want the observer to be
13447
- * implemented in the same way as watch. Watch requires return of initialization function which
13448
- * are expensive to construct.
13449
- */
13450
-
13451
-
13452
-/**
13453
- * @ngdoc provider
13454
- * @name $rootScopeProvider
13455
- * @description
13456
- *
13457
- * Provider for the $rootScope service.
13458
- */
13459
-
13460
-/**
13461
- * @ngdoc method
13462
- * @name $rootScopeProvider#digestTtl
13463
- * @description
13464
- *
13465
- * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and
13466
- * assuming that the model is unstable.
13467
- *
13468
- * The current default is 10 iterations.
13469
- *
13470
- * In complex applications it's possible that the dependencies between `$watch`s will result in
13471
- * several digest iterations. However if an application needs more than the default 10 digest
13472
- * iterations for its model to stabilize then you should investigate what is causing the model to
13473
- * continuously change during the digest.
13474
- *
13475
- * Increasing the TTL could have performance implications, so you should not change it without
13476
- * proper justification.
13477
- *
13478
- * @param {number} limit The number of digest iterations.
13479
- */
13480
-
13481
-
13482
-/**
13483
- * @ngdoc service
13484
- * @name $rootScope
13485
- * @description
13486
- *
13487
- * Every application has a single root {@link ng.$rootScope.Scope scope}.
13488
- * All other scopes are descendant scopes of the root scope. Scopes provide separation
13489
- * between the model and the view, via a mechanism for watching the model for changes.
13490
- * They also provide an event emission/broadcast and subscription facility. See the
13491
- * {@link guide/scope developer guide on scopes}.
13492
- */
13493
-function $RootScopeProvider() {
13494
- var TTL = 10;
13495
- var $rootScopeMinErr = minErr('$rootScope');
13496
- var lastDirtyWatch = null;
13497
- var applyAsyncId = null;
13498
-
13499
- this.digestTtl = function(value) {
13500
- if (arguments.length) {
13501
- TTL = value;
13502
- }
13503
- return TTL;
13504
- };
13505
-
13506
- this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
13507
- function($injector, $exceptionHandler, $parse, $browser) {
13508
-
13509
- /**
13510
- * @ngdoc type
13511
- * @name $rootScope.Scope
13512
- *
13513
- * @description
13514
- * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the
13515
- * {@link auto.$injector $injector}. Child scopes are created using the
13516
- * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when
13517
- * compiled HTML template is executed.)
13518
- *
13519
- * Here is a simple scope snippet to show how you can interact with the scope.
13520
- * ```html
13521
- * <file src="./test/ng/rootScopeSpec.js" tag="docs1" />
13522
- * ```
13523
- *
13524
- * # Inheritance
13525
- * A scope can inherit from a parent scope, as in this example:
13526
- * ```js
13527
- var parent = $rootScope;
13528
- var child = parent.$new();
13529
-
13530
- parent.salutation = "Hello";
13531
- child.name = "World";
13532
- expect(child.salutation).toEqual('Hello');
13533
-
13534
- child.salutation = "Welcome";
13535
- expect(child.salutation).toEqual('Welcome');
13536
- expect(parent.salutation).toEqual('Hello');
13537
- * ```
13538
- *
13539
- * When interacting with `Scope` in tests, additional helper methods are available on the
13540
- * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional
13541
- * details.
13542
- *
13543
- *
13544
- * @param {Object.<string, function()>=} providers Map of service factory which need to be
13545
- * provided for the current scope. Defaults to {@link ng}.
13546
- * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should
13547
- * append/override services provided by `providers`. This is handy
13548
- * when unit-testing and having the need to override a default
13549
- * service.
13550
- * @returns {Object} Newly created scope.
13551
- *
13552
- */
13553
- function Scope() {
13554
- this.$id = nextUid();
13555
- this.$$phase = this.$parent = this.$$watchers =
13556
- this.$$nextSibling = this.$$prevSibling =
13557
- this.$$childHead = this.$$childTail = null;
13558
- this.$root = this;
13559
- this.$$destroyed = false;
13560
- this.$$listeners = {};
13561
- this.$$listenerCount = {};
13562
- this.$$isolateBindings = null;
13563
- }
13564
-
13565
- /**
13566
- * @ngdoc property
13567
- * @name $rootScope.Scope#$id
13568
- *
13569
- * @description
13570
- * Unique scope ID (monotonically increasing) useful for debugging.
13571
- */
13572
-
13573
- /**
13574
- * @ngdoc property
13575
- * @name $rootScope.Scope#$parent
13576
- *
13577
- * @description
13578
- * Reference to the parent scope.
13579
- */
13580
-
13581
- /**
13582
- * @ngdoc property
13583
- * @name $rootScope.Scope#$root
13584
- *
13585
- * @description
13586
- * Reference to the root scope.
13587
- */
13588
-
13589
- Scope.prototype = {
13590
- constructor: Scope,
13591
- /**
13592
- * @ngdoc method
13593
- * @name $rootScope.Scope#$new
13594
- * @kind function
13595
- *
13596
- * @description
13597
- * Creates a new child {@link ng.$rootScope.Scope scope}.
13598
- *
13599
- * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.
13600
- * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
13601
- *
13602
- * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is
13603
- * desired for the scope and its child scopes to be permanently detached from the parent and
13604
- * thus stop participating in model change detection and listener notification by invoking.
13605
- *
13606
- * @param {boolean} isolate If true, then the scope does not prototypically inherit from the
13607
- * parent scope. The scope is isolated, as it can not see parent scope properties.
13608
- * When creating widgets, it is useful for the widget to not accidentally read parent
13609
- * state.
13610
- *
13611
- * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent`
13612
- * of the newly created scope. Defaults to `this` scope if not provided.
13613
- * This is used when creating a transclude scope to correctly place it
13614
- * in the scope hierarchy while maintaining the correct prototypical
13615
- * inheritance.
13616
- *
13617
- * @returns {Object} The newly created child scope.
13618
- *
13619
- */
13620
- $new: function(isolate, parent) {
13621
- var child;
13622
-
13623
- parent = parent || this;
13624
-
13625
- if (isolate) {
13626
- child = new Scope();
13627
- child.$root = this.$root;
13628
- } else {
13629
- // Only create a child scope class if somebody asks for one,
13630
- // but cache it to allow the VM to optimize lookups.
13631
- if (!this.$$ChildScope) {
13632
- this.$$ChildScope = function ChildScope() {
13633
- this.$$watchers = this.$$nextSibling =
13634
- this.$$childHead = this.$$childTail = null;
13635
- this.$$listeners = {};
13636
- this.$$listenerCount = {};
13637
- this.$id = nextUid();
13638
- this.$$ChildScope = null;
13639
- };
13640
- this.$$ChildScope.prototype = this;
13641
- }
13642
- child = new this.$$ChildScope();
13643
- }
13644
- child.$parent = parent;
13645
- child.$$prevSibling = parent.$$childTail;
13646
- if (parent.$$childHead) {
13647
- parent.$$childTail.$$nextSibling = child;
13648
- parent.$$childTail = child;
13649
- } else {
13650
- parent.$$childHead = parent.$$childTail = child;
13651
- }
13652
-
13653
- // When the new scope is not isolated or we inherit from `this`, and
13654
- // the parent scope is destroyed, the property `$$destroyed` is inherited
13655
- // prototypically. In all other cases, this property needs to be set
13656
- // when the parent scope is destroyed.
13657
- // The listener needs to be added after the parent is set
13658
- if (isolate || parent != this) child.$on('$destroy', destroyChild);
13659
-
13660
- return child;
13661
-
13662
- function destroyChild() {
13663
- child.$$destroyed = true;
13664
- }
13665
- },
13666
-
13667
- /**
13668
- * @ngdoc method
13669
- * @name $rootScope.Scope#$watch
13670
- * @kind function
13671
- *
13672
- * @description
13673
- * Registers a `listener` callback to be executed whenever the `watchExpression` changes.
13674
- *
13675
- * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest
13676
- * $digest()} and should return the value that will be watched. (Since
13677
- * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the
13678
- * `watchExpression` can execute multiple times per
13679
- * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)
13680
- * - The `listener` is called only when the value from the current `watchExpression` and the
13681
- * previous call to `watchExpression` are not equal (with the exception of the initial run,
13682
- * see below). Inequality is determined according to reference inequality,
13683
- * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
13684
- * via the `!==` Javascript operator, unless `objectEquality == true`
13685
- * (see next point)
13686
- * - When `objectEquality == true`, inequality of the `watchExpression` is determined
13687
- * according to the {@link angular.equals} function. To save the value of the object for
13688
- * later comparison, the {@link angular.copy} function is used. This therefore means that
13689
- * watching complex objects will have adverse memory and performance implications.
13690
- * - The watch `listener` may change the model, which may trigger other `listener`s to fire.
13691
- * This is achieved by rerunning the watchers until no changes are detected. The rerun
13692
- * iteration limit is 10 to prevent an infinite loop deadlock.
13693
- *
13694
- *
13695
- * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,
13696
- * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`
13697
- * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a
13698
- * change is detected, be prepared for multiple calls to your listener.)
13699
- *
13700
- * After a watcher is registered with the scope, the `listener` fn is called asynchronously
13701
- * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the
13702
- * watcher. In rare cases, this is undesirable because the listener is called when the result
13703
- * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you
13704
- * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the
13705
- * listener was called due to initialization.
13706
- *
13707
- *
13708
- *
13709
- * # Example
13710
- * ```js
13711
- // let's assume that scope was dependency injected as the $rootScope
13712
- var scope = $rootScope;
13713
- scope.name = 'misko';
13714
- scope.counter = 0;
13715
-
13716
- expect(scope.counter).toEqual(0);
13717
- scope.$watch('name', function(newValue, oldValue) {
13718
- scope.counter = scope.counter + 1;
13719
- });
13720
- expect(scope.counter).toEqual(0);
13721
-
13722
- scope.$digest();
13723
- // the listener is always called during the first $digest loop after it was registered
13724
- expect(scope.counter).toEqual(1);
13725
-
13726
- scope.$digest();
13727
- // but now it will not be called unless the value changes
13728
- expect(scope.counter).toEqual(1);
13729
-
13730
- scope.name = 'adam';
13731
- scope.$digest();
13732
- expect(scope.counter).toEqual(2);
13733
-
13734
-
13735
-
13736
- // Using a function as a watchExpression
13737
- var food;
13738
- scope.foodCounter = 0;
13739
- expect(scope.foodCounter).toEqual(0);
13740
- scope.$watch(
13741
- // This function returns the value being watched. It is called for each turn of the $digest loop
13742
- function() { return food; },
13743
- // This is the change listener, called when the value returned from the above function changes
13744
- function(newValue, oldValue) {
13745
- if ( newValue !== oldValue ) {
13746
- // Only increment the counter if the value changed
13747
- scope.foodCounter = scope.foodCounter + 1;
13748
- }
13749
- }
13750
- );
13751
- // No digest has been run so the counter will be zero
13752
- expect(scope.foodCounter).toEqual(0);
13753
-
13754
- // Run the digest but since food has not changed count will still be zero
13755
- scope.$digest();
13756
- expect(scope.foodCounter).toEqual(0);
13757
-
13758
- // Update food and run digest. Now the counter will increment
13759
- food = 'cheeseburger';
13760
- scope.$digest();
13761
- expect(scope.foodCounter).toEqual(1);
13762
-
13763
- * ```
13764
- *
13765
- *
13766
- *
13767
- * @param {(function()|string)} watchExpression Expression that is evaluated on each
13768
- * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers
13769
- * a call to the `listener`.
13770
- *
13771
- * - `string`: Evaluated as {@link guide/expression expression}
13772
- * - `function(scope)`: called with current `scope` as a parameter.
13773
- * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value
13774
- * of `watchExpression` changes.
13775
- *
13776
- * - `newVal` contains the current value of the `watchExpression`
13777
- * - `oldVal` contains the previous value of the `watchExpression`
13778
- * - `scope` refers to the current scope
13779
- * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of
13780
- * comparing for reference equality.
13781
- * @returns {function()} Returns a deregistration function for this listener.
13782
- */
13783
- $watch: function(watchExp, listener, objectEquality) {
13784
- var get = $parse(watchExp);
13785
-
13786
- if (get.$$watchDelegate) {
13787
- return get.$$watchDelegate(this, listener, objectEquality, get);
13788
- }
13789
- var scope = this,
13790
- array = scope.$$watchers,
13791
- watcher = {
13792
- fn: listener,
13793
- last: initWatchVal,
13794
- get: get,
13795
- exp: watchExp,
13796
- eq: !!objectEquality
13797
- };
13798
-
13799
- lastDirtyWatch = null;
13800
-
13801
- if (!isFunction(listener)) {
13802
- watcher.fn = noop;
13803
- }
13804
-
13805
- if (!array) {
13806
- array = scope.$$watchers = [];
13807
- }
13808
- // we use unshift since we use a while loop in $digest for speed.
13809
- // the while loop reads in reverse order.
13810
- array.unshift(watcher);
13811
-
13812
- return function deregisterWatch() {
13813
- arrayRemove(array, watcher);
13814
- lastDirtyWatch = null;
13815
- };
13816
- },
13817
-
13818
- /**
13819
- * @ngdoc method
13820
- * @name $rootScope.Scope#$watchGroup
13821
- * @kind function
13822
- *
13823
- * @description
13824
- * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.
13825
- * If any one expression in the collection changes the `listener` is executed.
13826
- *
13827
- * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every
13828
- * call to $digest() to see if any items changes.
13829
- * - The `listener` is called whenever any expression in the `watchExpressions` array changes.
13830
- *
13831
- * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually
13832
- * watched using {@link ng.$rootScope.Scope#$watch $watch()}
13833
- *
13834
- * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any
13835
- * expression in `watchExpressions` changes
13836
- * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching
13837
- * those of `watchExpression`
13838
- * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching
13839
- * those of `watchExpression`
13840
- * The `scope` refers to the current scope.
13841
- * @returns {function()} Returns a de-registration function for all listeners.
13842
- */
13843
- $watchGroup: function(watchExpressions, listener) {
13844
- var oldValues = new Array(watchExpressions.length);
13845
- var newValues = new Array(watchExpressions.length);
13846
- var deregisterFns = [];
13847
- var self = this;
13848
- var changeReactionScheduled = false;
13849
- var firstRun = true;
13850
-
13851
- if (!watchExpressions.length) {
13852
- // No expressions means we call the listener ASAP
13853
- var shouldCall = true;
13854
- self.$evalAsync(function() {
13855
- if (shouldCall) listener(newValues, newValues, self);
13856
- });
13857
- return function deregisterWatchGroup() {
13858
- shouldCall = false;
13859
- };
13860
- }
13861
-
13862
- if (watchExpressions.length === 1) {
13863
- // Special case size of one
13864
- return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) {
13865
- newValues[0] = value;
13866
- oldValues[0] = oldValue;
13867
- listener(newValues, (value === oldValue) ? newValues : oldValues, scope);
13868
- });
13869
- }
13870
-
13871
- forEach(watchExpressions, function(expr, i) {
13872
- var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {
13873
- newValues[i] = value;
13874
- oldValues[i] = oldValue;
13875
- if (!changeReactionScheduled) {
13876
- changeReactionScheduled = true;
13877
- self.$evalAsync(watchGroupAction);
13878
- }
13879
- });
13880
- deregisterFns.push(unwatchFn);
13881
- });
13882
-
13883
- function watchGroupAction() {
13884
- changeReactionScheduled = false;
13885
-
13886
- if (firstRun) {
13887
- firstRun = false;
13888
- listener(newValues, newValues, self);
13889
- } else {
13890
- listener(newValues, oldValues, self);
13891
- }
13892
- }
13893
-
13894
- return function deregisterWatchGroup() {
13895
- while (deregisterFns.length) {
13896
- deregisterFns.shift()();
13897
- }
13898
- };
13899
- },
13900
-
13901
-
13902
- /**
13903
- * @ngdoc method
13904
- * @name $rootScope.Scope#$watchCollection
13905
- * @kind function
13906
- *
13907
- * @description
13908
- * Shallow watches the properties of an object and fires whenever any of the properties change
13909
- * (for arrays, this implies watching the array items; for object maps, this implies watching
13910
- * the properties). If a change is detected, the `listener` callback is fired.
13911
- *
13912
- * - The `obj` collection is observed via standard $watch operation and is examined on every
13913
- * call to $digest() to see if any items have been added, removed, or moved.
13914
- * - The `listener` is called whenever anything within the `obj` has changed. Examples include
13915
- * adding, removing, and moving items belonging to an object or array.
13916
- *
13917
- *
13918
- * # Example
13919
- * ```js
13920
- $scope.names = ['igor', 'matias', 'misko', 'james'];
13921
- $scope.dataCount = 4;
13922
-
13923
- $scope.$watchCollection('names', function(newNames, oldNames) {
13924
- $scope.dataCount = newNames.length;
13925
- });
13926
-
13927
- expect($scope.dataCount).toEqual(4);
13928
- $scope.$digest();
13929
-
13930
- //still at 4 ... no changes
13931
- expect($scope.dataCount).toEqual(4);
13932
-
13933
- $scope.names.pop();
13934
- $scope.$digest();
13935
-
13936
- //now there's been a change
13937
- expect($scope.dataCount).toEqual(3);
13938
- * ```
13939
- *
13940
- *
13941
- * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The
13942
- * expression value should evaluate to an object or an array which is observed on each
13943
- * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the
13944
- * collection will trigger a call to the `listener`.
13945
- *
13946
- * @param {function(newCollection, oldCollection, scope)} listener a callback function called
13947
- * when a change is detected.
13948
- * - The `newCollection` object is the newly modified data obtained from the `obj` expression
13949
- * - The `oldCollection` object is a copy of the former collection data.
13950
- * Due to performance considerations, the`oldCollection` value is computed only if the
13951
- * `listener` function declares two or more arguments.
13952
- * - The `scope` argument refers to the current scope.
13953
- *
13954
- * @returns {function()} Returns a de-registration function for this listener. When the
13955
- * de-registration function is executed, the internal watch operation is terminated.
13956
- */
13957
- $watchCollection: function(obj, listener) {
13958
- $watchCollectionInterceptor.$stateful = true;
13959
-
13960
- var self = this;
13961
- // the current value, updated on each dirty-check run
13962
- var newValue;
13963
- // a shallow copy of the newValue from the last dirty-check run,
13964
- // updated to match newValue during dirty-check run
13965
- var oldValue;
13966
- // a shallow copy of the newValue from when the last change happened
13967
- var veryOldValue;
13968
- // only track veryOldValue if the listener is asking for it
13969
- var trackVeryOldValue = (listener.length > 1);
13970
- var changeDetected = 0;
13971
- var changeDetector = $parse(obj, $watchCollectionInterceptor);
13972
- var internalArray = [];
13973
- var internalObject = {};
13974
- var initRun = true;
13975
- var oldLength = 0;
13976
-
13977
- function $watchCollectionInterceptor(_value) {
13978
- newValue = _value;
13979
- var newLength, key, bothNaN, newItem, oldItem;
13980
-
13981
- // If the new value is undefined, then return undefined as the watch may be a one-time watch
13982
- if (isUndefined(newValue)) return;
13983
-
13984
- if (!isObject(newValue)) { // if primitive
13985
- if (oldValue !== newValue) {
13986
- oldValue = newValue;
13987
- changeDetected++;
13988
- }
13989
- } else if (isArrayLike(newValue)) {
13990
- if (oldValue !== internalArray) {
13991
- // we are transitioning from something which was not an array into array.
13992
- oldValue = internalArray;
13993
- oldLength = oldValue.length = 0;
13994
- changeDetected++;
13995
- }
13996
-
13997
- newLength = newValue.length;
13998
-
13999
- if (oldLength !== newLength) {
14000
- // if lengths do not match we need to trigger change notification
14001
- changeDetected++;
14002
- oldValue.length = oldLength = newLength;
14003
- }
14004
- // copy the items to oldValue and look for changes.
14005
- for (var i = 0; i < newLength; i++) {
14006
- oldItem = oldValue[i];
14007
- newItem = newValue[i];
14008
-
14009
- bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
14010
- if (!bothNaN && (oldItem !== newItem)) {
14011
- changeDetected++;
14012
- oldValue[i] = newItem;
14013
- }
14014
- }
14015
- } else {
14016
- if (oldValue !== internalObject) {
14017
- // we are transitioning from something which was not an object into object.
14018
- oldValue = internalObject = {};
14019
- oldLength = 0;
14020
- changeDetected++;
14021
- }
14022
- // copy the items to oldValue and look for changes.
14023
- newLength = 0;
14024
- for (key in newValue) {
14025
- if (newValue.hasOwnProperty(key)) {
14026
- newLength++;
14027
- newItem = newValue[key];
14028
- oldItem = oldValue[key];
14029
-
14030
- if (key in oldValue) {
14031
- bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
14032
- if (!bothNaN && (oldItem !== newItem)) {
14033
- changeDetected++;
14034
- oldValue[key] = newItem;
14035
- }
14036
- } else {
14037
- oldLength++;
14038
- oldValue[key] = newItem;
14039
- changeDetected++;
14040
- }
14041
- }
14042
- }
14043
- if (oldLength > newLength) {
14044
- // we used to have more keys, need to find them and destroy them.
14045
- changeDetected++;
14046
- for (key in oldValue) {
14047
- if (!newValue.hasOwnProperty(key)) {
14048
- oldLength--;
14049
- delete oldValue[key];
14050
- }
14051
- }
14052
- }
14053
- }
14054
- return changeDetected;
14055
- }
14056
-
14057
- function $watchCollectionAction() {
14058
- if (initRun) {
14059
- initRun = false;
14060
- listener(newValue, newValue, self);
14061
- } else {
14062
- listener(newValue, veryOldValue, self);
14063
- }
14064
-
14065
- // make a copy for the next time a collection is changed
14066
- if (trackVeryOldValue) {
14067
- if (!isObject(newValue)) {
14068
- //primitive
14069
- veryOldValue = newValue;
14070
- } else if (isArrayLike(newValue)) {
14071
- veryOldValue = new Array(newValue.length);
14072
- for (var i = 0; i < newValue.length; i++) {
14073
- veryOldValue[i] = newValue[i];
14074
- }
14075
- } else { // if object
14076
- veryOldValue = {};
14077
- for (var key in newValue) {
14078
- if (hasOwnProperty.call(newValue, key)) {
14079
- veryOldValue[key] = newValue[key];
14080
- }
14081
- }
14082
- }
14083
- }
14084
- }
14085
-
14086
- return this.$watch(changeDetector, $watchCollectionAction);
14087
- },
14088
-
14089
- /**
14090
- * @ngdoc method
14091
- * @name $rootScope.Scope#$digest
14092
- * @kind function
14093
- *
14094
- * @description
14095
- * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and
14096
- * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change
14097
- * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}
14098
- * until no more listeners are firing. This means that it is possible to get into an infinite
14099
- * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of
14100
- * iterations exceeds 10.
14101
- *
14102
- * Usually, you don't call `$digest()` directly in
14103
- * {@link ng.directive:ngController controllers} or in
14104
- * {@link ng.$compileProvider#directive directives}.
14105
- * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within
14106
- * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`.
14107
- *
14108
- * If you want to be notified whenever `$digest()` is called,
14109
- * you can register a `watchExpression` function with
14110
- * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.
14111
- *
14112
- * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.
14113
- *
14114
- * # Example
14115
- * ```js
14116
- var scope = ...;
14117
- scope.name = 'misko';
14118
- scope.counter = 0;
14119
-
14120
- expect(scope.counter).toEqual(0);
14121
- scope.$watch('name', function(newValue, oldValue) {
14122
- scope.counter = scope.counter + 1;
14123
- });
14124
- expect(scope.counter).toEqual(0);
14125
-
14126
- scope.$digest();
14127
- // the listener is always called during the first $digest loop after it was registered
14128
- expect(scope.counter).toEqual(1);
14129
-
14130
- scope.$digest();
14131
- // but now it will not be called unless the value changes
14132
- expect(scope.counter).toEqual(1);
14133
-
14134
- scope.name = 'adam';
14135
- scope.$digest();
14136
- expect(scope.counter).toEqual(2);
14137
- * ```
14138
- *
14139
- */
14140
- $digest: function() {
14141
- var watch, value, last,
14142
- watchers,
14143
- length,
14144
- dirty, ttl = TTL,
14145
- next, current, target = this,
14146
- watchLog = [],
14147
- logIdx, logMsg, asyncTask;
14148
-
14149
- beginPhase('$digest');
14150
- // Check for changes to browser url that happened in sync before the call to $digest
14151
- $browser.$$checkUrlChange();
14152
-
14153
- if (this === $rootScope && applyAsyncId !== null) {
14154
- // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then
14155
- // cancel the scheduled $apply and flush the queue of expressions to be evaluated.
14156
- $browser.defer.cancel(applyAsyncId);
14157
- flushApplyAsync();
14158
- }
14159
-
14160
- lastDirtyWatch = null;
14161
-
14162
- do { // "while dirty" loop
14163
- dirty = false;
14164
- current = target;
14165
-
14166
- while (asyncQueue.length) {
14167
- try {
14168
- asyncTask = asyncQueue.shift();
14169
- asyncTask.scope.$eval(asyncTask.expression);
14170
- } catch (e) {
14171
- $exceptionHandler(e);
14172
- }
14173
- lastDirtyWatch = null;
14174
- }
14175
-
14176
- traverseScopesLoop:
14177
- do { // "traverse the scopes" loop
14178
- if ((watchers = current.$$watchers)) {
14179
- // process our watches
14180
- length = watchers.length;
14181
- while (length--) {
14182
- try {
14183
- watch = watchers[length];
14184
- // Most common watches are on primitives, in which case we can short
14185
- // circuit it with === operator, only when === fails do we use .equals
14186
- if (watch) {
14187
- if ((value = watch.get(current)) !== (last = watch.last) &&
14188
- !(watch.eq
14189
- ? equals(value, last)
14190
- : (typeof value === 'number' && typeof last === 'number'
14191
- && isNaN(value) && isNaN(last)))) {
14192
- dirty = true;
14193
- lastDirtyWatch = watch;
14194
- watch.last = watch.eq ? copy(value, null) : value;
14195
- watch.fn(value, ((last === initWatchVal) ? value : last), current);
14196
- if (ttl < 5) {
14197
- logIdx = 4 - ttl;
14198
- if (!watchLog[logIdx]) watchLog[logIdx] = [];
14199
- watchLog[logIdx].push({
14200
- msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp,
14201
- newVal: value,
14202
- oldVal: last
14203
- });
14204
- }
14205
- } else if (watch === lastDirtyWatch) {
14206
- // If the most recently dirty watcher is now clean, short circuit since the remaining watchers
14207
- // have already been tested.
14208
- dirty = false;
14209
- break traverseScopesLoop;
14210
- }
14211
- }
14212
- } catch (e) {
14213
- $exceptionHandler(e);
14214
- }
14215
- }
14216
- }
14217
-
14218
- // Insanity Warning: scope depth-first traversal
14219
- // yes, this code is a bit crazy, but it works and we have tests to prove it!
14220
- // this piece should be kept in sync with the traversal in $broadcast
14221
- if (!(next = (current.$$childHead ||
14222
- (current !== target && current.$$nextSibling)))) {
14223
- while (current !== target && !(next = current.$$nextSibling)) {
14224
- current = current.$parent;
14225
- }
14226
- }
14227
- } while ((current = next));
14228
-
14229
- // `break traverseScopesLoop;` takes us to here
14230
-
14231
- if ((dirty || asyncQueue.length) && !(ttl--)) {
14232
- clearPhase();
14233
- throw $rootScopeMinErr('infdig',
14234
- '{0} $digest() iterations reached. Aborting!\n' +
14235
- 'Watchers fired in the last 5 iterations: {1}',
14236
- TTL, watchLog);
14237
- }
14238
-
14239
- } while (dirty || asyncQueue.length);
14240
-
14241
- clearPhase();
14242
-
14243
- while (postDigestQueue.length) {
14244
- try {
14245
- postDigestQueue.shift()();
14246
- } catch (e) {
14247
- $exceptionHandler(e);
14248
- }
14249
- }
14250
- },
14251
-
14252
-
14253
- /**
14254
- * @ngdoc event
14255
- * @name $rootScope.Scope#$destroy
14256
- * @eventType broadcast on scope being destroyed
14257
- *
14258
- * @description
14259
- * Broadcasted when a scope and its children are being destroyed.
14260
- *
14261
- * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
14262
- * clean up DOM bindings before an element is removed from the DOM.
14263
- */
14264
-
14265
- /**
14266
- * @ngdoc method
14267
- * @name $rootScope.Scope#$destroy
14268
- * @kind function
14269
- *
14270
- * @description
14271
- * Removes the current scope (and all of its children) from the parent scope. Removal implies
14272
- * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer
14273
- * propagate to the current scope and its children. Removal also implies that the current
14274
- * scope is eligible for garbage collection.
14275
- *
14276
- * The `$destroy()` is usually used by directives such as
14277
- * {@link ng.directive:ngRepeat ngRepeat} for managing the
14278
- * unrolling of the loop.
14279
- *
14280
- * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.
14281
- * Application code can register a `$destroy` event handler that will give it a chance to
14282
- * perform any necessary cleanup.
14283
- *
14284
- * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
14285
- * clean up DOM bindings before an element is removed from the DOM.
14286
- */
14287
- $destroy: function() {
14288
- // we can't destroy the root scope or a scope that has been already destroyed
14289
- if (this.$$destroyed) return;
14290
- var parent = this.$parent;
14291
-
14292
- this.$broadcast('$destroy');
14293
- this.$$destroyed = true;
14294
- if (this === $rootScope) return;
14295
-
14296
- for (var eventName in this.$$listenerCount) {
14297
- decrementListenerCount(this, this.$$listenerCount[eventName], eventName);
14298
- }
14299
-
14300
- // sever all the references to parent scopes (after this cleanup, the current scope should
14301
- // not be retained by any of our references and should be eligible for garbage collection)
14302
- if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
14303
- if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
14304
- if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
14305
- if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;
14306
-
14307
- // Disable listeners, watchers and apply/digest methods
14308
- this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
14309
- this.$on = this.$watch = this.$watchGroup = function() { return noop; };
14310
- this.$$listeners = {};
14311
-
14312
- // All of the code below is bogus code that works around V8's memory leak via optimized code
14313
- // and inline caches.
14314
- //
14315
- // see:
14316
- // - https://code.google.com/p/v8/issues/detail?id=2073#c26
14317
- // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909
14318
- // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451
14319
-
14320
- this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =
14321
- this.$$childTail = this.$root = this.$$watchers = null;
14322
- },
14323
-
14324
- /**
14325
- * @ngdoc method
14326
- * @name $rootScope.Scope#$eval
14327
- * @kind function
14328
- *
14329
- * @description
14330
- * Executes the `expression` on the current scope and returns the result. Any exceptions in
14331
- * the expression are propagated (uncaught). This is useful when evaluating Angular
14332
- * expressions.
14333
- *
14334
- * # Example
14335
- * ```js
14336
- var scope = ng.$rootScope.Scope();
14337
- scope.a = 1;
14338
- scope.b = 2;
14339
-
14340
- expect(scope.$eval('a+b')).toEqual(3);
14341
- expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);
14342
- * ```
14343
- *
14344
- * @param {(string|function())=} expression An angular expression to be executed.
14345
- *
14346
- * - `string`: execute using the rules as defined in {@link guide/expression expression}.
14347
- * - `function(scope)`: execute the function with the current `scope` parameter.
14348
- *
14349
- * @param {(object)=} locals Local variables object, useful for overriding values in scope.
14350
- * @returns {*} The result of evaluating the expression.
14351
- */
14352
- $eval: function(expr, locals) {
14353
- return $parse(expr)(this, locals);
14354
- },
14355
-
14356
- /**
14357
- * @ngdoc method
14358
- * @name $rootScope.Scope#$evalAsync
14359
- * @kind function
14360
- *
14361
- * @description
14362
- * Executes the expression on the current scope at a later point in time.
14363
- *
14364
- * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only
14365
- * that:
14366
- *
14367
- * - it will execute after the function that scheduled the evaluation (preferably before DOM
14368
- * rendering).
14369
- * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after
14370
- * `expression` execution.
14371
- *
14372
- * Any exceptions from the execution of the expression are forwarded to the
14373
- * {@link ng.$exceptionHandler $exceptionHandler} service.
14374
- *
14375
- * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle
14376
- * will be scheduled. However, it is encouraged to always call code that changes the model
14377
- * from within an `$apply` call. That includes code evaluated via `$evalAsync`.
14378
- *
14379
- * @param {(string|function())=} expression An angular expression to be executed.
14380
- *
14381
- * - `string`: execute using the rules as defined in {@link guide/expression expression}.
14382
- * - `function(scope)`: execute the function with the current `scope` parameter.
14383
- *
14384
- */
14385
- $evalAsync: function(expr) {
14386
- // if we are outside of an $digest loop and this is the first time we are scheduling async
14387
- // task also schedule async auto-flush
14388
- if (!$rootScope.$$phase && !asyncQueue.length) {
14389
- $browser.defer(function() {
14390
- if (asyncQueue.length) {
14391
- $rootScope.$digest();
14392
- }
14393
- });
14394
- }
14395
-
14396
- asyncQueue.push({scope: this, expression: expr});
14397
- },
14398
-
14399
- $$postDigest: function(fn) {
14400
- postDigestQueue.push(fn);
14401
- },
14402
-
14403
- /**
14404
- * @ngdoc method
14405
- * @name $rootScope.Scope#$apply
14406
- * @kind function
14407
- *
14408
- * @description
14409
- * `$apply()` is used to execute an expression in angular from outside of the angular
14410
- * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).
14411
- * Because we are calling into the angular framework we need to perform proper scope life
14412
- * cycle of {@link ng.$exceptionHandler exception handling},
14413
- * {@link ng.$rootScope.Scope#$digest executing watches}.
14414
- *
14415
- * ## Life cycle
14416
- *
14417
- * # Pseudo-Code of `$apply()`
14418
- * ```js
14419
- function $apply(expr) {
14420
- try {
14421
- return $eval(expr);
14422
- } catch (e) {
14423
- $exceptionHandler(e);
14424
- } finally {
14425
- $root.$digest();
14426
- }
14427
- }
14428
- * ```
14429
- *
14430
- *
14431
- * Scope's `$apply()` method transitions through the following stages:
14432
- *
14433
- * 1. The {@link guide/expression expression} is executed using the
14434
- * {@link ng.$rootScope.Scope#$eval $eval()} method.
14435
- * 2. Any exceptions from the execution of the expression are forwarded to the
14436
- * {@link ng.$exceptionHandler $exceptionHandler} service.
14437
- * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the
14438
- * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.
14439
- *
14440
- *
14441
- * @param {(string|function())=} exp An angular expression to be executed.
14442
- *
14443
- * - `string`: execute using the rules as defined in {@link guide/expression expression}.
14444
- * - `function(scope)`: execute the function with current `scope` parameter.
14445
- *
14446
- * @returns {*} The result of evaluating the expression.
14447
- */
14448
- $apply: function(expr) {
14449
- try {
14450
- beginPhase('$apply');
14451
- return this.$eval(expr);
14452
- } catch (e) {
14453
- $exceptionHandler(e);
14454
- } finally {
14455
- clearPhase();
14456
- try {
14457
- $rootScope.$digest();
14458
- } catch (e) {
14459
- $exceptionHandler(e);
14460
- throw e;
14461
- }
14462
- }
14463
- },
14464
-
14465
- /**
14466
- * @ngdoc method
14467
- * @name $rootScope.Scope#$applyAsync
14468
- * @kind function
14469
- *
14470
- * @description
14471
- * Schedule the invokation of $apply to occur at a later time. The actual time difference
14472
- * varies across browsers, but is typically around ~10 milliseconds.
14473
- *
14474
- * This can be used to queue up multiple expressions which need to be evaluated in the same
14475
- * digest.
14476
- *
14477
- * @param {(string|function())=} exp An angular expression to be executed.
14478
- *
14479
- * - `string`: execute using the rules as defined in {@link guide/expression expression}.
14480
- * - `function(scope)`: execute the function with current `scope` parameter.
14481
- */
14482
- $applyAsync: function(expr) {
14483
- var scope = this;
14484
- expr && applyAsyncQueue.push($applyAsyncExpression);
14485
- scheduleApplyAsync();
14486
-
14487
- function $applyAsyncExpression() {
14488
- scope.$eval(expr);
14489
- }
14490
- },
14491
-
14492
- /**
14493
- * @ngdoc method
14494
- * @name $rootScope.Scope#$on
14495
- * @kind function
14496
- *
14497
- * @description
14498
- * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for
14499
- * discussion of event life cycle.
14500
- *
14501
- * The event listener function format is: `function(event, args...)`. The `event` object
14502
- * passed into the listener has the following attributes:
14503
- *
14504
- * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or
14505
- * `$broadcast`-ed.
14506
- * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the
14507
- * event propagates through the scope hierarchy, this property is set to null.
14508
- * - `name` - `{string}`: name of the event.
14509
- * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel
14510
- * further event propagation (available only for events that were `$emit`-ed).
14511
- * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag
14512
- * to true.
14513
- * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.
14514
- *
14515
- * @param {string} name Event name to listen on.
14516
- * @param {function(event, ...args)} listener Function to call when the event is emitted.
14517
- * @returns {function()} Returns a deregistration function for this listener.
14518
- */
14519
- $on: function(name, listener) {
14520
- var namedListeners = this.$$listeners[name];
14521
- if (!namedListeners) {
14522
- this.$$listeners[name] = namedListeners = [];
14523
- }
14524
- namedListeners.push(listener);
14525
-
14526
- var current = this;
14527
- do {
14528
- if (!current.$$listenerCount[name]) {
14529
- current.$$listenerCount[name] = 0;
14530
- }
14531
- current.$$listenerCount[name]++;
14532
- } while ((current = current.$parent));
14533
-
14534
- var self = this;
14535
- return function() {
14536
- var indexOfListener = namedListeners.indexOf(listener);
14537
- if (indexOfListener !== -1) {
14538
- namedListeners[indexOfListener] = null;
14539
- decrementListenerCount(self, 1, name);
14540
- }
14541
- };
14542
- },
14543
-
14544
-
14545
- /**
14546
- * @ngdoc method
14547
- * @name $rootScope.Scope#$emit
14548
- * @kind function
14549
- *
14550
- * @description
14551
- * Dispatches an event `name` upwards through the scope hierarchy notifying the
14552
- * registered {@link ng.$rootScope.Scope#$on} listeners.
14553
- *
14554
- * The event life cycle starts at the scope on which `$emit` was called. All
14555
- * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
14556
- * notified. Afterwards, the event traverses upwards toward the root scope and calls all
14557
- * registered listeners along the way. The event will stop propagating if one of the listeners
14558
- * cancels it.
14559
- *
14560
- * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
14561
- * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
14562
- *
14563
- * @param {string} name Event name to emit.
14564
- * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
14565
- * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).
14566
- */
14567
- $emit: function(name, args) {
14568
- var empty = [],
14569
- namedListeners,
14570
- scope = this,
14571
- stopPropagation = false,
14572
- event = {
14573
- name: name,
14574
- targetScope: scope,
14575
- stopPropagation: function() {stopPropagation = true;},
14576
- preventDefault: function() {
14577
- event.defaultPrevented = true;
14578
- },
14579
- defaultPrevented: false
14580
- },
14581
- listenerArgs = concat([event], arguments, 1),
14582
- i, length;
14583
-
14584
- do {
14585
- namedListeners = scope.$$listeners[name] || empty;
14586
- event.currentScope = scope;
14587
- for (i = 0, length = namedListeners.length; i < length; i++) {
14588
-
14589
- // if listeners were deregistered, defragment the array
14590
- if (!namedListeners[i]) {
14591
- namedListeners.splice(i, 1);
14592
- i--;
14593
- length--;
14594
- continue;
14595
- }
14596
- try {
14597
- //allow all listeners attached to the current scope to run
14598
- namedListeners[i].apply(null, listenerArgs);
14599
- } catch (e) {
14600
- $exceptionHandler(e);
14601
- }
14602
- }
14603
- //if any listener on the current scope stops propagation, prevent bubbling
14604
- if (stopPropagation) {
14605
- event.currentScope = null;
14606
- return event;
14607
- }
14608
- //traverse upwards
14609
- scope = scope.$parent;
14610
- } while (scope);
14611
-
14612
- event.currentScope = null;
14613
-
14614
- return event;
14615
- },
14616
-
14617
-
14618
- /**
14619
- * @ngdoc method
14620
- * @name $rootScope.Scope#$broadcast
14621
- * @kind function
14622
- *
14623
- * @description
14624
- * Dispatches an event `name` downwards to all child scopes (and their children) notifying the
14625
- * registered {@link ng.$rootScope.Scope#$on} listeners.
14626
- *
14627
- * The event life cycle starts at the scope on which `$broadcast` was called. All
14628
- * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
14629
- * notified. Afterwards, the event propagates to all direct and indirect scopes of the current
14630
- * scope and calls all registered listeners along the way. The event cannot be canceled.
14631
- *
14632
- * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
14633
- * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
14634
- *
14635
- * @param {string} name Event name to broadcast.
14636
- * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
14637
- * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}
14638
- */
14639
- $broadcast: function(name, args) {
14640
- var target = this,
14641
- current = target,
14642
- next = target,
14643
- event = {
14644
- name: name,
14645
- targetScope: target,
14646
- preventDefault: function() {
14647
- event.defaultPrevented = true;
14648
- },
14649
- defaultPrevented: false
14650
- };
14651
-
14652
- if (!target.$$listenerCount[name]) return event;
14653
-
14654
- var listenerArgs = concat([event], arguments, 1),
14655
- listeners, i, length;
14656
-
14657
- //down while you can, then up and next sibling or up and next sibling until back at root
14658
- while ((current = next)) {
14659
- event.currentScope = current;
14660
- listeners = current.$$listeners[name] || [];
14661
- for (i = 0, length = listeners.length; i < length; i++) {
14662
- // if listeners were deregistered, defragment the array
14663
- if (!listeners[i]) {
14664
- listeners.splice(i, 1);
14665
- i--;
14666
- length--;
14667
- continue;
14668
- }
14669
-
14670
- try {
14671
- listeners[i].apply(null, listenerArgs);
14672
- } catch (e) {
14673
- $exceptionHandler(e);
14674
- }
14675
- }
14676
-
14677
- // Insanity Warning: scope depth-first traversal
14678
- // yes, this code is a bit crazy, but it works and we have tests to prove it!
14679
- // this piece should be kept in sync with the traversal in $digest
14680
- // (though it differs due to having the extra check for $$listenerCount)
14681
- if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||
14682
- (current !== target && current.$$nextSibling)))) {
14683
- while (current !== target && !(next = current.$$nextSibling)) {
14684
- current = current.$parent;
14685
- }
14686
- }
14687
- }
14688
-
14689
- event.currentScope = null;
14690
- return event;
14691
- }
14692
- };
14693
-
14694
- var $rootScope = new Scope();
14695
-
14696
- //The internal queues. Expose them on the $rootScope for debugging/testing purposes.
14697
- var asyncQueue = $rootScope.$$asyncQueue = [];
14698
- var postDigestQueue = $rootScope.$$postDigestQueue = [];
14699
- var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];
14700
-
14701
- return $rootScope;
14702
-
14703
-
14704
- function beginPhase(phase) {
14705
- if ($rootScope.$$phase) {
14706
- throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);
14707
- }
14708
-
14709
- $rootScope.$$phase = phase;
14710
- }
14711
-
14712
- function clearPhase() {
14713
- $rootScope.$$phase = null;
14714
- }
14715
-
14716
-
14717
- function decrementListenerCount(current, count, name) {
14718
- do {
14719
- current.$$listenerCount[name] -= count;
14720
-
14721
- if (current.$$listenerCount[name] === 0) {
14722
- delete current.$$listenerCount[name];
14723
- }
14724
- } while ((current = current.$parent));
14725
- }
14726
-
14727
- /**
14728
- * function used as an initial value for watchers.
14729
- * because it's unique we can easily tell it apart from other values
14730
- */
14731
- function initWatchVal() {}
14732
-
14733
- function flushApplyAsync() {
14734
- while (applyAsyncQueue.length) {
14735
- try {
14736
- applyAsyncQueue.shift()();
14737
- } catch (e) {
14738
- $exceptionHandler(e);
14739
- }
14740
- }
14741
- applyAsyncId = null;
14742
- }
14743
-
14744
- function scheduleApplyAsync() {
14745
- if (applyAsyncId === null) {
14746
- applyAsyncId = $browser.defer(function() {
14747
- $rootScope.$apply(flushApplyAsync);
14748
- });
14749
- }
14750
- }
14751
- }];
14752
-}
14753
-
14754
-/**
14755
- * @description
14756
- * Private service to sanitize uris for links and images. Used by $compile and $sanitize.
14757
- */
14758
-function $$SanitizeUriProvider() {
14759
- var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/,
14760
- imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/;
14761
-
14762
- /**
14763
- * @description
14764
- * Retrieves or overrides the default regular expression that is used for whitelisting of safe
14765
- * urls during a[href] sanitization.
14766
- *
14767
- * The sanitization is a security measure aimed at prevent XSS attacks via html links.
14768
- *
14769
- * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
14770
- * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
14771
- * regular expression. If a match is found, the original url is written into the dom. Otherwise,
14772
- * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
14773
- *
14774
- * @param {RegExp=} regexp New regexp to whitelist urls with.
14775
- * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
14776
- * chaining otherwise.
14777
- */
14778
- this.aHrefSanitizationWhitelist = function(regexp) {
14779
- if (isDefined(regexp)) {
14780
- aHrefSanitizationWhitelist = regexp;
14781
- return this;
14782
- }
14783
- return aHrefSanitizationWhitelist;
14784
- };
14785
-
14786
-
14787
- /**
14788
- * @description
14789
- * Retrieves or overrides the default regular expression that is used for whitelisting of safe
14790
- * urls during img[src] sanitization.
14791
- *
14792
- * The sanitization is a security measure aimed at prevent XSS attacks via html links.
14793
- *
14794
- * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
14795
- * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
14796
- * regular expression. If a match is found, the original url is written into the dom. Otherwise,
14797
- * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
14798
- *
14799
- * @param {RegExp=} regexp New regexp to whitelist urls with.
14800
- * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
14801
- * chaining otherwise.
14802
- */
14803
- this.imgSrcSanitizationWhitelist = function(regexp) {
14804
- if (isDefined(regexp)) {
14805
- imgSrcSanitizationWhitelist = regexp;
14806
- return this;
14807
- }
14808
- return imgSrcSanitizationWhitelist;
14809
- };
14810
-
14811
- this.$get = function() {
14812
- return function sanitizeUri(uri, isImage) {
14813
- var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;
14814
- var normalizedVal;
14815
- normalizedVal = urlResolve(uri).href;
14816
- if (normalizedVal !== '' && !normalizedVal.match(regex)) {
14817
- return 'unsafe:' + normalizedVal;
14818
- }
14819
- return uri;
14820
- };
14821
- };
14822
-}
14823
-
14824
-var $sceMinErr = minErr('$sce');
14825
-
14826
-var SCE_CONTEXTS = {
14827
- HTML: 'html',
14828
- CSS: 'css',
14829
- URL: 'url',
14830
- // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a
14831
- // url. (e.g. ng-include, script src, templateUrl)
14832
- RESOURCE_URL: 'resourceUrl',
14833
- JS: 'js'
14834
-};
14835
-
14836
-// Helper functions follow.
14837
-
14838
-function adjustMatcher(matcher) {
14839
- if (matcher === 'self') {
14840
- return matcher;
14841
- } else if (isString(matcher)) {
14842
- // Strings match exactly except for 2 wildcards - '*' and '**'.
14843
- // '*' matches any character except those from the set ':/.?&'.
14844
- // '**' matches any character (like .* in a RegExp).
14845
- // More than 2 *'s raises an error as it's ill defined.
14846
- if (matcher.indexOf('***') > -1) {
14847
- throw $sceMinErr('iwcard',
14848
- 'Illegal sequence *** in string matcher. String: {0}', matcher);
14849
- }
14850
- matcher = escapeForRegexp(matcher).
14851
- replace('\\*\\*', '.*').
14852
- replace('\\*', '[^:/.?&;]*');
14853
- return new RegExp('^' + matcher + '$');
14854
- } else if (isRegExp(matcher)) {
14855
- // The only other type of matcher allowed is a Regexp.
14856
- // Match entire URL / disallow partial matches.
14857
- // Flags are reset (i.e. no global, ignoreCase or multiline)
14858
- return new RegExp('^' + matcher.source + '$');
14859
- } else {
14860
- throw $sceMinErr('imatcher',
14861
- 'Matchers may only be "self", string patterns or RegExp objects');
14862
- }
14863
-}
14864
-
14865
-
14866
-function adjustMatchers(matchers) {
14867
- var adjustedMatchers = [];
14868
- if (isDefined(matchers)) {
14869
- forEach(matchers, function(matcher) {
14870
- adjustedMatchers.push(adjustMatcher(matcher));
14871
- });
14872
- }
14873
- return adjustedMatchers;
14874
-}
14875
-
14876
-
14877
-/**
14878
- * @ngdoc service
14879
- * @name $sceDelegate
14880
- * @kind function
14881
- *
14882
- * @description
14883
- *
14884
- * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict
14885
- * Contextual Escaping (SCE)} services to AngularJS.
14886
- *
14887
- * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of
14888
- * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is
14889
- * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to
14890
- * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things
14891
- * work because `$sce` delegates to `$sceDelegate` for these operations.
14892
- *
14893
- * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.
14894
- *
14895
- * The default instance of `$sceDelegate` should work out of the box with little pain. While you
14896
- * can override it completely to change the behavior of `$sce`, the common case would
14897
- * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting
14898
- * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as
14899
- * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist
14900
- * $sceDelegateProvider.resourceUrlWhitelist} and {@link
14901
- * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
14902
- */
14903
-
14904
-/**
14905
- * @ngdoc provider
14906
- * @name $sceDelegateProvider
14907
- * @description
14908
- *
14909
- * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate
14910
- * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure
14911
- * that the URLs used for sourcing Angular templates are safe. Refer {@link
14912
- * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and
14913
- * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
14914
- *
14915
- * For the general details about this service in Angular, read the main page for {@link ng.$sce
14916
- * Strict Contextual Escaping (SCE)}.
14917
- *
14918
- * **Example**: Consider the following case. <a name="example"></a>
14919
- *
14920
- * - your app is hosted at url `http://myapp.example.com/`
14921
- * - but some of your templates are hosted on other domains you control such as
14922
- * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.
14923
- * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.
14924
- *
14925
- * Here is what a secure configuration for this scenario might look like:
14926
- *
14927
- * ```
14928
- * angular.module('myApp', []).config(function($sceDelegateProvider) {
14929
- * $sceDelegateProvider.resourceUrlWhitelist([
14930
- * // Allow same origin resource loads.
14931
- * 'self',
14932
- * // Allow loading from our assets domain. Notice the difference between * and **.
14933
- * 'http://srv*.assets.example.com/**'
14934
- * ]);
14935
- *
14936
- * // The blacklist overrides the whitelist so the open redirect here is blocked.
14937
- * $sceDelegateProvider.resourceUrlBlacklist([
14938
- * 'http://myapp.example.com/clickThru**'
14939
- * ]);
14940
- * });
14941
- * ```
14942
- */
14943
-
14944
-function $SceDelegateProvider() {
14945
- this.SCE_CONTEXTS = SCE_CONTEXTS;
14946
-
14947
- // Resource URLs can also be trusted by policy.
14948
- var resourceUrlWhitelist = ['self'],
14949
- resourceUrlBlacklist = [];
14950
-
14951
- /**
14952
- * @ngdoc method
14953
- * @name $sceDelegateProvider#resourceUrlWhitelist
14954
- * @kind function
14955
- *
14956
- * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value
14957
- * provided. This must be an array or null. A snapshot of this array is used so further
14958
- * changes to the array are ignored.
14959
- *
14960
- * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
14961
- * allowed in this array.
14962
- *
14963
- * Note: **an empty whitelist array will block all URLs**!
14964
- *
14965
- * @return {Array} the currently set whitelist array.
14966
- *
14967
- * The **default value** when no whitelist has been explicitly set is `['self']` allowing only
14968
- * same origin resource requests.
14969
- *
14970
- * @description
14971
- * Sets/Gets the whitelist of trusted resource URLs.
14972
- */
14973
- this.resourceUrlWhitelist = function(value) {
14974
- if (arguments.length) {
14975
- resourceUrlWhitelist = adjustMatchers(value);
14976
- }
14977
- return resourceUrlWhitelist;
14978
- };
14979
-
14980
- /**
14981
- * @ngdoc method
14982
- * @name $sceDelegateProvider#resourceUrlBlacklist
14983
- * @kind function
14984
- *
14985
- * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value
14986
- * provided. This must be an array or null. A snapshot of this array is used so further
14987
- * changes to the array are ignored.
14988
- *
14989
- * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
14990
- * allowed in this array.
14991
- *
14992
- * The typical usage for the blacklist is to **block
14993
- * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as
14994
- * these would otherwise be trusted but actually return content from the redirected domain.
14995
- *
14996
- * Finally, **the blacklist overrides the whitelist** and has the final say.
14997
- *
14998
- * @return {Array} the currently set blacklist array.
14999
- *
15000
- * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there
15001
- * is no blacklist.)
15002
- *
15003
- * @description
15004
- * Sets/Gets the blacklist of trusted resource URLs.
15005
- */
15006
-
15007
- this.resourceUrlBlacklist = function(value) {
15008
- if (arguments.length) {
15009
- resourceUrlBlacklist = adjustMatchers(value);
15010
- }
15011
- return resourceUrlBlacklist;
15012
- };
15013
-
15014
- this.$get = ['$injector', function($injector) {
15015
-
15016
- var htmlSanitizer = function htmlSanitizer(html) {
15017
- throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
15018
- };
15019
-
15020
- if ($injector.has('$sanitize')) {
15021
- htmlSanitizer = $injector.get('$sanitize');
15022
- }
15023
-
15024
-
15025
- function matchUrl(matcher, parsedUrl) {
15026
- if (matcher === 'self') {
15027
- return urlIsSameOrigin(parsedUrl);
15028
- } else {
15029
- // definitely a regex. See adjustMatchers()
15030
- return !!matcher.exec(parsedUrl.href);
15031
- }
15032
- }
15033
-
15034
- function isResourceUrlAllowedByPolicy(url) {
15035
- var parsedUrl = urlResolve(url.toString());
15036
- var i, n, allowed = false;
15037
- // Ensure that at least one item from the whitelist allows this url.
15038
- for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {
15039
- if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {
15040
- allowed = true;
15041
- break;
15042
- }
15043
- }
15044
- if (allowed) {
15045
- // Ensure that no item from the blacklist blocked this url.
15046
- for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {
15047
- if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {
15048
- allowed = false;
15049
- break;
15050
- }
15051
- }
15052
- }
15053
- return allowed;
15054
- }
15055
-
15056
- function generateHolderType(Base) {
15057
- var holderType = function TrustedValueHolderType(trustedValue) {
15058
- this.$$unwrapTrustedValue = function() {
15059
- return trustedValue;
15060
- };
15061
- };
15062
- if (Base) {
15063
- holderType.prototype = new Base();
15064
- }
15065
- holderType.prototype.valueOf = function sceValueOf() {
15066
- return this.$$unwrapTrustedValue();
15067
- };
15068
- holderType.prototype.toString = function sceToString() {
15069
- return this.$$unwrapTrustedValue().toString();
15070
- };
15071
- return holderType;
15072
- }
15073
-
15074
- var trustedValueHolderBase = generateHolderType(),
15075
- byType = {};
15076
-
15077
- byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);
15078
- byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);
15079
- byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);
15080
- byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);
15081
- byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);
15082
-
15083
- /**
15084
- * @ngdoc method
15085
- * @name $sceDelegate#trustAs
15086
- *
15087
- * @description
15088
- * Returns an object that is trusted by angular for use in specified strict
15089
- * contextual escaping contexts (such as ng-bind-html, ng-include, any src
15090
- * attribute interpolation, any dom event binding attribute interpolation
15091
- * such as for onclick, etc.) that uses the provided value.
15092
- * See {@link ng.$sce $sce} for enabling strict contextual escaping.
15093
- *
15094
- * @param {string} type The kind of context in which this value is safe for use. e.g. url,
15095
- * resourceUrl, html, js and css.
15096
- * @param {*} value The value that that should be considered trusted/safe.
15097
- * @returns {*} A value that can be used to stand in for the provided `value` in places
15098
- * where Angular expects a $sce.trustAs() return value.
15099
- */
15100
- function trustAs(type, trustedValue) {
15101
- var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
15102
- if (!Constructor) {
15103
- throw $sceMinErr('icontext',
15104
- 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',
15105
- type, trustedValue);
15106
- }
15107
- if (trustedValue === null || trustedValue === undefined || trustedValue === '') {
15108
- return trustedValue;
15109
- }
15110
- // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting
15111
- // mutable objects, we ensure here that the value passed in is actually a string.
15112
- if (typeof trustedValue !== 'string') {
15113
- throw $sceMinErr('itype',
15114
- 'Attempted to trust a non-string value in a content requiring a string: Context: {0}',
15115
- type);
15116
- }
15117
- return new Constructor(trustedValue);
15118
- }
15119
-
15120
- /**
15121
- * @ngdoc method
15122
- * @name $sceDelegate#valueOf
15123
- *
15124
- * @description
15125
- * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs
15126
- * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link
15127
- * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.
15128
- *
15129
- * If the passed parameter is not a value that had been returned by {@link
15130
- * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.
15131
- *
15132
- * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}
15133
- * call or anything else.
15134
- * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs
15135
- * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns
15136
- * `value` unchanged.
15137
- */
15138
- function valueOf(maybeTrusted) {
15139
- if (maybeTrusted instanceof trustedValueHolderBase) {
15140
- return maybeTrusted.$$unwrapTrustedValue();
15141
- } else {
15142
- return maybeTrusted;
15143
- }
15144
- }
15145
-
15146
- /**
15147
- * @ngdoc method
15148
- * @name $sceDelegate#getTrusted
15149
- *
15150
- * @description
15151
- * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and
15152
- * returns the originally supplied value if the queried context type is a supertype of the
15153
- * created type. If this condition isn't satisfied, throws an exception.
15154
- *
15155
- * @param {string} type The kind of context in which this value is to be used.
15156
- * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs
15157
- * `$sceDelegate.trustAs`} call.
15158
- * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs
15159
- * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception.
15160
- */
15161
- function getTrusted(type, maybeTrusted) {
15162
- if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') {
15163
- return maybeTrusted;
15164
- }
15165
- var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
15166
- if (constructor && maybeTrusted instanceof constructor) {
15167
- return maybeTrusted.$$unwrapTrustedValue();
15168
- }
15169
- // If we get here, then we may only take one of two actions.
15170
- // 1. sanitize the value for the requested type, or
15171
- // 2. throw an exception.
15172
- if (type === SCE_CONTEXTS.RESOURCE_URL) {
15173
- if (isResourceUrlAllowedByPolicy(maybeTrusted)) {
15174
- return maybeTrusted;
15175
- } else {
15176
- throw $sceMinErr('insecurl',
15177
- 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}',
15178
- maybeTrusted.toString());
15179
- }
15180
- } else if (type === SCE_CONTEXTS.HTML) {
15181
- return htmlSanitizer(maybeTrusted);
15182
- }
15183
- throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
15184
- }
15185
-
15186
- return { trustAs: trustAs,
15187
- getTrusted: getTrusted,
15188
- valueOf: valueOf };
15189
- }];
15190
-}
15191
-
15192
-
15193
-/**
15194
- * @ngdoc provider
15195
- * @name $sceProvider
15196
- * @description
15197
- *
15198
- * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.
15199
- * - enable/disable Strict Contextual Escaping (SCE) in a module
15200
- * - override the default implementation with a custom delegate
15201
- *
15202
- * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.
15203
- */
15204
-
15205
-/* jshint maxlen: false*/
15206
-
15207
-/**
15208
- * @ngdoc service
15209
- * @name $sce
15210
- * @kind function
15211
- *
15212
- * @description
15213
- *
15214
- * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.
15215
- *
15216
- * # Strict Contextual Escaping
15217
- *
15218
- * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain
15219
- * contexts to result in a value that is marked as safe to use for that context. One example of
15220
- * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer
15221
- * to these contexts as privileged or SCE contexts.
15222
- *
15223
- * As of version 1.2, Angular ships with SCE enabled by default.
15224
- *
15225
- * Note: When enabled (the default), IE<11 in quirks mode is not supported. In this mode, IE<11 allow
15226
- * one to execute arbitrary javascript by the use of the expression() syntax. Refer
15227
- * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.
15228
- * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`
15229
- * to the top of your HTML document.
15230
- *
15231
- * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for
15232
- * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.
15233
- *
15234
- * Here's an example of a binding in a privileged context:
15235
- *
15236
- * ```
15237
- * <input ng-model="userHtml">
15238
- * <div ng-bind-html="userHtml"></div>
15239
- * ```
15240
- *
15241
- * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE
15242
- * disabled, this application allows the user to render arbitrary HTML into the DIV.
15243
- * In a more realistic example, one may be rendering user comments, blog articles, etc. via
15244
- * bindings. (HTML is just one example of a context where rendering user controlled input creates
15245
- * security vulnerabilities.)
15246
- *
15247
- * For the case of HTML, you might use a library, either on the client side, or on the server side,
15248
- * to sanitize unsafe HTML before binding to the value and rendering it in the document.
15249
- *
15250
- * How would you ensure that every place that used these types of bindings was bound to a value that
15251
- * was sanitized by your library (or returned as safe for rendering by your server?) How can you
15252
- * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some
15253
- * properties/fields and forgot to update the binding to the sanitized value?
15254
- *
15255
- * To be secure by default, you want to ensure that any such bindings are disallowed unless you can
15256
- * determine that something explicitly says it's safe to use a value for binding in that
15257
- * context. You can then audit your code (a simple grep would do) to ensure that this is only done
15258
- * for those values that you can easily tell are safe - because they were received from your server,
15259
- * sanitized by your library, etc. You can organize your codebase to help with this - perhaps
15260
- * allowing only the files in a specific directory to do this. Ensuring that the internal API
15261
- * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.
15262
- *
15263
- * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}
15264
- * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to
15265
- * obtain values that will be accepted by SCE / privileged contexts.
15266
- *
15267
- *
15268
- * ## How does it work?
15269
- *
15270
- * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted
15271
- * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link
15272
- * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the
15273
- * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.
15274
- *
15275
- * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link
15276
- * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly
15277
- * simplified):
15278
- *
15279
- * ```
15280
- * var ngBindHtmlDirective = ['$sce', function($sce) {
15281
- * return function(scope, element, attr) {
15282
- * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
15283
- * element.html(value || '');
15284
- * });
15285
- * };
15286
- * }];
15287
- * ```
15288
- *
15289
- * ## Impact on loading templates
15290
- *
15291
- * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as
15292
- * `templateUrl`'s specified by {@link guide/directive directives}.
15293
- *
15294
- * By default, Angular only loads templates from the same domain and protocol as the application
15295
- * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl
15296
- * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or
15297
- * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist
15298
- * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.
15299
- *
15300
- * *Please note*:
15301
- * The browser's
15302
- * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
15303
- * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
15304
- * policy apply in addition to this and may further restrict whether the template is successfully
15305
- * loaded. This means that without the right CORS policy, loading templates from a different domain
15306
- * won't work on all browsers. Also, loading templates from `file://` URL does not work on some
15307
- * browsers.
15308
- *
15309
- * ## This feels like too much overhead
15310
- *
15311
- * It's important to remember that SCE only applies to interpolation expressions.
15312
- *
15313
- * If your expressions are constant literals, they're automatically trusted and you don't need to
15314
- * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.
15315
- * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works.
15316
- *
15317
- * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them
15318
- * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here.
15319
- *
15320
- * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load
15321
- * templates in `ng-include` from your application's domain without having to even know about SCE.
15322
- * It blocks loading templates from other domains or loading templates over http from an https
15323
- * served document. You can change these by setting your own custom {@link
15324
- * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link
15325
- * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.
15326
- *
15327
- * This significantly reduces the overhead. It is far easier to pay the small overhead and have an
15328
- * application that's secure and can be audited to verify that with much more ease than bolting
15329
- * security onto an application later.
15330
- *
15331
- * <a name="contexts"></a>
15332
- * ## What trusted context types are supported?
15333
- *
15334
- * | Context | Notes |
15335
- * |---------------------|----------------|
15336
- * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |
15337
- * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. |
15338
- * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |
15339
- * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |
15340
- * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. |
15341
- *
15342
- * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a>
15343
- *
15344
- * Each element in these arrays must be one of the following:
15345
- *
15346
- * - **'self'**
15347
- * - The special **string**, `'self'`, can be used to match against all URLs of the **same
15348
- * domain** as the application document using the **same protocol**.
15349
- * - **String** (except the special value `'self'`)
15350
- * - The string is matched against the full *normalized / absolute URL* of the resource
15351
- * being tested (substring matches are not good enough.)
15352
- * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters
15353
- * match themselves.
15354
- * - `*`: matches zero or more occurrences of any character other than one of the following 6
15355
- * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use
15356
- * in a whitelist.
15357
- * - `**`: matches zero or more occurrences of *any* character. As such, it's not
15358
- * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g.
15359
- * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might
15360
- * not have been the intention.) Its usage at the very end of the path is ok. (e.g.
15361
- * http://foo.example.com/templates/**).
15362
- * - **RegExp** (*see caveat below*)
15363
- * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax
15364
- * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to
15365
- * accidentally introduce a bug when one updates a complex expression (imho, all regexes should
15366
- * have good test coverage.). For instance, the use of `.` in the regex is correct only in a
15367
- * small number of cases. A `.` character in the regex used when matching the scheme or a
15368
- * subdomain could be matched against a `:` or literal `.` that was likely not intended. It
15369
- * is highly recommended to use the string patterns and only fall back to regular expressions
15370
- * if they as a last resort.
15371
- * - The regular expression must be an instance of RegExp (i.e. not a string.) It is
15372
- * matched against the **entire** *normalized / absolute URL* of the resource being tested
15373
- * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags
15374
- * present on the RegExp (such as multiline, global, ignoreCase) are ignored.
15375
- * - If you are generating your JavaScript from some other templating engine (not
15376
- * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),
15377
- * remember to escape your regular expression (and be aware that you might need more than
15378
- * one level of escaping depending on your templating engine and the way you interpolated
15379
- * the value.) Do make use of your platform's escaping mechanism as it might be good
15380
- * enough before coding your own. e.g. Ruby has
15381
- * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)
15382
- * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).
15383
- * Javascript lacks a similar built in function for escaping. Take a look at Google
15384
- * Closure library's [goog.string.regExpEscape(s)](
15385
- * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).
15386
- *
15387
- * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.
15388
- *
15389
- * ## Show me an example using SCE.
15390
- *
15391
- * <example module="mySceApp" deps="angular-sanitize.js">
15392
- * <file name="index.html">
15393
- * <div ng-controller="AppController as myCtrl">
15394
- * <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br>
15395
- * <b>User comments</b><br>
15396
- * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when
15397
- * $sanitize is available. If $sanitize isn't available, this results in an error instead of an
15398
- * exploit.
15399
- * <div class="well">
15400
- * <div ng-repeat="userComment in myCtrl.userComments">
15401
- * <b>{{userComment.name}}</b>:
15402
- * <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span>
15403
- * <br>
15404
- * </div>
15405
- * </div>
15406
- * </div>
15407
- * </file>
15408
- *
15409
- * <file name="script.js">
15410
- * angular.module('mySceApp', ['ngSanitize'])
15411
- * .controller('AppController', ['$http', '$templateCache', '$sce',
15412
- * function($http, $templateCache, $sce) {
15413
- * var self = this;
15414
- * $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) {
15415
- * self.userComments = userComments;
15416
- * });
15417
- * self.explicitlyTrustedHtml = $sce.trustAsHtml(
15418
- * '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
15419
- * 'sanitization.&quot;">Hover over this text.</span>');
15420
- * }]);
15421
- * </file>
15422
- *
15423
- * <file name="test_data.json">
15424
- * [
15425
- * { "name": "Alice",
15426
- * "htmlComment":
15427
- * "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>"
15428
- * },
15429
- * { "name": "Bob",
15430
- * "htmlComment": "<i>Yes!</i> Am I the only other one?"
15431
- * }
15432
- * ]
15433
- * </file>
15434
- *
15435
- * <file name="protractor.js" type="protractor">
15436
- * describe('SCE doc demo', function() {
15437
- * it('should sanitize untrusted values', function() {
15438
- * expect(element.all(by.css('.htmlComment')).first().getInnerHtml())
15439
- * .toBe('<span>Is <i>anyone</i> reading this?</span>');
15440
- * });
15441
- *
15442
- * it('should NOT sanitize explicitly trusted values', function() {
15443
- * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(
15444
- * '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
15445
- * 'sanitization.&quot;">Hover over this text.</span>');
15446
- * });
15447
- * });
15448
- * </file>
15449
- * </example>
15450
- *
15451
- *
15452
- *
15453
- * ## Can I disable SCE completely?
15454
- *
15455
- * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits
15456
- * for little coding overhead. It will be much harder to take an SCE disabled application and
15457
- * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE
15458
- * for cases where you have a lot of existing code that was written before SCE was introduced and
15459
- * you're migrating them a module at a time.
15460
- *
15461
- * That said, here's how you can completely disable SCE:
15462
- *
15463
- * ```
15464
- * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
15465
- * // Completely disable SCE. For demonstration purposes only!
15466
- * // Do not use in new projects.
15467
- * $sceProvider.enabled(false);
15468
- * });
15469
- * ```
15470
- *
15471
- */
15472
-/* jshint maxlen: 100 */
15473
-
15474
-function $SceProvider() {
15475
- var enabled = true;
15476
-
15477
- /**
15478
- * @ngdoc method
15479
- * @name $sceProvider#enabled
15480
- * @kind function
15481
- *
15482
- * @param {boolean=} value If provided, then enables/disables SCE.
15483
- * @return {boolean} true if SCE is enabled, false otherwise.
15484
- *
15485
- * @description
15486
- * Enables/disables SCE and returns the current value.
15487
- */
15488
- this.enabled = function(value) {
15489
- if (arguments.length) {
15490
- enabled = !!value;
15491
- }
15492
- return enabled;
15493
- };
15494
-
15495
-
15496
- /* Design notes on the default implementation for SCE.
15497
- *
15498
- * The API contract for the SCE delegate
15499
- * -------------------------------------
15500
- * The SCE delegate object must provide the following 3 methods:
15501
- *
15502
- * - trustAs(contextEnum, value)
15503
- * This method is used to tell the SCE service that the provided value is OK to use in the
15504
- * contexts specified by contextEnum. It must return an object that will be accepted by
15505
- * getTrusted() for a compatible contextEnum and return this value.
15506
- *
15507
- * - valueOf(value)
15508
- * For values that were not produced by trustAs(), return them as is. For values that were
15509
- * produced by trustAs(), return the corresponding input value to trustAs. Basically, if
15510
- * trustAs is wrapping the given values into some type, this operation unwraps it when given
15511
- * such a value.
15512
- *
15513
- * - getTrusted(contextEnum, value)
15514
- * This function should return the a value that is safe to use in the context specified by
15515
- * contextEnum or throw and exception otherwise.
15516
- *
15517
- * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be
15518
- * opaque or wrapped in some holder object. That happens to be an implementation detail. For
15519
- * instance, an implementation could maintain a registry of all trusted objects by context. In
15520
- * such a case, trustAs() would return the same object that was passed in. getTrusted() would
15521
- * return the same object passed in if it was found in the registry under a compatible context or
15522
- * throw an exception otherwise. An implementation might only wrap values some of the time based
15523
- * on some criteria. getTrusted() might return a value and not throw an exception for special
15524
- * constants or objects even if not wrapped. All such implementations fulfill this contract.
15525
- *
15526
- *
15527
- * A note on the inheritance model for SCE contexts
15528
- * ------------------------------------------------
15529
- * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This
15530
- * is purely an implementation details.
15531
- *
15532
- * The contract is simply this:
15533
- *
15534
- * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)
15535
- * will also succeed.
15536
- *
15537
- * Inheritance happens to capture this in a natural way. In some future, we
15538
- * may not use inheritance anymore. That is OK because no code outside of
15539
- * sce.js and sceSpecs.js would need to be aware of this detail.
15540
- */
15541
-
15542
- this.$get = ['$parse', '$sceDelegate', function(
15543
- $parse, $sceDelegate) {
15544
- // Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow
15545
- // the "expression(javascript expression)" syntax which is insecure.
15546
- if (enabled && msie < 8) {
15547
- throw $sceMinErr('iequirks',
15548
- 'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' +
15549
- 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' +
15550
- 'document. See http://docs.angularjs.org/api/ng.$sce for more information.');
15551
- }
15552
-
15553
- var sce = shallowCopy(SCE_CONTEXTS);
15554
-
15555
- /**
15556
- * @ngdoc method
15557
- * @name $sce#isEnabled
15558
- * @kind function
15559
- *
15560
- * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you
15561
- * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.
15562
- *
15563
- * @description
15564
- * Returns a boolean indicating if SCE is enabled.
15565
- */
15566
- sce.isEnabled = function() {
15567
- return enabled;
15568
- };
15569
- sce.trustAs = $sceDelegate.trustAs;
15570
- sce.getTrusted = $sceDelegate.getTrusted;
15571
- sce.valueOf = $sceDelegate.valueOf;
15572
-
15573
- if (!enabled) {
15574
- sce.trustAs = sce.getTrusted = function(type, value) { return value; };
15575
- sce.valueOf = identity;
15576
- }
15577
-
15578
- /**
15579
- * @ngdoc method
15580
- * @name $sce#parseAs
15581
- *
15582
- * @description
15583
- * Converts Angular {@link guide/expression expression} into a function. This is like {@link
15584
- * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it
15585
- * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,
15586
- * *result*)}
15587
- *
15588
- * @param {string} type The kind of SCE context in which this result will be used.
15589
- * @param {string} expression String expression to compile.
15590
- * @returns {function(context, locals)} a function which represents the compiled expression:
15591
- *
15592
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
15593
- * are evaluated against (typically a scope object).
15594
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15595
- * `context`.
15596
- */
15597
- sce.parseAs = function sceParseAs(type, expr) {
15598
- var parsed = $parse(expr);
15599
- if (parsed.literal && parsed.constant) {
15600
- return parsed;
15601
- } else {
15602
- return $parse(expr, function(value) {
15603
- return sce.getTrusted(type, value);
15604
- });
15605
- }
15606
- };
15607
-
15608
- /**
15609
- * @ngdoc method
15610
- * @name $sce#trustAs
15611
- *
15612
- * @description
15613
- * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such,
15614
- * returns an object that is trusted by angular for use in specified strict contextual
15615
- * escaping contexts (such as ng-bind-html, ng-include, any src attribute
15616
- * interpolation, any dom event binding attribute interpolation such as for onclick, etc.)
15617
- * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual
15618
- * escaping.
15619
- *
15620
- * @param {string} type The kind of context in which this value is safe for use. e.g. url,
15621
- * resource_url, html, js and css.
15622
- * @param {*} value The value that that should be considered trusted/safe.
15623
- * @returns {*} A value that can be used to stand in for the provided `value` in places
15624
- * where Angular expects a $sce.trustAs() return value.
15625
- */
15626
-
15627
- /**
15628
- * @ngdoc method
15629
- * @name $sce#trustAsHtml
15630
- *
15631
- * @description
15632
- * Shorthand method. `$sce.trustAsHtml(value)` →
15633
- * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}
15634
- *
15635
- * @param {*} value The value to trustAs.
15636
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml
15637
- * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives
15638
- * only accept expressions that are either literal constants or are the
15639
- * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
15640
- */
15641
-
15642
- /**
15643
- * @ngdoc method
15644
- * @name $sce#trustAsUrl
15645
- *
15646
- * @description
15647
- * Shorthand method. `$sce.trustAsUrl(value)` →
15648
- * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}
15649
- *
15650
- * @param {*} value The value to trustAs.
15651
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl
15652
- * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives
15653
- * only accept expressions that are either literal constants or are the
15654
- * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
15655
- */
15656
-
15657
- /**
15658
- * @ngdoc method
15659
- * @name $sce#trustAsResourceUrl
15660
- *
15661
- * @description
15662
- * Shorthand method. `$sce.trustAsResourceUrl(value)` →
15663
- * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}
15664
- *
15665
- * @param {*} value The value to trustAs.
15666
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl
15667
- * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives
15668
- * only accept expressions that are either literal constants or are the return
15669
- * value of {@link ng.$sce#trustAs $sce.trustAs}.)
15670
- */
15671
-
15672
- /**
15673
- * @ngdoc method
15674
- * @name $sce#trustAsJs
15675
- *
15676
- * @description
15677
- * Shorthand method. `$sce.trustAsJs(value)` →
15678
- * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}
15679
- *
15680
- * @param {*} value The value to trustAs.
15681
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs
15682
- * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives
15683
- * only accept expressions that are either literal constants or are the
15684
- * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
15685
- */
15686
-
15687
- /**
15688
- * @ngdoc method
15689
- * @name $sce#getTrusted
15690
- *
15691
- * @description
15692
- * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such,
15693
- * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the
15694
- * originally supplied value if the queried context type is a supertype of the created type.
15695
- * If this condition isn't satisfied, throws an exception.
15696
- *
15697
- * @param {string} type The kind of context in which this value is to be used.
15698
- * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}
15699
- * call.
15700
- * @returns {*} The value the was originally provided to
15701
- * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.
15702
- * Otherwise, throws an exception.
15703
- */
15704
-
15705
- /**
15706
- * @ngdoc method
15707
- * @name $sce#getTrustedHtml
15708
- *
15709
- * @description
15710
- * Shorthand method. `$sce.getTrustedHtml(value)` →
15711
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}
15712
- *
15713
- * @param {*} value The value to pass to `$sce.getTrusted`.
15714
- * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`
15715
- */
15716
-
15717
- /**
15718
- * @ngdoc method
15719
- * @name $sce#getTrustedCss
15720
- *
15721
- * @description
15722
- * Shorthand method. `$sce.getTrustedCss(value)` →
15723
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}
15724
- *
15725
- * @param {*} value The value to pass to `$sce.getTrusted`.
15726
- * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`
15727
- */
15728
-
15729
- /**
15730
- * @ngdoc method
15731
- * @name $sce#getTrustedUrl
15732
- *
15733
- * @description
15734
- * Shorthand method. `$sce.getTrustedUrl(value)` →
15735
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}
15736
- *
15737
- * @param {*} value The value to pass to `$sce.getTrusted`.
15738
- * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`
15739
- */
15740
-
15741
- /**
15742
- * @ngdoc method
15743
- * @name $sce#getTrustedResourceUrl
15744
- *
15745
- * @description
15746
- * Shorthand method. `$sce.getTrustedResourceUrl(value)` →
15747
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}
15748
- *
15749
- * @param {*} value The value to pass to `$sceDelegate.getTrusted`.
15750
- * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`
15751
- */
15752
-
15753
- /**
15754
- * @ngdoc method
15755
- * @name $sce#getTrustedJs
15756
- *
15757
- * @description
15758
- * Shorthand method. `$sce.getTrustedJs(value)` →
15759
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}
15760
- *
15761
- * @param {*} value The value to pass to `$sce.getTrusted`.
15762
- * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`
15763
- */
15764
-
15765
- /**
15766
- * @ngdoc method
15767
- * @name $sce#parseAsHtml
15768
- *
15769
- * @description
15770
- * Shorthand method. `$sce.parseAsHtml(expression string)` →
15771
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`}
15772
- *
15773
- * @param {string} expression String expression to compile.
15774
- * @returns {function(context, locals)} a function which represents the compiled expression:
15775
- *
15776
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
15777
- * are evaluated against (typically a scope object).
15778
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15779
- * `context`.
15780
- */
15781
-
15782
- /**
15783
- * @ngdoc method
15784
- * @name $sce#parseAsCss
15785
- *
15786
- * @description
15787
- * Shorthand method. `$sce.parseAsCss(value)` →
15788
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`}
15789
- *
15790
- * @param {string} expression String expression to compile.
15791
- * @returns {function(context, locals)} a function which represents the compiled expression:
15792
- *
15793
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
15794
- * are evaluated against (typically a scope object).
15795
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15796
- * `context`.
15797
- */
15798
-
15799
- /**
15800
- * @ngdoc method
15801
- * @name $sce#parseAsUrl
15802
- *
15803
- * @description
15804
- * Shorthand method. `$sce.parseAsUrl(value)` →
15805
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`}
15806
- *
15807
- * @param {string} expression String expression to compile.
15808
- * @returns {function(context, locals)} a function which represents the compiled expression:
15809
- *
15810
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
15811
- * are evaluated against (typically a scope object).
15812
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15813
- * `context`.
15814
- */
15815
-
15816
- /**
15817
- * @ngdoc method
15818
- * @name $sce#parseAsResourceUrl
15819
- *
15820
- * @description
15821
- * Shorthand method. `$sce.parseAsResourceUrl(value)` →
15822
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`}
15823
- *
15824
- * @param {string} expression String expression to compile.
15825
- * @returns {function(context, locals)} a function which represents the compiled expression:
15826
- *
15827
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
15828
- * are evaluated against (typically a scope object).
15829
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15830
- * `context`.
15831
- */
15832
-
15833
- /**
15834
- * @ngdoc method
15835
- * @name $sce#parseAsJs
15836
- *
15837
- * @description
15838
- * Shorthand method. `$sce.parseAsJs(value)` →
15839
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`}
15840
- *
15841
- * @param {string} expression String expression to compile.
15842
- * @returns {function(context, locals)} a function which represents the compiled expression:
15843
- *
15844
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
15845
- * are evaluated against (typically a scope object).
15846
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15847
- * `context`.
15848
- */
15849
-
15850
- // Shorthand delegations.
15851
- var parse = sce.parseAs,
15852
- getTrusted = sce.getTrusted,
15853
- trustAs = sce.trustAs;
15854
-
15855
- forEach(SCE_CONTEXTS, function(enumValue, name) {
15856
- var lName = lowercase(name);
15857
- sce[camelCase("parse_as_" + lName)] = function(expr) {
15858
- return parse(enumValue, expr);
15859
- };
15860
- sce[camelCase("get_trusted_" + lName)] = function(value) {
15861
- return getTrusted(enumValue, value);
15862
- };
15863
- sce[camelCase("trust_as_" + lName)] = function(value) {
15864
- return trustAs(enumValue, value);
15865
- };
15866
- });
15867
-
15868
- return sce;
15869
- }];
15870
-}
15871
-
15872
-/**
15873
- * !!! This is an undocumented "private" service !!!
15874
- *
15875
- * @name $sniffer
15876
- * @requires $window
15877
- * @requires $document
15878
- *
15879
- * @property {boolean} history Does the browser support html5 history api ?
15880
- * @property {boolean} transitions Does the browser support CSS transition events ?
15881
- * @property {boolean} animations Does the browser support CSS animation events ?
15882
- *
15883
- * @description
15884
- * This is very simple implementation of testing browser's features.
15885
- */
15886
-function $SnifferProvider() {
15887
- this.$get = ['$window', '$document', function($window, $document) {
15888
- var eventSupport = {},
15889
- android =
15890
- int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
15891
- boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
15892
- document = $document[0] || {},
15893
- vendorPrefix,
15894
- vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,
15895
- bodyStyle = document.body && document.body.style,
15896
- transitions = false,
15897
- animations = false,
15898
- match;
15899
-
15900
- if (bodyStyle) {
15901
- for (var prop in bodyStyle) {
15902
- if (match = vendorRegex.exec(prop)) {
15903
- vendorPrefix = match[0];
15904
- vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);
15905
- break;
15906
- }
15907
- }
15908
-
15909
- if (!vendorPrefix) {
15910
- vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
15911
- }
15912
-
15913
- transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
15914
- animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
15915
-
15916
- if (android && (!transitions || !animations)) {
15917
- transitions = isString(document.body.style.webkitTransition);
15918
- animations = isString(document.body.style.webkitAnimation);
15919
- }
15920
- }
15921
-
15922
-
15923
- return {
15924
- // Android has history.pushState, but it does not update location correctly
15925
- // so let's not use the history API at all.
15926
- // http://code.google.com/p/android/issues/detail?id=17471
15927
- // https://github.com/angular/angular.js/issues/904
15928
-
15929
- // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has
15930
- // so let's not use the history API also
15931
- // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined
15932
- // jshint -W018
15933
- history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
15934
- // jshint +W018
15935
- hasEvent: function(event) {
15936
- // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
15937
- // it. In particular the event is not fired when backspace or delete key are pressed or
15938
- // when cut operation is performed.
15939
- // IE10+ implements 'input' event but it erroneously fires under various situations,
15940
- // e.g. when placeholder changes, or a form is focused.
15941
- if (event === 'input' && msie <= 11) return false;
15942
-
15943
- if (isUndefined(eventSupport[event])) {
15944
- var divElm = document.createElement('div');
15945
- eventSupport[event] = 'on' + event in divElm;
15946
- }
15947
-
15948
- return eventSupport[event];
15949
- },
15950
- csp: csp(),
15951
- vendorPrefix: vendorPrefix,
15952
- transitions: transitions,
15953
- animations: animations,
15954
- android: android
15955
- };
15956
- }];
15957
-}
15958
-
15959
-var $compileMinErr = minErr('$compile');
15960
-
15961
-/**
15962
- * @ngdoc service
15963
- * @name $templateRequest
15964
- *
15965
- * @description
15966
- * The `$templateRequest` service downloads the provided template using `$http` and, upon success,
15967
- * stores the contents inside of `$templateCache`. If the HTTP request fails or the response data
15968
- * of the HTTP request is empty then a `$compile` error will be thrown (the exception can be thwarted
15969
- * by setting the 2nd parameter of the function to true).
15970
- *
15971
- * @param {string} tpl The HTTP request template URL
15972
- * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty
15973
- *
15974
- * @return {Promise} the HTTP Promise for the given.
15975
- *
15976
- * @property {number} totalPendingRequests total amount of pending template requests being downloaded.
15977
- */
15978
-function $TemplateRequestProvider() {
15979
- this.$get = ['$templateCache', '$http', '$q', function($templateCache, $http, $q) {
15980
- function handleRequestFn(tpl, ignoreRequestError) {
15981
- var self = handleRequestFn;
15982
- self.totalPendingRequests++;
15983
-
15984
- var transformResponse = $http.defaults && $http.defaults.transformResponse;
15985
-
15986
- if (isArray(transformResponse)) {
15987
- transformResponse = transformResponse.filter(function(transformer) {
15988
- return transformer !== defaultHttpResponseTransform;
15989
- });
15990
- } else if (transformResponse === defaultHttpResponseTransform) {
15991
- transformResponse = null;
15992
- }
15993
-
15994
- var httpOptions = {
15995
- cache: $templateCache,
15996
- transformResponse: transformResponse
15997
- };
15998
-
15999
- return $http.get(tpl, httpOptions)
16000
- .then(function(response) {
16001
- self.totalPendingRequests--;
16002
- return response.data;
16003
- }, handleError);
16004
-
16005
- function handleError(resp) {
16006
- self.totalPendingRequests--;
16007
- if (!ignoreRequestError) {
16008
- throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl);
16009
- }
16010
- return $q.reject(resp);
16011
- }
16012
- }
16013
-
16014
- handleRequestFn.totalPendingRequests = 0;
16015
-
16016
- return handleRequestFn;
16017
- }];
16018
-}
16019
-
16020
-function $$TestabilityProvider() {
16021
- this.$get = ['$rootScope', '$browser', '$location',
16022
- function($rootScope, $browser, $location) {
16023
-
16024
- /**
16025
- * @name $testability
16026
- *
16027
- * @description
16028
- * The private $$testability service provides a collection of methods for use when debugging
16029
- * or by automated test and debugging tools.
16030
- */
16031
- var testability = {};
16032
-
16033
- /**
16034
- * @name $$testability#findBindings
16035
- *
16036
- * @description
16037
- * Returns an array of elements that are bound (via ng-bind or {{}})
16038
- * to expressions matching the input.
16039
- *
16040
- * @param {Element} element The element root to search from.
16041
- * @param {string} expression The binding expression to match.
16042
- * @param {boolean} opt_exactMatch If true, only returns exact matches
16043
- * for the expression. Filters and whitespace are ignored.
16044
- */
16045
- testability.findBindings = function(element, expression, opt_exactMatch) {
16046
- var bindings = element.getElementsByClassName('ng-binding');
16047
- var matches = [];
16048
- forEach(bindings, function(binding) {
16049
- var dataBinding = angular.element(binding).data('$binding');
16050
- if (dataBinding) {
16051
- forEach(dataBinding, function(bindingName) {
16052
- if (opt_exactMatch) {
16053
- var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)');
16054
- if (matcher.test(bindingName)) {
16055
- matches.push(binding);
16056
- }
16057
- } else {
16058
- if (bindingName.indexOf(expression) != -1) {
16059
- matches.push(binding);
16060
- }
16061
- }
16062
- });
16063
- }
16064
- });
16065
- return matches;
16066
- };
16067
-
16068
- /**
16069
- * @name $$testability#findModels
16070
- *
16071
- * @description
16072
- * Returns an array of elements that are two-way found via ng-model to
16073
- * expressions matching the input.
16074
- *
16075
- * @param {Element} element The element root to search from.
16076
- * @param {string} expression The model expression to match.
16077
- * @param {boolean} opt_exactMatch If true, only returns exact matches
16078
- * for the expression.
16079
- */
16080
- testability.findModels = function(element, expression, opt_exactMatch) {
16081
- var prefixes = ['ng-', 'data-ng-', 'ng\\:'];
16082
- for (var p = 0; p < prefixes.length; ++p) {
16083
- var attributeEquals = opt_exactMatch ? '=' : '*=';
16084
- var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]';
16085
- var elements = element.querySelectorAll(selector);
16086
- if (elements.length) {
16087
- return elements;
16088
- }
16089
- }
16090
- };
16091
-
16092
- /**
16093
- * @name $$testability#getLocation
16094
- *
16095
- * @description
16096
- * Shortcut for getting the location in a browser agnostic way. Returns
16097
- * the path, search, and hash. (e.g. /path?a=b#hash)
16098
- */
16099
- testability.getLocation = function() {
16100
- return $location.url();
16101
- };
16102
-
16103
- /**
16104
- * @name $$testability#setLocation
16105
- *
16106
- * @description
16107
- * Shortcut for navigating to a location without doing a full page reload.
16108
- *
16109
- * @param {string} url The location url (path, search and hash,
16110
- * e.g. /path?a=b#hash) to go to.
16111
- */
16112
- testability.setLocation = function(url) {
16113
- if (url !== $location.url()) {
16114
- $location.url(url);
16115
- $rootScope.$digest();
16116
- }
16117
- };
16118
-
16119
- /**
16120
- * @name $$testability#whenStable
16121
- *
16122
- * @description
16123
- * Calls the callback when $timeout and $http requests are completed.
16124
- *
16125
- * @param {function} callback
16126
- */
16127
- testability.whenStable = function(callback) {
16128
- $browser.notifyWhenNoOutstandingRequests(callback);
16129
- };
16130
-
16131
- return testability;
16132
- }];
16133
-}
16134
-
16135
-function $TimeoutProvider() {
16136
- this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',
16137
- function($rootScope, $browser, $q, $$q, $exceptionHandler) {
16138
- var deferreds = {};
16139
-
16140
-
16141
- /**
16142
- * @ngdoc service
16143
- * @name $timeout
16144
- *
16145
- * @description
16146
- * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch
16147
- * block and delegates any exceptions to
16148
- * {@link ng.$exceptionHandler $exceptionHandler} service.
16149
- *
16150
- * The return value of registering a timeout function is a promise, which will be resolved when
16151
- * the timeout is reached and the timeout function is executed.
16152
- *
16153
- * To cancel a timeout request, call `$timeout.cancel(promise)`.
16154
- *
16155
- * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to
16156
- * synchronously flush the queue of deferred functions.
16157
- *
16158
- * @param {function()} fn A function, whose execution should be delayed.
16159
- * @param {number=} [delay=0] Delay in milliseconds.
16160
- * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
16161
- * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
16162
- * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this
16163
- * promise will be resolved with is the return value of the `fn` function.
16164
- *
16165
- */
16166
- function timeout(fn, delay, invokeApply) {
16167
- var skipApply = (isDefined(invokeApply) && !invokeApply),
16168
- deferred = (skipApply ? $$q : $q).defer(),
16169
- promise = deferred.promise,
16170
- timeoutId;
16171
-
16172
- timeoutId = $browser.defer(function() {
16173
- try {
16174
- deferred.resolve(fn());
16175
- } catch (e) {
16176
- deferred.reject(e);
16177
- $exceptionHandler(e);
16178
- }
16179
- finally {
16180
- delete deferreds[promise.$$timeoutId];
16181
- }
16182
-
16183
- if (!skipApply) $rootScope.$apply();
16184
- }, delay);
16185
-
16186
- promise.$$timeoutId = timeoutId;
16187
- deferreds[timeoutId] = deferred;
16188
-
16189
- return promise;
16190
- }
16191
-
16192
-
16193
- /**
16194
- * @ngdoc method
16195
- * @name $timeout#cancel
16196
- *
16197
- * @description
16198
- * Cancels a task associated with the `promise`. As a result of this, the promise will be
16199
- * resolved with a rejection.
16200
- *
16201
- * @param {Promise=} promise Promise returned by the `$timeout` function.
16202
- * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
16203
- * canceled.
16204
- */
16205
- timeout.cancel = function(promise) {
16206
- if (promise && promise.$$timeoutId in deferreds) {
16207
- deferreds[promise.$$timeoutId].reject('canceled');
16208
- delete deferreds[promise.$$timeoutId];
16209
- return $browser.defer.cancel(promise.$$timeoutId);
16210
- }
16211
- return false;
16212
- };
16213
-
16214
- return timeout;
16215
- }];
16216
-}
16217
-
16218
-// NOTE: The usage of window and document instead of $window and $document here is
16219
-// deliberate. This service depends on the specific behavior of anchor nodes created by the
16220
-// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and
16221
-// cause us to break tests. In addition, when the browser resolves a URL for XHR, it
16222
-// doesn't know about mocked locations and resolves URLs to the real document - which is
16223
-// exactly the behavior needed here. There is little value is mocking these out for this
16224
-// service.
16225
-var urlParsingNode = document.createElement("a");
16226
-var originUrl = urlResolve(window.location.href);
16227
-
16228
-
16229
-/**
16230
- *
16231
- * Implementation Notes for non-IE browsers
16232
- * ----------------------------------------
16233
- * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,
16234
- * results both in the normalizing and parsing of the URL. Normalizing means that a relative
16235
- * URL will be resolved into an absolute URL in the context of the application document.
16236
- * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related
16237
- * properties are all populated to reflect the normalized URL. This approach has wide
16238
- * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See
16239
- * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
16240
- *
16241
- * Implementation Notes for IE
16242
- * ---------------------------
16243
- * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other
16244
- * browsers. However, the parsed components will not be set if the URL assigned did not specify
16245
- * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We
16246
- * work around that by performing the parsing in a 2nd step by taking a previously normalized
16247
- * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the
16248
- * properties such as protocol, hostname, port, etc.
16249
- *
16250
- * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one
16251
- * uses the inner HTML approach to assign the URL as part of an HTML snippet -
16252
- * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL.
16253
- * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception.
16254
- * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that
16255
- * method and IE < 8 is unsupported.
16256
- *
16257
- * References:
16258
- * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement
16259
- * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
16260
- * http://url.spec.whatwg.org/#urlutils
16261
- * https://github.com/angular/angular.js/pull/2902
16262
- * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
16263
- *
16264
- * @kind function
16265
- * @param {string} url The URL to be parsed.
16266
- * @description Normalizes and parses a URL.
16267
- * @returns {object} Returns the normalized URL as a dictionary.
16268
- *
16269
- * | member name | Description |
16270
- * |---------------|----------------|
16271
- * | href | A normalized version of the provided URL if it was not an absolute URL |
16272
- * | protocol | The protocol including the trailing colon |
16273
- * | host | The host and port (if the port is non-default) of the normalizedUrl |
16274
- * | search | The search params, minus the question mark |
16275
- * | hash | The hash string, minus the hash symbol
16276
- * | hostname | The hostname
16277
- * | port | The port, without ":"
16278
- * | pathname | The pathname, beginning with "/"
16279
- *
16280
- */
16281
-function urlResolve(url) {
16282
- var href = url;
16283
-
16284
- if (msie) {
16285
- // Normalize before parse. Refer Implementation Notes on why this is
16286
- // done in two steps on IE.
16287
- urlParsingNode.setAttribute("href", href);
16288
- href = urlParsingNode.href;
16289
- }
16290
-
16291
- urlParsingNode.setAttribute('href', href);
16292
-
16293
- // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
16294
- return {
16295
- href: urlParsingNode.href,
16296
- protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
16297
- host: urlParsingNode.host,
16298
- search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
16299
- hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
16300
- hostname: urlParsingNode.hostname,
16301
- port: urlParsingNode.port,
16302
- pathname: (urlParsingNode.pathname.charAt(0) === '/')
16303
- ? urlParsingNode.pathname
16304
- : '/' + urlParsingNode.pathname
16305
- };
16306
-}
16307
-
16308
-/**
16309
- * Parse a request URL and determine whether this is a same-origin request as the application document.
16310
- *
16311
- * @param {string|object} requestUrl The url of the request as a string that will be resolved
16312
- * or a parsed URL object.
16313
- * @returns {boolean} Whether the request is for the same origin as the application document.
16314
- */
16315
-function urlIsSameOrigin(requestUrl) {
16316
- var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;
16317
- return (parsed.protocol === originUrl.protocol &&
16318
- parsed.host === originUrl.host);
16319
-}
16320
-
16321
-/**
16322
- * @ngdoc service
16323
- * @name $window
16324
- *
16325
- * @description
16326
- * A reference to the browser's `window` object. While `window`
16327
- * is globally available in JavaScript, it causes testability problems, because
16328
- * it is a global variable. In angular we always refer to it through the
16329
- * `$window` service, so it may be overridden, removed or mocked for testing.
16330
- *
16331
- * Expressions, like the one defined for the `ngClick` directive in the example
16332
- * below, are evaluated with respect to the current scope. Therefore, there is
16333
- * no risk of inadvertently coding in a dependency on a global value in such an
16334
- * expression.
16335
- *
16336
- * @example
16337
- <example module="windowExample">
16338
- <file name="index.html">
16339
- <script>
16340
- angular.module('windowExample', [])
16341
- .controller('ExampleController', ['$scope', '$window', function($scope, $window) {
16342
- $scope.greeting = 'Hello, World!';
16343
- $scope.doGreeting = function(greeting) {
16344
- $window.alert(greeting);
16345
- };
16346
- }]);
16347
- </script>
16348
- <div ng-controller="ExampleController">
16349
- <input type="text" ng-model="greeting" />
16350
- <button ng-click="doGreeting(greeting)">ALERT</button>
16351
- </div>
16352
- </file>
16353
- <file name="protractor.js" type="protractor">
16354
- it('should display the greeting in the input box', function() {
16355
- element(by.model('greeting')).sendKeys('Hello, E2E Tests');
16356
- // If we click the button it will block the test runner
16357
- // element(':button').click();
16358
- });
16359
- </file>
16360
- </example>
16361
- */
16362
-function $WindowProvider() {
16363
- this.$get = valueFn(window);
16364
-}
16365
-
16366
-/* global currencyFilter: true,
16367
- dateFilter: true,
16368
- filterFilter: true,
16369
- jsonFilter: true,
16370
- limitToFilter: true,
16371
- lowercaseFilter: true,
16372
- numberFilter: true,
16373
- orderByFilter: true,
16374
- uppercaseFilter: true,
16375
- */
16376
-
16377
-/**
16378
- * @ngdoc provider
16379
- * @name $filterProvider
16380
- * @description
16381
- *
16382
- * Filters are just functions which transform input to an output. However filters need to be
16383
- * Dependency Injected. To achieve this a filter definition consists of a factory function which is
16384
- * annotated with dependencies and is responsible for creating a filter function.
16385
- *
16386
- * ```js
16387
- * // Filter registration
16388
- * function MyModule($provide, $filterProvider) {
16389
- * // create a service to demonstrate injection (not always needed)
16390
- * $provide.value('greet', function(name){
16391
- * return 'Hello ' + name + '!';
16392
- * });
16393
- *
16394
- * // register a filter factory which uses the
16395
- * // greet service to demonstrate DI.
16396
- * $filterProvider.register('greet', function(greet){
16397
- * // return the filter function which uses the greet service
16398
- * // to generate salutation
16399
- * return function(text) {
16400
- * // filters need to be forgiving so check input validity
16401
- * return text && greet(text) || text;
16402
- * };
16403
- * });
16404
- * }
16405
- * ```
16406
- *
16407
- * The filter function is registered with the `$injector` under the filter name suffix with
16408
- * `Filter`.
16409
- *
16410
- * ```js
16411
- * it('should be the same instance', inject(
16412
- * function($filterProvider) {
16413
- * $filterProvider.register('reverse', function(){
16414
- * return ...;
16415
- * });
16416
- * },
16417
- * function($filter, reverseFilter) {
16418
- * expect($filter('reverse')).toBe(reverseFilter);
16419
- * });
16420
- * ```
16421
- *
16422
- *
16423
- * For more information about how angular filters work, and how to create your own filters, see
16424
- * {@link guide/filter Filters} in the Angular Developer Guide.
16425
- */
16426
-
16427
-/**
16428
- * @ngdoc service
16429
- * @name $filter
16430
- * @kind function
16431
- * @description
16432
- * Filters are used for formatting data displayed to the user.
16433
- *
16434
- * The general syntax in templates is as follows:
16435
- *
16436
- * {{ expression [| filter_name[:parameter_value] ... ] }}
16437
- *
16438
- * @param {String} name Name of the filter function to retrieve
16439
- * @return {Function} the filter function
16440
- * @example
16441
- <example name="$filter" module="filterExample">
16442
- <file name="index.html">
16443
- <div ng-controller="MainCtrl">
16444
- <h3>{{ originalText }}</h3>
16445
- <h3>{{ filteredText }}</h3>
16446
- </div>
16447
- </file>
16448
-
16449
- <file name="script.js">
16450
- angular.module('filterExample', [])
16451
- .controller('MainCtrl', function($scope, $filter) {
16452
- $scope.originalText = 'hello';
16453
- $scope.filteredText = $filter('uppercase')($scope.originalText);
16454
- });
16455
- </file>
16456
- </example>
16457
- */
16458
-$FilterProvider.$inject = ['$provide'];
16459
-function $FilterProvider($provide) {
16460
- var suffix = 'Filter';
16461
-
16462
- /**
16463
- * @ngdoc method
16464
- * @name $filterProvider#register
16465
- * @param {string|Object} name Name of the filter function, or an object map of filters where
16466
- * the keys are the filter names and the values are the filter factories.
16467
- * @returns {Object} Registered filter instance, or if a map of filters was provided then a map
16468
- * of the registered filter instances.
16469
- */
16470
- function register(name, factory) {
16471
- if (isObject(name)) {
16472
- var filters = {};
16473
- forEach(name, function(filter, key) {
16474
- filters[key] = register(key, filter);
16475
- });
16476
- return filters;
16477
- } else {
16478
- return $provide.factory(name + suffix, factory);
16479
- }
16480
- }
16481
- this.register = register;
16482
-
16483
- this.$get = ['$injector', function($injector) {
16484
- return function(name) {
16485
- return $injector.get(name + suffix);
16486
- };
16487
- }];
16488
-
16489
- ////////////////////////////////////////
16490
-
16491
- /* global
16492
- currencyFilter: false,
16493
- dateFilter: false,
16494
- filterFilter: false,
16495
- jsonFilter: false,
16496
- limitToFilter: false,
16497
- lowercaseFilter: false,
16498
- numberFilter: false,
16499
- orderByFilter: false,
16500
- uppercaseFilter: false,
16501
- */
16502
-
16503
- register('currency', currencyFilter);
16504
- register('date', dateFilter);
16505
- register('filter', filterFilter);
16506
- register('json', jsonFilter);
16507
- register('limitTo', limitToFilter);
16508
- register('lowercase', lowercaseFilter);
16509
- register('number', numberFilter);
16510
- register('orderBy', orderByFilter);
16511
- register('uppercase', uppercaseFilter);
16512
-}
16513
-
16514
-/**
16515
- * @ngdoc filter
16516
- * @name filter
16517
- * @kind function
16518
- *
16519
- * @description
16520
- * Selects a subset of items from `array` and returns it as a new array.
16521
- *
16522
- * @param {Array} array The source array.
16523
- * @param {string|Object|function()} expression The predicate to be used for selecting items from
16524
- * `array`.
16525
- *
16526
- * Can be one of:
16527
- *
16528
- * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against
16529
- * the contents of the `array`. All strings or objects with string properties in `array` that contain this string
16530
- * will be returned. The predicate can be negated by prefixing the string with `!`.
16531
- *
16532
- * - `Object`: A pattern object can be used to filter specific properties on objects contained
16533
- * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items
16534
- * which have property `name` containing "M" and property `phone` containing "1". A special
16535
- * property name `$` can be used (as in `{$:"text"}`) to accept a match against any
16536
- * property of the object. That's equivalent to the simple substring match with a `string`
16537
- * as described above. The predicate can be negated by prefixing the string with `!`.
16538
- * For Example `{name: "!M"}` predicate will return an array of items which have property `name`
16539
- * not containing "M".
16540
- *
16541
- * - `function(value, index)`: A predicate function can be used to write arbitrary filters. The
16542
- * function is called for each element of `array`. The final result is an array of those
16543
- * elements that the predicate returned true for.
16544
- *
16545
- * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in
16546
- * determining if the expected value (from the filter expression) and actual value (from
16547
- * the object in the array) should be considered a match.
16548
- *
16549
- * Can be one of:
16550
- *
16551
- * - `function(actual, expected)`:
16552
- * The function will be given the object value and the predicate value to compare and
16553
- * should return true if the item should be included in filtered result.
16554
- *
16555
- * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.
16556
- * this is essentially strict comparison of expected and actual.
16557
- *
16558
- * - `false|undefined`: A short hand for a function which will look for a substring match in case
16559
- * insensitive way.
16560
- *
16561
- * @example
16562
- <example>
16563
- <file name="index.html">
16564
- <div ng-init="friends = [{name:'John', phone:'555-1276'},
16565
- {name:'Mary', phone:'800-BIG-MARY'},
16566
- {name:'Mike', phone:'555-4321'},
16567
- {name:'Adam', phone:'555-5678'},
16568
- {name:'Julie', phone:'555-8765'},
16569
- {name:'Juliette', phone:'555-5678'}]"></div>
16570
-
16571
- Search: <input ng-model="searchText">
16572
- <table id="searchTextResults">
16573
- <tr><th>Name</th><th>Phone</th></tr>
16574
- <tr ng-repeat="friend in friends | filter:searchText">
16575
- <td>{{friend.name}}</td>
16576
- <td>{{friend.phone}}</td>
16577
- </tr>
16578
- </table>
16579
- <hr>
16580
- Any: <input ng-model="search.$"> <br>
16581
- Name only <input ng-model="search.name"><br>
16582
- Phone only <input ng-model="search.phone"><br>
16583
- Equality <input type="checkbox" ng-model="strict"><br>
16584
- <table id="searchObjResults">
16585
- <tr><th>Name</th><th>Phone</th></tr>
16586
- <tr ng-repeat="friendObj in friends | filter:search:strict">
16587
- <td>{{friendObj.name}}</td>
16588
- <td>{{friendObj.phone}}</td>
16589
- </tr>
16590
- </table>
16591
- </file>
16592
- <file name="protractor.js" type="protractor">
16593
- var expectFriendNames = function(expectedNames, key) {
16594
- element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {
16595
- arr.forEach(function(wd, i) {
16596
- expect(wd.getText()).toMatch(expectedNames[i]);
16597
- });
16598
- });
16599
- };
16600
-
16601
- it('should search across all fields when filtering with a string', function() {
16602
- var searchText = element(by.model('searchText'));
16603
- searchText.clear();
16604
- searchText.sendKeys('m');
16605
- expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');
16606
-
16607
- searchText.clear();
16608
- searchText.sendKeys('76');
16609
- expectFriendNames(['John', 'Julie'], 'friend');
16610
- });
16611
-
16612
- it('should search in specific fields when filtering with a predicate object', function() {
16613
- var searchAny = element(by.model('search.$'));
16614
- searchAny.clear();
16615
- searchAny.sendKeys('i');
16616
- expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');
16617
- });
16618
- it('should use a equal comparison when comparator is true', function() {
16619
- var searchName = element(by.model('search.name'));
16620
- var strict = element(by.model('strict'));
16621
- searchName.clear();
16622
- searchName.sendKeys('Julie');
16623
- strict.click();
16624
- expectFriendNames(['Julie'], 'friendObj');
16625
- });
16626
- </file>
16627
- </example>
16628
- */
16629
-function filterFilter() {
16630
- return function(array, expression, comparator) {
16631
- if (!isArray(array)) return array;
16632
-
16633
- var predicateFn;
16634
- var matchAgainstAnyProp;
16635
-
16636
- switch (typeof expression) {
16637
- case 'function':
16638
- predicateFn = expression;
16639
- break;
16640
- case 'boolean':
16641
- case 'number':
16642
- case 'string':
16643
- matchAgainstAnyProp = true;
16644
- //jshint -W086
16645
- case 'object':
16646
- //jshint +W086
16647
- predicateFn = createPredicateFn(expression, comparator, matchAgainstAnyProp);
16648
- break;
16649
- default:
16650
- return array;
16651
- }
16652
-
16653
- return array.filter(predicateFn);
16654
- };
16655
-}
16656
-
16657
-// Helper functions for `filterFilter`
16658
-function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
16659
- var predicateFn;
16660
-
16661
- if (comparator === true) {
16662
- comparator = equals;
16663
- } else if (!isFunction(comparator)) {
16664
- comparator = function(actual, expected) {
16665
- if (isObject(actual) || isObject(expected)) {
16666
- // Prevent an object to be considered equal to a string like `'[object'`
16667
- return false;
16668
- }
16669
-
16670
- actual = lowercase('' + actual);
16671
- expected = lowercase('' + expected);
16672
- return actual.indexOf(expected) !== -1;
16673
- };
16674
- }
16675
-
16676
- predicateFn = function(item) {
16677
- return deepCompare(item, expression, comparator, matchAgainstAnyProp);
16678
- };
16679
-
16680
- return predicateFn;
16681
-}
16682
-
16683
-function deepCompare(actual, expected, comparator, matchAgainstAnyProp) {
16684
- var actualType = typeof actual;
16685
- var expectedType = typeof expected;
16686
-
16687
- if ((expectedType === 'string') && (expected.charAt(0) === '!')) {
16688
- return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp);
16689
- } else if (actualType === 'array') {
16690
- // In case `actual` is an array, consider it a match
16691
- // if ANY of it's items matches `expected`
16692
- return actual.some(function(item) {
16693
- return deepCompare(item, expected, comparator, matchAgainstAnyProp);
16694
- });
16695
- }
16696
-
16697
- switch (actualType) {
16698
- case 'object':
16699
- var key;
16700
- if (matchAgainstAnyProp) {
16701
- for (key in actual) {
16702
- if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator)) {
16703
- return true;
16704
- }
16705
- }
16706
- return false;
16707
- } else if (expectedType === 'object') {
16708
- for (key in expected) {
16709
- var expectedVal = expected[key];
16710
- if (isFunction(expectedVal)) {
16711
- continue;
16712
- }
16713
-
16714
- var keyIsDollar = key === '$';
16715
- var actualVal = keyIsDollar ? actual : actual[key];
16716
- if (!deepCompare(actualVal, expectedVal, comparator, keyIsDollar)) {
16717
- return false;
16718
- }
16719
- }
16720
- return true;
16721
- } else {
16722
- return comparator(actual, expected);
16723
- }
16724
- break;
16725
- case 'function':
16726
- return false;
16727
- default:
16728
- return comparator(actual, expected);
16729
- }
16730
-}
16731
-
16732
-/**
16733
- * @ngdoc filter
16734
- * @name currency
16735
- * @kind function
16736
- *
16737
- * @description
16738
- * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default
16739
- * symbol for current locale is used.
16740
- *
16741
- * @param {number} amount Input to filter.
16742
- * @param {string=} symbol Currency symbol or identifier to be displayed.
16743
- * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale
16744
- * @returns {string} Formatted number.
16745
- *
16746
- *
16747
- * @example
16748
- <example module="currencyExample">
16749
- <file name="index.html">
16750
- <script>
16751
- angular.module('currencyExample', [])
16752
- .controller('ExampleController', ['$scope', function($scope) {
16753
- $scope.amount = 1234.56;
16754
- }]);
16755
- </script>
16756
- <div ng-controller="ExampleController">
16757
- <input type="number" ng-model="amount"> <br>
16758
- default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br>
16759
- custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span>
16760
- no fractions (0): <span id="currency-no-fractions">{{amount | currency:"USD$":0}}</span>
16761
- </div>
16762
- </file>
16763
- <file name="protractor.js" type="protractor">
16764
- it('should init with 1234.56', function() {
16765
- expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');
16766
- expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56');
16767
- expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235');
16768
- });
16769
- it('should update', function() {
16770
- if (browser.params.browser == 'safari') {
16771
- // Safari does not understand the minus key. See
16772
- // https://github.com/angular/protractor/issues/481
16773
- return;
16774
- }
16775
- element(by.model('amount')).clear();
16776
- element(by.model('amount')).sendKeys('-1234');
16777
- expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');
16778
- expect(element(by.id('currency-custom')).getText()).toBe('(USD$1,234.00)');
16779
- expect(element(by.id('currency-no-fractions')).getText()).toBe('(USD$1,234)');
16780
- });
16781
- </file>
16782
- </example>
16783
- */
16784
-currencyFilter.$inject = ['$locale'];
16785
-function currencyFilter($locale) {
16786
- var formats = $locale.NUMBER_FORMATS;
16787
- return function(amount, currencySymbol, fractionSize) {
16788
- if (isUndefined(currencySymbol)) {
16789
- currencySymbol = formats.CURRENCY_SYM;
16790
- }
16791
-
16792
- if (isUndefined(fractionSize)) {
16793
- fractionSize = formats.PATTERNS[1].maxFrac;
16794
- }
16795
-
16796
- // if null or undefined pass it through
16797
- return (amount == null)
16798
- ? amount
16799
- : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize).
16800
- replace(/\u00A4/g, currencySymbol);
16801
- };
16802
-}
16803
-
16804
-/**
16805
- * @ngdoc filter
16806
- * @name number
16807
- * @kind function
16808
- *
16809
- * @description
16810
- * Formats a number as text.
16811
- *
16812
- * If the input is not a number an empty string is returned.
16813
- *
16814
- * @param {number|string} number Number to format.
16815
- * @param {(number|string)=} fractionSize Number of decimal places to round the number to.
16816
- * If this is not provided then the fraction size is computed from the current locale's number
16817
- * formatting pattern. In the case of the default locale, it will be 3.
16818
- * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.
16819
- *
16820
- * @example
16821
- <example module="numberFilterExample">
16822
- <file name="index.html">
16823
- <script>
16824
- angular.module('numberFilterExample', [])
16825
- .controller('ExampleController', ['$scope', function($scope) {
16826
- $scope.val = 1234.56789;
16827
- }]);
16828
- </script>
16829
- <div ng-controller="ExampleController">
16830
- Enter number: <input ng-model='val'><br>
16831
- Default formatting: <span id='number-default'>{{val | number}}</span><br>
16832
- No fractions: <span>{{val | number:0}}</span><br>
16833
- Negative number: <span>{{-val | number:4}}</span>
16834
- </div>
16835
- </file>
16836
- <file name="protractor.js" type="protractor">
16837
- it('should format numbers', function() {
16838
- expect(element(by.id('number-default')).getText()).toBe('1,234.568');
16839
- expect(element(by.binding('val | number:0')).getText()).toBe('1,235');
16840
- expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');
16841
- });
16842
-
16843
- it('should update', function() {
16844
- element(by.model('val')).clear();
16845
- element(by.model('val')).sendKeys('3374.333');
16846
- expect(element(by.id('number-default')).getText()).toBe('3,374.333');
16847
- expect(element(by.binding('val | number:0')).getText()).toBe('3,374');
16848
- expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');
16849
- });
16850
- </file>
16851
- </example>
16852
- */
16853
-
16854
-
16855
-numberFilter.$inject = ['$locale'];
16856
-function numberFilter($locale) {
16857
- var formats = $locale.NUMBER_FORMATS;
16858
- return function(number, fractionSize) {
16859
-
16860
- // if null or undefined pass it through
16861
- return (number == null)
16862
- ? number
16863
- : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
16864
- fractionSize);
16865
- };
16866
-}
16867
-
16868
-var DECIMAL_SEP = '.';
16869
-function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
16870
- if (!isFinite(number) || isObject(number)) return '';
16871
-
16872
- var isNegative = number < 0;
16873
- number = Math.abs(number);
16874
- var numStr = number + '',
16875
- formatedText = '',
16876
- parts = [];
16877
-
16878
- var hasExponent = false;
16879
- if (numStr.indexOf('e') !== -1) {
16880
- var match = numStr.match(/([\d\.]+)e(-?)(\d+)/);
16881
- if (match && match[2] == '-' && match[3] > fractionSize + 1) {
16882
- number = 0;
16883
- } else {
16884
- formatedText = numStr;
16885
- hasExponent = true;
16886
- }
16887
- }
16888
-
16889
- if (!hasExponent) {
16890
- var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;
16891
-
16892
- // determine fractionSize if it is not specified
16893
- if (isUndefined(fractionSize)) {
16894
- fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);
16895
- }
16896
-
16897
- // safely round numbers in JS without hitting imprecisions of floating-point arithmetics
16898
- // inspired by:
16899
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
16900
- number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);
16901
-
16902
- var fraction = ('' + number).split(DECIMAL_SEP);
16903
- var whole = fraction[0];
16904
- fraction = fraction[1] || '';
16905
-
16906
- var i, pos = 0,
16907
- lgroup = pattern.lgSize,
16908
- group = pattern.gSize;
16909
-
16910
- if (whole.length >= (lgroup + group)) {
16911
- pos = whole.length - lgroup;
16912
- for (i = 0; i < pos; i++) {
16913
- if ((pos - i) % group === 0 && i !== 0) {
16914
- formatedText += groupSep;
16915
- }
16916
- formatedText += whole.charAt(i);
16917
- }
16918
- }
16919
-
16920
- for (i = pos; i < whole.length; i++) {
16921
- if ((whole.length - i) % lgroup === 0 && i !== 0) {
16922
- formatedText += groupSep;
16923
- }
16924
- formatedText += whole.charAt(i);
16925
- }
16926
-
16927
- // format fraction part.
16928
- while (fraction.length < fractionSize) {
16929
- fraction += '0';
16930
- }
16931
-
16932
- if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize);
16933
- } else {
16934
- if (fractionSize > 0 && number < 1) {
16935
- formatedText = number.toFixed(fractionSize);
16936
- number = parseFloat(formatedText);
16937
- }
16938
- }
16939
-
16940
- if (number === 0) {
16941
- isNegative = false;
16942
- }
16943
-
16944
- parts.push(isNegative ? pattern.negPre : pattern.posPre,
16945
- formatedText,
16946
- isNegative ? pattern.negSuf : pattern.posSuf);
16947
- return parts.join('');
16948
-}
16949
-
16950
-function padNumber(num, digits, trim) {
16951
- var neg = '';
16952
- if (num < 0) {
16953
- neg = '-';
16954
- num = -num;
16955
- }
16956
- num = '' + num;
16957
- while (num.length < digits) num = '0' + num;
16958
- if (trim)
16959
- num = num.substr(num.length - digits);
16960
- return neg + num;
16961
-}
16962
-
16963
-
16964
-function dateGetter(name, size, offset, trim) {
16965
- offset = offset || 0;
16966
- return function(date) {
16967
- var value = date['get' + name]();
16968
- if (offset > 0 || value > -offset)
16969
- value += offset;
16970
- if (value === 0 && offset == -12) value = 12;
16971
- return padNumber(value, size, trim);
16972
- };
16973
-}
16974
-
16975
-function dateStrGetter(name, shortForm) {
16976
- return function(date, formats) {
16977
- var value = date['get' + name]();
16978
- var get = uppercase(shortForm ? ('SHORT' + name) : name);
16979
-
16980
- return formats[get][value];
16981
- };
16982
-}
16983
-
16984
-function timeZoneGetter(date) {
16985
- var zone = -1 * date.getTimezoneOffset();
16986
- var paddedZone = (zone >= 0) ? "+" : "";
16987
-
16988
- paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +
16989
- padNumber(Math.abs(zone % 60), 2);
16990
-
16991
- return paddedZone;
16992
-}
16993
-
16994
-function getFirstThursdayOfYear(year) {
16995
- // 0 = index of January
16996
- var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay();
16997
- // 4 = index of Thursday (+1 to account for 1st = 5)
16998
- // 11 = index of *next* Thursday (+1 account for 1st = 12)
16999
- return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst);
17000
-}
17001
-
17002
-function getThursdayThisWeek(datetime) {
17003
- return new Date(datetime.getFullYear(), datetime.getMonth(),
17004
- // 4 = index of Thursday
17005
- datetime.getDate() + (4 - datetime.getDay()));
17006
-}
17007
-
17008
-function weekGetter(size) {
17009
- return function(date) {
17010
- var firstThurs = getFirstThursdayOfYear(date.getFullYear()),
17011
- thisThurs = getThursdayThisWeek(date);
17012
-
17013
- var diff = +thisThurs - +firstThurs,
17014
- result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week
17015
-
17016
- return padNumber(result, size);
17017
- };
17018
-}
17019
-
17020
-function ampmGetter(date, formats) {
17021
- return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];
17022
-}
17023
-
17024
-var DATE_FORMATS = {
17025
- yyyy: dateGetter('FullYear', 4),
17026
- yy: dateGetter('FullYear', 2, 0, true),
17027
- y: dateGetter('FullYear', 1),
17028
- MMMM: dateStrGetter('Month'),
17029
- MMM: dateStrGetter('Month', true),
17030
- MM: dateGetter('Month', 2, 1),
17031
- M: dateGetter('Month', 1, 1),
17032
- dd: dateGetter('Date', 2),
17033
- d: dateGetter('Date', 1),
17034
- HH: dateGetter('Hours', 2),
17035
- H: dateGetter('Hours', 1),
17036
- hh: dateGetter('Hours', 2, -12),
17037
- h: dateGetter('Hours', 1, -12),
17038
- mm: dateGetter('Minutes', 2),
17039
- m: dateGetter('Minutes', 1),
17040
- ss: dateGetter('Seconds', 2),
17041
- s: dateGetter('Seconds', 1),
17042
- // while ISO 8601 requires fractions to be prefixed with `.` or `,`
17043
- // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions
17044
- sss: dateGetter('Milliseconds', 3),
17045
- EEEE: dateStrGetter('Day'),
17046
- EEE: dateStrGetter('Day', true),
17047
- a: ampmGetter,
17048
- Z: timeZoneGetter,
17049
- ww: weekGetter(2),
17050
- w: weekGetter(1)
17051
-};
17052
-
17053
-var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,
17054
- NUMBER_STRING = /^\-?\d+$/;
17055
-
17056
-/**
17057
- * @ngdoc filter
17058
- * @name date
17059
- * @kind function
17060
- *
17061
- * @description
17062
- * Formats `date` to a string based on the requested `format`.
17063
- *
17064
- * `format` string can be composed of the following elements:
17065
- *
17066
- * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)
17067
- * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
17068
- * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)
17069
- * * `'MMMM'`: Month in year (January-December)
17070
- * * `'MMM'`: Month in year (Jan-Dec)
17071
- * * `'MM'`: Month in year, padded (01-12)
17072
- * * `'M'`: Month in year (1-12)
17073
- * * `'dd'`: Day in month, padded (01-31)
17074
- * * `'d'`: Day in month (1-31)
17075
- * * `'EEEE'`: Day in Week,(Sunday-Saturday)
17076
- * * `'EEE'`: Day in Week, (Sun-Sat)
17077
- * * `'HH'`: Hour in day, padded (00-23)
17078
- * * `'H'`: Hour in day (0-23)
17079
- * * `'hh'`: Hour in AM/PM, padded (01-12)
17080
- * * `'h'`: Hour in AM/PM, (1-12)
17081
- * * `'mm'`: Minute in hour, padded (00-59)
17082
- * * `'m'`: Minute in hour (0-59)
17083
- * * `'ss'`: Second in minute, padded (00-59)
17084
- * * `'s'`: Second in minute (0-59)
17085
- * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)
17086
- * * `'a'`: AM/PM marker
17087
- * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)
17088
- * * `'ww'`: ISO-8601 week of year (00-53)
17089
- * * `'w'`: ISO-8601 week of year (0-53)
17090
- *
17091
- * `format` string can also be one of the following predefined
17092
- * {@link guide/i18n localizable formats}:
17093
- *
17094
- * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale
17095
- * (e.g. Sep 3, 2010 12:05:08 PM)
17096
- * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 PM)
17097
- * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale
17098
- * (e.g. Friday, September 3, 2010)
17099
- * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010)
17100
- * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010)
17101
- * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)
17102
- * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM)
17103
- * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM)
17104
- *
17105
- * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.
17106
- * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence
17107
- * (e.g. `"h 'o''clock'"`).
17108
- *
17109
- * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
17110
- * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its
17111
- * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is
17112
- * specified in the string input, the time is considered to be in the local timezone.
17113
- * @param {string=} format Formatting rules (see Description). If not specified,
17114
- * `mediumDate` is used.
17115
- * @param {string=} timezone Timezone to be used for formatting. Right now, only `'UTC'` is supported.
17116
- * If not specified, the timezone of the browser will be used.
17117
- * @returns {string} Formatted string or the input if input is not recognized as date/millis.
17118
- *
17119
- * @example
17120
- <example>
17121
- <file name="index.html">
17122
- <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:
17123
- <span>{{1288323623006 | date:'medium'}}</span><br>
17124
- <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:
17125
- <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>
17126
- <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:
17127
- <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>
17128
- <span ng-non-bindable>{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}</span>:
17129
- <span>{{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}</span><br>
17130
- </file>
17131
- <file name="protractor.js" type="protractor">
17132
- it('should format date', function() {
17133
- expect(element(by.binding("1288323623006 | date:'medium'")).getText()).
17134
- toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/);
17135
- expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()).
17136
- toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/);
17137
- expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()).
17138
- toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/);
17139
- expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()).
17140
- toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/);
17141
- });
17142
- </file>
17143
- </example>
17144
- */
17145
-dateFilter.$inject = ['$locale'];
17146
-function dateFilter($locale) {
17147
-
17148
-
17149
- var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
17150
- // 1 2 3 4 5 6 7 8 9 10 11
17151
- function jsonStringToDate(string) {
17152
- var match;
17153
- if (match = string.match(R_ISO8601_STR)) {
17154
- var date = new Date(0),
17155
- tzHour = 0,
17156
- tzMin = 0,
17157
- dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,
17158
- timeSetter = match[8] ? date.setUTCHours : date.setHours;
17159
-
17160
- if (match[9]) {
17161
- tzHour = int(match[9] + match[10]);
17162
- tzMin = int(match[9] + match[11]);
17163
- }
17164
- dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));
17165
- var h = int(match[4] || 0) - tzHour;
17166
- var m = int(match[5] || 0) - tzMin;
17167
- var s = int(match[6] || 0);
17168
- var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);
17169
- timeSetter.call(date, h, m, s, ms);
17170
- return date;
17171
- }
17172
- return string;
17173
- }
17174
-
17175
-
17176
- return function(date, format, timezone) {
17177
- var text = '',
17178
- parts = [],
17179
- fn, match;
17180
-
17181
- format = format || 'mediumDate';
17182
- format = $locale.DATETIME_FORMATS[format] || format;
17183
- if (isString(date)) {
17184
- date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date);
17185
- }
17186
-
17187
- if (isNumber(date)) {
17188
- date = new Date(date);
17189
- }
17190
-
17191
- if (!isDate(date)) {
17192
- return date;
17193
- }
17194
-
17195
- while (format) {
17196
- match = DATE_FORMATS_SPLIT.exec(format);
17197
- if (match) {
17198
- parts = concat(parts, match, 1);
17199
- format = parts.pop();
17200
- } else {
17201
- parts.push(format);
17202
- format = null;
17203
- }
17204
- }
17205
-
17206
- if (timezone && timezone === 'UTC') {
17207
- date = new Date(date.getTime());
17208
- date.setMinutes(date.getMinutes() + date.getTimezoneOffset());
17209
- }
17210
- forEach(parts, function(value) {
17211
- fn = DATE_FORMATS[value];
17212
- text += fn ? fn(date, $locale.DATETIME_FORMATS)
17213
- : value.replace(/(^'|'$)/g, '').replace(/''/g, "'");
17214
- });
17215
-
17216
- return text;
17217
- };
17218
-}
17219
-
17220
-
17221
-/**
17222
- * @ngdoc filter
17223
- * @name json
17224
- * @kind function
17225
- *
17226
- * @description
17227
- * Allows you to convert a JavaScript object into JSON string.
17228
- *
17229
- * This filter is mostly useful for debugging. When using the double curly {{value}} notation
17230
- * the binding is automatically converted to JSON.
17231
- *
17232
- * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.
17233
- * @param {number=} spacing The number of spaces to use per indentation, defaults to 2.
17234
- * @returns {string} JSON string.
17235
- *
17236
- *
17237
- * @example
17238
- <example>
17239
- <file name="index.html">
17240
- <pre id="default-spacing">{{ {'name':'value'} | json }}</pre>
17241
- <pre id="custom-spacing">{{ {'name':'value'} | json:4 }}</pre>
17242
- </file>
17243
- <file name="protractor.js" type="protractor">
17244
- it('should jsonify filtered objects', function() {
17245
- expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/);
17246
- expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/);
17247
- });
17248
- </file>
17249
- </example>
17250
- *
17251
- */
17252
-function jsonFilter() {
17253
- return function(object, spacing) {
17254
- if (isUndefined(spacing)) {
17255
- spacing = 2;
17256
- }
17257
- return toJson(object, spacing);
17258
- };
17259
-}
17260
-
17261
-
17262
-/**
17263
- * @ngdoc filter
17264
- * @name lowercase
17265
- * @kind function
17266
- * @description
17267
- * Converts string to lowercase.
17268
- * @see angular.lowercase
17269
- */
17270
-var lowercaseFilter = valueFn(lowercase);
17271
-
17272
-
17273
-/**
17274
- * @ngdoc filter
17275
- * @name uppercase
17276
- * @kind function
17277
- * @description
17278
- * Converts string to uppercase.
17279
- * @see angular.uppercase
17280
- */
17281
-var uppercaseFilter = valueFn(uppercase);
17282
-
17283
-/**
17284
- * @ngdoc filter
17285
- * @name limitTo
17286
- * @kind function
17287
- *
17288
- * @description
17289
- * Creates a new array or string containing only a specified number of elements. The elements
17290
- * are taken from either the beginning or the end of the source array, string or number, as specified by
17291
- * the value and sign (positive or negative) of `limit`. If a number is used as input, it is
17292
- * converted to a string.
17293
- *
17294
- * @param {Array|string|number} input Source array, string or number to be limited.
17295
- * @param {string|number} limit The length of the returned array or string. If the `limit` number
17296
- * is positive, `limit` number of items from the beginning of the source array/string are copied.
17297
- * If the number is negative, `limit` number of items from the end of the source array/string
17298
- * are copied. The `limit` will be trimmed if it exceeds `array.length`
17299
- * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array
17300
- * had less than `limit` elements.
17301
- *
17302
- * @example
17303
- <example module="limitToExample">
17304
- <file name="index.html">
17305
- <script>
17306
- angular.module('limitToExample', [])
17307
- .controller('ExampleController', ['$scope', function($scope) {
17308
- $scope.numbers = [1,2,3,4,5,6,7,8,9];
17309
- $scope.letters = "abcdefghi";
17310
- $scope.longNumber = 2345432342;
17311
- $scope.numLimit = 3;
17312
- $scope.letterLimit = 3;
17313
- $scope.longNumberLimit = 3;
17314
- }]);
17315
- </script>
17316
- <div ng-controller="ExampleController">
17317
- Limit {{numbers}} to: <input type="number" step="1" ng-model="numLimit">
17318
- <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>
17319
- Limit {{letters}} to: <input type="number" step="1" ng-model="letterLimit">
17320
- <p>Output letters: {{ letters | limitTo:letterLimit }}</p>
17321
- Limit {{longNumber}} to: <input type="number" step="1" ng-model="longNumberLimit">
17322
- <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p>
17323
- </div>
17324
- </file>
17325
- <file name="protractor.js" type="protractor">
17326
- var numLimitInput = element(by.model('numLimit'));
17327
- var letterLimitInput = element(by.model('letterLimit'));
17328
- var longNumberLimitInput = element(by.model('longNumberLimit'));
17329
- var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));
17330
- var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));
17331
- var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit'));
17332
-
17333
- it('should limit the number array to first three items', function() {
17334
- expect(numLimitInput.getAttribute('value')).toBe('3');
17335
- expect(letterLimitInput.getAttribute('value')).toBe('3');
17336
- expect(longNumberLimitInput.getAttribute('value')).toBe('3');
17337
- expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');
17338
- expect(limitedLetters.getText()).toEqual('Output letters: abc');
17339
- expect(limitedLongNumber.getText()).toEqual('Output long number: 234');
17340
- });
17341
-
17342
- // There is a bug in safari and protractor that doesn't like the minus key
17343
- // it('should update the output when -3 is entered', function() {
17344
- // numLimitInput.clear();
17345
- // numLimitInput.sendKeys('-3');
17346
- // letterLimitInput.clear();
17347
- // letterLimitInput.sendKeys('-3');
17348
- // longNumberLimitInput.clear();
17349
- // longNumberLimitInput.sendKeys('-3');
17350
- // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');
17351
- // expect(limitedLetters.getText()).toEqual('Output letters: ghi');
17352
- // expect(limitedLongNumber.getText()).toEqual('Output long number: 342');
17353
- // });
17354
-
17355
- it('should not exceed the maximum size of input array', function() {
17356
- numLimitInput.clear();
17357
- numLimitInput.sendKeys('100');
17358
- letterLimitInput.clear();
17359
- letterLimitInput.sendKeys('100');
17360
- longNumberLimitInput.clear();
17361
- longNumberLimitInput.sendKeys('100');
17362
- expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');
17363
- expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');
17364
- expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342');
17365
- });
17366
- </file>
17367
- </example>
17368
-*/
17369
-function limitToFilter() {
17370
- return function(input, limit) {
17371
- if (isNumber(input)) input = input.toString();
17372
- if (!isArray(input) && !isString(input)) return input;
17373
-
17374
- if (Math.abs(Number(limit)) === Infinity) {
17375
- limit = Number(limit);
17376
- } else {
17377
- limit = int(limit);
17378
- }
17379
-
17380
- if (isString(input)) {
17381
- //NaN check on limit
17382
- if (limit) {
17383
- return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);
17384
- } else {
17385
- return "";
17386
- }
17387
- }
17388
-
17389
- var out = [],
17390
- i, n;
17391
-
17392
- // if abs(limit) exceeds maximum length, trim it
17393
- if (limit > input.length)
17394
- limit = input.length;
17395
- else if (limit < -input.length)
17396
- limit = -input.length;
17397
-
17398
- if (limit > 0) {
17399
- i = 0;
17400
- n = limit;
17401
- } else {
17402
- i = input.length + limit;
17403
- n = input.length;
17404
- }
17405
-
17406
- for (; i < n; i++) {
17407
- out.push(input[i]);
17408
- }
17409
-
17410
- return out;
17411
- };
17412
-}
17413
-
17414
-/**
17415
- * @ngdoc filter
17416
- * @name orderBy
17417
- * @kind function
17418
- *
17419
- * @description
17420
- * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically
17421
- * for strings and numerically for numbers. Note: if you notice numbers are not being sorted
17422
- * correctly, make sure they are actually being saved as numbers and not strings.
17423
- *
17424
- * @param {Array} array The array to sort.
17425
- * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be
17426
- * used by the comparator to determine the order of elements.
17427
- *
17428
- * Can be one of:
17429
- *
17430
- * - `function`: Getter function. The result of this function will be sorted using the
17431
- * `<`, `=`, `>` operator.
17432
- * - `string`: An Angular expression. The result of this expression is used to compare elements
17433
- * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by
17434
- * 3 first characters of a property called `name`). The result of a constant expression
17435
- * is interpreted as a property name to be used in comparisons (for example `"special name"`
17436
- * to sort object by the value of their `special name` property). An expression can be
17437
- * optionally prefixed with `+` or `-` to control ascending or descending sort order
17438
- * (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array
17439
- * element itself is used to compare where sorting.
17440
- * - `Array`: An array of function or string predicates. The first predicate in the array
17441
- * is used for sorting, but when two items are equivalent, the next predicate is used.
17442
- *
17443
- * If the predicate is missing or empty then it defaults to `'+'`.
17444
- *
17445
- * @param {boolean=} reverse Reverse the order of the array.
17446
- * @returns {Array} Sorted copy of the source array.
17447
- *
17448
- * @example
17449
- <example module="orderByExample">
17450
- <file name="index.html">
17451
- <script>
17452
- angular.module('orderByExample', [])
17453
- .controller('ExampleController', ['$scope', function($scope) {
17454
- $scope.friends =
17455
- [{name:'John', phone:'555-1212', age:10},
17456
- {name:'Mary', phone:'555-9876', age:19},
17457
- {name:'Mike', phone:'555-4321', age:21},
17458
- {name:'Adam', phone:'555-5678', age:35},
17459
- {name:'Julie', phone:'555-8765', age:29}];
17460
- $scope.predicate = '-age';
17461
- }]);
17462
- </script>
17463
- <div ng-controller="ExampleController">
17464
- <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
17465
- <hr/>
17466
- [ <a href="" ng-click="predicate=''">unsorted</a> ]
17467
- <table class="friend">
17468
- <tr>
17469
- <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a>
17470
- (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th>
17471
- <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th>
17472
- <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th>
17473
- </tr>
17474
- <tr ng-repeat="friend in friends | orderBy:predicate:reverse">
17475
- <td>{{friend.name}}</td>
17476
- <td>{{friend.phone}}</td>
17477
- <td>{{friend.age}}</td>
17478
- </tr>
17479
- </table>
17480
- </div>
17481
- </file>
17482
- </example>
17483
- *
17484
- * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the
17485
- * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the
17486
- * desired parameters.
17487
- *
17488
- * Example:
17489
- *
17490
- * @example
17491
- <example module="orderByExample">
17492
- <file name="index.html">
17493
- <div ng-controller="ExampleController">
17494
- <table class="friend">
17495
- <tr>
17496
- <th><a href="" ng-click="reverse=false;order('name', false)">Name</a>
17497
- (<a href="" ng-click="order('-name',false)">^</a>)</th>
17498
- <th><a href="" ng-click="reverse=!reverse;order('phone', reverse)">Phone Number</a></th>
17499
- <th><a href="" ng-click="reverse=!reverse;order('age',reverse)">Age</a></th>
17500
- </tr>
17501
- <tr ng-repeat="friend in friends">
17502
- <td>{{friend.name}}</td>
17503
- <td>{{friend.phone}}</td>
17504
- <td>{{friend.age}}</td>
17505
- </tr>
17506
- </table>
17507
- </div>
17508
- </file>
17509
-
17510
- <file name="script.js">
17511
- angular.module('orderByExample', [])
17512
- .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) {
17513
- var orderBy = $filter('orderBy');
17514
- $scope.friends = [
17515
- { name: 'John', phone: '555-1212', age: 10 },
17516
- { name: 'Mary', phone: '555-9876', age: 19 },
17517
- { name: 'Mike', phone: '555-4321', age: 21 },
17518
- { name: 'Adam', phone: '555-5678', age: 35 },
17519
- { name: 'Julie', phone: '555-8765', age: 29 }
17520
- ];
17521
- $scope.order = function(predicate, reverse) {
17522
- $scope.friends = orderBy($scope.friends, predicate, reverse);
17523
- };
17524
- $scope.order('-age',false);
17525
- }]);
17526
- </file>
17527
-</example>
17528
- */
17529
-orderByFilter.$inject = ['$parse'];
17530
-function orderByFilter($parse) {
17531
- return function(array, sortPredicate, reverseOrder) {
17532
- if (!(isArrayLike(array))) return array;
17533
- sortPredicate = isArray(sortPredicate) ? sortPredicate : [sortPredicate];
17534
- if (sortPredicate.length === 0) { sortPredicate = ['+']; }
17535
- sortPredicate = sortPredicate.map(function(predicate) {
17536
- var descending = false, get = predicate || identity;
17537
- if (isString(predicate)) {
17538
- if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {
17539
- descending = predicate.charAt(0) == '-';
17540
- predicate = predicate.substring(1);
17541
- }
17542
- if (predicate === '') {
17543
- // Effectively no predicate was passed so we compare identity
17544
- return reverseComparator(function(a, b) {
17545
- return compare(a, b);
17546
- }, descending);
17547
- }
17548
- get = $parse(predicate);
17549
- if (get.constant) {
17550
- var key = get();
17551
- return reverseComparator(function(a, b) {
17552
- return compare(a[key], b[key]);
17553
- }, descending);
17554
- }
17555
- }
17556
- return reverseComparator(function(a, b) {
17557
- return compare(get(a),get(b));
17558
- }, descending);
17559
- });
17560
- return slice.call(array).sort(reverseComparator(comparator, reverseOrder));
17561
-
17562
- function comparator(o1, o2) {
17563
- for (var i = 0; i < sortPredicate.length; i++) {
17564
- var comp = sortPredicate[i](o1, o2);
17565
- if (comp !== 0) return comp;
17566
- }
17567
- return 0;
17568
- }
17569
- function reverseComparator(comp, descending) {
17570
- return descending
17571
- ? function(a, b) {return comp(b,a);}
17572
- : comp;
17573
- }
17574
- function compare(v1, v2) {
17575
- var t1 = typeof v1;
17576
- var t2 = typeof v2;
17577
- // Prepare values for Abstract Relational Comparison
17578
- // (http://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5):
17579
- // If the resulting values are identical, return 0 to prevent
17580
- // incorrect re-ordering.
17581
- if (t1 === t2 && t1 === "object") {
17582
- // If types are both numbers, emulate abstract ToPrimitive() operation
17583
- // in order to get primitive values suitable for comparison
17584
- t1 = typeof (v1.valueOf ? v1 = v1.valueOf() : v1);
17585
- t2 = typeof (v2.valueOf ? v2 = v2.valueOf() : v2);
17586
- if (t1 === t2 && t1 === "object") {
17587
- // Object.prototype.valueOf will return the original object, by
17588
- // default. If we do not receive a primitive value, use ToString()
17589
- // instead.
17590
- t1 = typeof (v1.toString ? v1 = v1.toString() : v1);
17591
- t2 = typeof (v2.toString ? v2 = v2.toString() : v2);
17592
-
17593
- // If the end result of toString() for each item is the same, do not
17594
- // perform relational comparison, and do not re-order objects.
17595
- if (t1 === t2 && v1 === v2 || t1 === "object") return 0;
17596
- }
17597
- }
17598
- if (t1 === t2) {
17599
- if (t1 === "string") {
17600
- v1 = v1.toLowerCase();
17601
- v2 = v2.toLowerCase();
17602
- }
17603
- if (v1 === v2) return 0;
17604
- return v1 < v2 ? -1 : 1;
17605
- } else {
17606
- return t1 < t2 ? -1 : 1;
17607
- }
17608
- }
17609
- };
17610
-}
17611
-
17612
-function ngDirective(directive) {
17613
- if (isFunction(directive)) {
17614
- directive = {
17615
- link: directive
17616
- };
17617
- }
17618
- directive.restrict = directive.restrict || 'AC';
17619
- return valueFn(directive);
17620
-}
17621
-
17622
-/**
17623
- * @ngdoc directive
17624
- * @name a
17625
- * @restrict E
17626
- *
17627
- * @description
17628
- * Modifies the default behavior of the html A tag so that the default action is prevented when
17629
- * the href attribute is empty.
17630
- *
17631
- * This change permits the easy creation of action links with the `ngClick` directive
17632
- * without changing the location or causing page reloads, e.g.:
17633
- * `<a href="" ng-click="list.addItem()">Add Item</a>`
17634
- */
17635
-var htmlAnchorDirective = valueFn({
17636
- restrict: 'E',
17637
- compile: function(element, attr) {
17638
- if (!attr.href && !attr.xlinkHref && !attr.name) {
17639
- return function(scope, element) {
17640
- // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
17641
- var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
17642
- 'xlink:href' : 'href';
17643
- element.on('click', function(event) {
17644
- // if we have no href url, then don't navigate anywhere.
17645
- if (!element.attr(href)) {
17646
- event.preventDefault();
17647
- }
17648
- });
17649
- };
17650
- }
17651
- }
17652
-});
17653
-
17654
-/**
17655
- * @ngdoc directive
17656
- * @name ngHref
17657
- * @restrict A
17658
- * @priority 99
17659
- *
17660
- * @description
17661
- * Using Angular markup like `{{hash}}` in an href attribute will
17662
- * make the link go to the wrong URL if the user clicks it before
17663
- * Angular has a chance to replace the `{{hash}}` markup with its
17664
- * value. Until Angular replaces the markup the link will be broken
17665
- * and will most likely return a 404 error. The `ngHref` directive
17666
- * solves this problem.
17667
- *
17668
- * The wrong way to write it:
17669
- * ```html
17670
- * <a href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
17671
- * ```
17672
- *
17673
- * The correct way to write it:
17674
- * ```html
17675
- * <a ng-href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
17676
- * ```
17677
- *
17678
- * @element A
17679
- * @param {template} ngHref any string which can contain `{{}}` markup.
17680
- *
17681
- * @example
17682
- * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes
17683
- * in links and their different behaviors:
17684
- <example>
17685
- <file name="index.html">
17686
- <input ng-model="value" /><br />
17687
- <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />
17688
- <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br />
17689
- <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br />
17690
- <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br />
17691
- <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />
17692
- <a id="link-6" ng-href="{{value}}">link</a> (link, change location)
17693
- </file>
17694
- <file name="protractor.js" type="protractor">
17695
- it('should execute ng-click but not reload when href without value', function() {
17696
- element(by.id('link-1')).click();
17697
- expect(element(by.model('value')).getAttribute('value')).toEqual('1');
17698
- expect(element(by.id('link-1')).getAttribute('href')).toBe('');
17699
- });
17700
-
17701
- it('should execute ng-click but not reload when href empty string', function() {
17702
- element(by.id('link-2')).click();
17703
- expect(element(by.model('value')).getAttribute('value')).toEqual('2');
17704
- expect(element(by.id('link-2')).getAttribute('href')).toBe('');
17705
- });
17706
-
17707
- it('should execute ng-click and change url when ng-href specified', function() {
17708
- expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/);
17709
-
17710
- element(by.id('link-3')).click();
17711
-
17712
- // At this point, we navigate away from an Angular page, so we need
17713
- // to use browser.driver to get the base webdriver.
17714
-
17715
- browser.wait(function() {
17716
- return browser.driver.getCurrentUrl().then(function(url) {
17717
- return url.match(/\/123$/);
17718
- });
17719
- }, 5000, 'page should navigate to /123');
17720
- });
17721
-
17722
- xit('should execute ng-click but not reload when href empty string and name specified', function() {
17723
- element(by.id('link-4')).click();
17724
- expect(element(by.model('value')).getAttribute('value')).toEqual('4');
17725
- expect(element(by.id('link-4')).getAttribute('href')).toBe('');
17726
- });
17727
-
17728
- it('should execute ng-click but not reload when no href but name specified', function() {
17729
- element(by.id('link-5')).click();
17730
- expect(element(by.model('value')).getAttribute('value')).toEqual('5');
17731
- expect(element(by.id('link-5')).getAttribute('href')).toBe(null);
17732
- });
17733
-
17734
- it('should only change url when only ng-href', function() {
17735
- element(by.model('value')).clear();
17736
- element(by.model('value')).sendKeys('6');
17737
- expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/);
17738
-
17739
- element(by.id('link-6')).click();
17740
-
17741
- // At this point, we navigate away from an Angular page, so we need
17742
- // to use browser.driver to get the base webdriver.
17743
- browser.wait(function() {
17744
- return browser.driver.getCurrentUrl().then(function(url) {
17745
- return url.match(/\/6$/);
17746
- });
17747
- }, 5000, 'page should navigate to /6');
17748
- });
17749
- </file>
17750
- </example>
17751
- */
17752
-
17753
-/**
17754
- * @ngdoc directive
17755
- * @name ngSrc
17756
- * @restrict A
17757
- * @priority 99
17758
- *
17759
- * @description
17760
- * Using Angular markup like `{{hash}}` in a `src` attribute doesn't
17761
- * work right: The browser will fetch from the URL with the literal
17762
- * text `{{hash}}` until Angular replaces the expression inside
17763
- * `{{hash}}`. The `ngSrc` directive solves this problem.
17764
- *
17765
- * The buggy way to write it:
17766
- * ```html
17767
- * <img src="http://www.gravatar.com/avatar/{{hash}}"/>
17768
- * ```
17769
- *
17770
- * The correct way to write it:
17771
- * ```html
17772
- * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/>
17773
- * ```
17774
- *
17775
- * @element IMG
17776
- * @param {template} ngSrc any string which can contain `{{}}` markup.
17777
- */
17778
-
17779
-/**
17780
- * @ngdoc directive
17781
- * @name ngSrcset
17782
- * @restrict A
17783
- * @priority 99
17784
- *
17785
- * @description
17786
- * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't
17787
- * work right: The browser will fetch from the URL with the literal
17788
- * text `{{hash}}` until Angular replaces the expression inside
17789
- * `{{hash}}`. The `ngSrcset` directive solves this problem.
17790
- *
17791
- * The buggy way to write it:
17792
- * ```html
17793
- * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
17794
- * ```
17795
- *
17796
- * The correct way to write it:
17797
- * ```html
17798
- * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
17799
- * ```
17800
- *
17801
- * @element IMG
17802
- * @param {template} ngSrcset any string which can contain `{{}}` markup.
17803
- */
17804
-
17805
-/**
17806
- * @ngdoc directive
17807
- * @name ngDisabled
17808
- * @restrict A
17809
- * @priority 100
17810
- *
17811
- * @description
17812
- *
17813
- * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:
17814
- * ```html
17815
- * <div ng-init="scope = { isDisabled: false }">
17816
- * <button disabled="{{scope.isDisabled}}">Disabled</button>
17817
- * </div>
17818
- * ```
17819
- *
17820
- * The HTML specification does not require browsers to preserve the values of boolean attributes
17821
- * such as disabled. (Their presence means true and their absence means false.)
17822
- * If we put an Angular interpolation expression into such an attribute then the
17823
- * binding information would be lost when the browser removes the attribute.
17824
- * The `ngDisabled` directive solves this problem for the `disabled` attribute.
17825
- * This complementary directive is not removed by the browser and so provides
17826
- * a permanent reliable place to store the binding information.
17827
- *
17828
- * @example
17829
- <example>
17830
- <file name="index.html">
17831
- Click me to toggle: <input type="checkbox" ng-model="checked"><br/>
17832
- <button ng-model="button" ng-disabled="checked">Button</button>
17833
- </file>
17834
- <file name="protractor.js" type="protractor">
17835
- it('should toggle button', function() {
17836
- expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();
17837
- element(by.model('checked')).click();
17838
- expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();
17839
- });
17840
- </file>
17841
- </example>
17842
- *
17843
- * @element INPUT
17844
- * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,
17845
- * then special attribute "disabled" will be set on the element
17846
- */
17847
-
17848
-
17849
-/**
17850
- * @ngdoc directive
17851
- * @name ngChecked
17852
- * @restrict A
17853
- * @priority 100
17854
- *
17855
- * @description
17856
- * The HTML specification does not require browsers to preserve the values of boolean attributes
17857
- * such as checked. (Their presence means true and their absence means false.)
17858
- * If we put an Angular interpolation expression into such an attribute then the
17859
- * binding information would be lost when the browser removes the attribute.
17860
- * The `ngChecked` directive solves this problem for the `checked` attribute.
17861
- * This complementary directive is not removed by the browser and so provides
17862
- * a permanent reliable place to store the binding information.
17863
- * @example
17864
- <example>
17865
- <file name="index.html">
17866
- Check me to check both: <input type="checkbox" ng-model="master"><br/>
17867
- <input id="checkSlave" type="checkbox" ng-checked="master">
17868
- </file>
17869
- <file name="protractor.js" type="protractor">
17870
- it('should check both checkBoxes', function() {
17871
- expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();
17872
- element(by.model('master')).click();
17873
- expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();
17874
- });
17875
- </file>
17876
- </example>
17877
- *
17878
- * @element INPUT
17879
- * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,
17880
- * then special attribute "checked" will be set on the element
17881
- */
17882
-
17883
-
17884
-/**
17885
- * @ngdoc directive
17886
- * @name ngReadonly
17887
- * @restrict A
17888
- * @priority 100
17889
- *
17890
- * @description
17891
- * The HTML specification does not require browsers to preserve the values of boolean attributes
17892
- * such as readonly. (Their presence means true and their absence means false.)
17893
- * If we put an Angular interpolation expression into such an attribute then the
17894
- * binding information would be lost when the browser removes the attribute.
17895
- * The `ngReadonly` directive solves this problem for the `readonly` attribute.
17896
- * This complementary directive is not removed by the browser and so provides
17897
- * a permanent reliable place to store the binding information.
17898
- * @example
17899
- <example>
17900
- <file name="index.html">
17901
- Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/>
17902
- <input type="text" ng-readonly="checked" value="I'm Angular"/>
17903
- </file>
17904
- <file name="protractor.js" type="protractor">
17905
- it('should toggle readonly attr', function() {
17906
- expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy();
17907
- element(by.model('checked')).click();
17908
- expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy();
17909
- });
17910
- </file>
17911
- </example>
17912
- *
17913
- * @element INPUT
17914
- * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,
17915
- * then special attribute "readonly" will be set on the element
17916
- */
17917
-
17918
-
17919
-/**
17920
- * @ngdoc directive
17921
- * @name ngSelected
17922
- * @restrict A
17923
- * @priority 100
17924
- *
17925
- * @description
17926
- * The HTML specification does not require browsers to preserve the values of boolean attributes
17927
- * such as selected. (Their presence means true and their absence means false.)
17928
- * If we put an Angular interpolation expression into such an attribute then the
17929
- * binding information would be lost when the browser removes the attribute.
17930
- * The `ngSelected` directive solves this problem for the `selected` attribute.
17931
- * This complementary directive is not removed by the browser and so provides
17932
- * a permanent reliable place to store the binding information.
17933
- *
17934
- * @example
17935
- <example>
17936
- <file name="index.html">
17937
- Check me to select: <input type="checkbox" ng-model="selected"><br/>
17938
- <select>
17939
- <option>Hello!</option>
17940
- <option id="greet" ng-selected="selected">Greetings!</option>
17941
- </select>
17942
- </file>
17943
- <file name="protractor.js" type="protractor">
17944
- it('should select Greetings!', function() {
17945
- expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();
17946
- element(by.model('selected')).click();
17947
- expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();
17948
- });
17949
- </file>
17950
- </example>
17951
- *
17952
- * @element OPTION
17953
- * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,
17954
- * then special attribute "selected" will be set on the element
17955
- */
17956
-
17957
-/**
17958
- * @ngdoc directive
17959
- * @name ngOpen
17960
- * @restrict A
17961
- * @priority 100
17962
- *
17963
- * @description
17964
- * The HTML specification does not require browsers to preserve the values of boolean attributes
17965
- * such as open. (Their presence means true and their absence means false.)
17966
- * If we put an Angular interpolation expression into such an attribute then the
17967
- * binding information would be lost when the browser removes the attribute.
17968
- * The `ngOpen` directive solves this problem for the `open` attribute.
17969
- * This complementary directive is not removed by the browser and so provides
17970
- * a permanent reliable place to store the binding information.
17971
- * @example
17972
- <example>
17973
- <file name="index.html">
17974
- Check me check multiple: <input type="checkbox" ng-model="open"><br/>
17975
- <details id="details" ng-open="open">
17976
- <summary>Show/Hide me</summary>
17977
- </details>
17978
- </file>
17979
- <file name="protractor.js" type="protractor">
17980
- it('should toggle open', function() {
17981
- expect(element(by.id('details')).getAttribute('open')).toBeFalsy();
17982
- element(by.model('open')).click();
17983
- expect(element(by.id('details')).getAttribute('open')).toBeTruthy();
17984
- });
17985
- </file>
17986
- </example>
17987
- *
17988
- * @element DETAILS
17989
- * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,
17990
- * then special attribute "open" will be set on the element
17991
- */
17992
-
17993
-var ngAttributeAliasDirectives = {};
17994
-
17995
-
17996
-// boolean attrs are evaluated
17997
-forEach(BOOLEAN_ATTR, function(propName, attrName) {
17998
- // binding to multiple is not supported
17999
- if (propName == "multiple") return;
18000
-
18001
- var normalized = directiveNormalize('ng-' + attrName);
18002
- ngAttributeAliasDirectives[normalized] = function() {
18003
- return {
18004
- restrict: 'A',
18005
- priority: 100,
18006
- link: function(scope, element, attr) {
18007
- scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
18008
- attr.$set(attrName, !!value);
18009
- });
18010
- }
18011
- };
18012
- };
18013
-});
18014
-
18015
-// aliased input attrs are evaluated
18016
-forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {
18017
- ngAttributeAliasDirectives[ngAttr] = function() {
18018
- return {
18019
- priority: 100,
18020
- link: function(scope, element, attr) {
18021
- //special case ngPattern when a literal regular expression value
18022
- //is used as the expression (this way we don't have to watch anything).
18023
- if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") {
18024
- var match = attr.ngPattern.match(REGEX_STRING_REGEXP);
18025
- if (match) {
18026
- attr.$set("ngPattern", new RegExp(match[1], match[2]));
18027
- return;
18028
- }
18029
- }
18030
-
18031
- scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) {
18032
- attr.$set(ngAttr, value);
18033
- });
18034
- }
18035
- };
18036
- };
18037
-});
18038
-
18039
-// ng-src, ng-srcset, ng-href are interpolated
18040
-forEach(['src', 'srcset', 'href'], function(attrName) {
18041
- var normalized = directiveNormalize('ng-' + attrName);
18042
- ngAttributeAliasDirectives[normalized] = function() {
18043
- return {
18044
- priority: 99, // it needs to run after the attributes are interpolated
18045
- link: function(scope, element, attr) {
18046
- var propName = attrName,
18047
- name = attrName;
18048
-
18049
- if (attrName === 'href' &&
18050
- toString.call(element.prop('href')) === '[object SVGAnimatedString]') {
18051
- name = 'xlinkHref';
18052
- attr.$attr[name] = 'xlink:href';
18053
- propName = null;
18054
- }
18055
-
18056
- attr.$observe(normalized, function(value) {
18057
- if (!value) {
18058
- if (attrName === 'href') {
18059
- attr.$set(name, null);
18060
- }
18061
- return;
18062
- }
18063
-
18064
- attr.$set(name, value);
18065
-
18066
- // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist
18067
- // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need
18068
- // to set the property as well to achieve the desired effect.
18069
- // we use attr[attrName] value since $set can sanitize the url.
18070
- if (msie && propName) element.prop(propName, attr[name]);
18071
- });
18072
- }
18073
- };
18074
- };
18075
-});
18076
-
18077
-/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true
18078
- */
18079
-var nullFormCtrl = {
18080
- $addControl: noop,
18081
- $$renameControl: nullFormRenameControl,
18082
- $removeControl: noop,
18083
- $setValidity: noop,
18084
- $setDirty: noop,
18085
- $setPristine: noop,
18086
- $setSubmitted: noop
18087
-},
18088
-SUBMITTED_CLASS = 'ng-submitted';
18089
-
18090
-function nullFormRenameControl(control, name) {
18091
- control.$name = name;
18092
-}
18093
-
18094
-/**
18095
- * @ngdoc type
18096
- * @name form.FormController
18097
- *
18098
- * @property {boolean} $pristine True if user has not interacted with the form yet.
18099
- * @property {boolean} $dirty True if user has already interacted with the form.
18100
- * @property {boolean} $valid True if all of the containing forms and controls are valid.
18101
- * @property {boolean} $invalid True if at least one containing control or form is invalid.
18102
- * @property {boolean} $submitted True if user has submitted the form even if its invalid.
18103
- *
18104
- * @property {Object} $error Is an object hash, containing references to controls or
18105
- * forms with failing validators, where:
18106
- *
18107
- * - keys are validation tokens (error names),
18108
- * - values are arrays of controls or forms that have a failing validator for given error name.
18109
- *
18110
- * Built-in validation tokens:
18111
- *
18112
- * - `email`
18113
- * - `max`
18114
- * - `maxlength`
18115
- * - `min`
18116
- * - `minlength`
18117
- * - `number`
18118
- * - `pattern`
18119
- * - `required`
18120
- * - `url`
18121
- * - `date`
18122
- * - `datetimelocal`
18123
- * - `time`
18124
- * - `week`
18125
- * - `month`
18126
- *
18127
- * @description
18128
- * `FormController` keeps track of all its controls and nested forms as well as the state of them,
18129
- * such as being valid/invalid or dirty/pristine.
18130
- *
18131
- * Each {@link ng.directive:form form} directive creates an instance
18132
- * of `FormController`.
18133
- *
18134
- */
18135
-//asks for $scope to fool the BC controller module
18136
-FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];
18137
-function FormController(element, attrs, $scope, $animate, $interpolate) {
18138
- var form = this,
18139
- controls = [];
18140
-
18141
- var parentForm = form.$$parentForm = element.parent().controller('form') || nullFormCtrl;
18142
-
18143
- // init state
18144
- form.$error = {};
18145
- form.$$success = {};
18146
- form.$pending = undefined;
18147
- form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);
18148
- form.$dirty = false;
18149
- form.$pristine = true;
18150
- form.$valid = true;
18151
- form.$invalid = false;
18152
- form.$submitted = false;
18153
-
18154
- parentForm.$addControl(form);
18155
-
18156
- /**
18157
- * @ngdoc method
18158
- * @name form.FormController#$rollbackViewValue
18159
- *
18160
- * @description
18161
- * Rollback all form controls pending updates to the `$modelValue`.
18162
- *
18163
- * Updates may be pending by a debounced event or because the input is waiting for a some future
18164
- * event defined in `ng-model-options`. This method is typically needed by the reset button of
18165
- * a form that uses `ng-model-options` to pend updates.
18166
- */
18167
- form.$rollbackViewValue = function() {
18168
- forEach(controls, function(control) {
18169
- control.$rollbackViewValue();
18170
- });
18171
- };
18172
-
18173
- /**
18174
- * @ngdoc method
18175
- * @name form.FormController#$commitViewValue
18176
- *
18177
- * @description
18178
- * Commit all form controls pending updates to the `$modelValue`.
18179
- *
18180
- * Updates may be pending by a debounced event or because the input is waiting for a some future
18181
- * event defined in `ng-model-options`. This method is rarely needed as `NgModelController`
18182
- * usually handles calling this in response to input events.
18183
- */
18184
- form.$commitViewValue = function() {
18185
- forEach(controls, function(control) {
18186
- control.$commitViewValue();
18187
- });
18188
- };
18189
-
18190
- /**
18191
- * @ngdoc method
18192
- * @name form.FormController#$addControl
18193
- *
18194
- * @description
18195
- * Register a control with the form.
18196
- *
18197
- * Input elements using ngModelController do this automatically when they are linked.
18198
- */
18199
- form.$addControl = function(control) {
18200
- // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored
18201
- // and not added to the scope. Now we throw an error.
18202
- assertNotHasOwnProperty(control.$name, 'input');
18203
- controls.push(control);
18204
-
18205
- if (control.$name) {
18206
- form[control.$name] = control;
18207
- }
18208
- };
18209
-
18210
- // Private API: rename a form control
18211
- form.$$renameControl = function(control, newName) {
18212
- var oldName = control.$name;
18213
-
18214
- if (form[oldName] === control) {
18215
- delete form[oldName];
18216
- }
18217
- form[newName] = control;
18218
- control.$name = newName;
18219
- };
18220
-
18221
- /**
18222
- * @ngdoc method
18223
- * @name form.FormController#$removeControl
18224
- *
18225
- * @description
18226
- * Deregister a control from the form.
18227
- *
18228
- * Input elements using ngModelController do this automatically when they are destroyed.
18229
- */
18230
- form.$removeControl = function(control) {
18231
- if (control.$name && form[control.$name] === control) {
18232
- delete form[control.$name];
18233
- }
18234
- forEach(form.$pending, function(value, name) {
18235
- form.$setValidity(name, null, control);
18236
- });
18237
- forEach(form.$error, function(value, name) {
18238
- form.$setValidity(name, null, control);
18239
- });
18240
-
18241
- arrayRemove(controls, control);
18242
- };
18243
-
18244
-
18245
- /**
18246
- * @ngdoc method
18247
- * @name form.FormController#$setValidity
18248
- *
18249
- * @description
18250
- * Sets the validity of a form control.
18251
- *
18252
- * This method will also propagate to parent forms.
18253
- */
18254
- addSetValidityMethod({
18255
- ctrl: this,
18256
- $element: element,
18257
- set: function(object, property, control) {
18258
- var list = object[property];
18259
- if (!list) {
18260
- object[property] = [control];
18261
- } else {
18262
- var index = list.indexOf(control);
18263
- if (index === -1) {
18264
- list.push(control);
18265
- }
18266
- }
18267
- },
18268
- unset: function(object, property, control) {
18269
- var list = object[property];
18270
- if (!list) {
18271
- return;
18272
- }
18273
- arrayRemove(list, control);
18274
- if (list.length === 0) {
18275
- delete object[property];
18276
- }
18277
- },
18278
- parentForm: parentForm,
18279
- $animate: $animate
18280
- });
18281
-
18282
- /**
18283
- * @ngdoc method
18284
- * @name form.FormController#$setDirty
18285
- *
18286
- * @description
18287
- * Sets the form to a dirty state.
18288
- *
18289
- * This method can be called to add the 'ng-dirty' class and set the form to a dirty
18290
- * state (ng-dirty class). This method will also propagate to parent forms.
18291
- */
18292
- form.$setDirty = function() {
18293
- $animate.removeClass(element, PRISTINE_CLASS);
18294
- $animate.addClass(element, DIRTY_CLASS);
18295
- form.$dirty = true;
18296
- form.$pristine = false;
18297
- parentForm.$setDirty();
18298
- };
18299
-
18300
- /**
18301
- * @ngdoc method
18302
- * @name form.FormController#$setPristine
18303
- *
18304
- * @description
18305
- * Sets the form to its pristine state.
18306
- *
18307
- * This method can be called to remove the 'ng-dirty' class and set the form to its pristine
18308
- * state (ng-pristine class). This method will also propagate to all the controls contained
18309
- * in this form.
18310
- *
18311
- * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after
18312
- * saving or resetting it.
18313
- */
18314
- form.$setPristine = function() {
18315
- $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);
18316
- form.$dirty = false;
18317
- form.$pristine = true;
18318
- form.$submitted = false;
18319
- forEach(controls, function(control) {
18320
- control.$setPristine();
18321
- });
18322
- };
18323
-
18324
- /**
18325
- * @ngdoc method
18326
- * @name form.FormController#$setUntouched
18327
- *
18328
- * @description
18329
- * Sets the form to its untouched state.
18330
- *
18331
- * This method can be called to remove the 'ng-touched' class and set the form controls to their
18332
- * untouched state (ng-untouched class).
18333
- *
18334
- * Setting a form controls back to their untouched state is often useful when setting the form
18335
- * back to its pristine state.
18336
- */
18337
- form.$setUntouched = function() {
18338
- forEach(controls, function(control) {
18339
- control.$setUntouched();
18340
- });
18341
- };
18342
-
18343
- /**
18344
- * @ngdoc method
18345
- * @name form.FormController#$setSubmitted
18346
- *
18347
- * @description
18348
- * Sets the form to its submitted state.
18349
- */
18350
- form.$setSubmitted = function() {
18351
- $animate.addClass(element, SUBMITTED_CLASS);
18352
- form.$submitted = true;
18353
- parentForm.$setSubmitted();
18354
- };
18355
-}
18356
-
18357
-/**
18358
- * @ngdoc directive
18359
- * @name ngForm
18360
- * @restrict EAC
18361
- *
18362
- * @description
18363
- * Nestable alias of {@link ng.directive:form `form`} directive. HTML
18364
- * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a
18365
- * sub-group of controls needs to be determined.
18366
- *
18367
- * Note: the purpose of `ngForm` is to group controls,
18368
- * but not to be a replacement for the `<form>` tag with all of its capabilities
18369
- * (e.g. posting to the server, ...).
18370
- *
18371
- * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into
18372
- * related scope, under this name.
18373
- *
18374
- */
18375
-
18376
- /**
18377
- * @ngdoc directive
18378
- * @name form
18379
- * @restrict E
18380
- *
18381
- * @description
18382
- * Directive that instantiates
18383
- * {@link form.FormController FormController}.
18384
- *
18385
- * If the `name` attribute is specified, the form controller is published onto the current scope under
18386
- * this name.
18387
- *
18388
- * # Alias: {@link ng.directive:ngForm `ngForm`}
18389
- *
18390
- * In Angular forms can be nested. This means that the outer form is valid when all of the child
18391
- * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so
18392
- * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to
18393
- * `<form>` but can be nested. This allows you to have nested forms, which is very useful when
18394
- * using Angular validation directives in forms that are dynamically generated using the
18395
- * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`
18396
- * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an
18397
- * `ngForm` directive and nest these in an outer `form` element.
18398
- *
18399
- *
18400
- * # CSS classes
18401
- * - `ng-valid` is set if the form is valid.
18402
- * - `ng-invalid` is set if the form is invalid.
18403
- * - `ng-pristine` is set if the form is pristine.
18404
- * - `ng-dirty` is set if the form is dirty.
18405
- * - `ng-submitted` is set if the form was submitted.
18406
- *
18407
- * Keep in mind that ngAnimate can detect each of these classes when added and removed.
18408
- *
18409
- *
18410
- * # Submitting a form and preventing the default action
18411
- *
18412
- * Since the role of forms in client-side Angular applications is different than in classical
18413
- * roundtrip apps, it is desirable for the browser not to translate the form submission into a full
18414
- * page reload that sends the data to the server. Instead some javascript logic should be triggered
18415
- * to handle the form submission in an application-specific way.
18416
- *
18417
- * For this reason, Angular prevents the default action (form submission to the server) unless the
18418
- * `<form>` element has an `action` attribute specified.
18419
- *
18420
- * You can use one of the following two ways to specify what javascript method should be called when
18421
- * a form is submitted:
18422
- *
18423
- * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element
18424
- * - {@link ng.directive:ngClick ngClick} directive on the first
18425
- * button or input field of type submit (input[type=submit])
18426
- *
18427
- * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}
18428
- * or {@link ng.directive:ngClick ngClick} directives.
18429
- * This is because of the following form submission rules in the HTML specification:
18430
- *
18431
- * - If a form has only one input field then hitting enter in this field triggers form submit
18432
- * (`ngSubmit`)
18433
- * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter
18434
- * doesn't trigger submit
18435
- * - if a form has one or more input fields and one or more buttons or input[type=submit] then
18436
- * hitting enter in any of the input fields will trigger the click handler on the *first* button or
18437
- * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)
18438
- *
18439
- * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is
18440
- * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
18441
- * to have access to the updated model.
18442
- *
18443
- * ## Animation Hooks
18444
- *
18445
- * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.
18446
- * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any
18447
- * other validations that are performed within the form. Animations in ngForm are similar to how
18448
- * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well
18449
- * as JS animations.
18450
- *
18451
- * The following example shows a simple way to utilize CSS transitions to style a form element
18452
- * that has been rendered as invalid after it has been validated:
18453
- *
18454
- * <pre>
18455
- * //be sure to include ngAnimate as a module to hook into more
18456
- * //advanced animations
18457
- * .my-form {
18458
- * transition:0.5s linear all;
18459
- * background: white;
18460
- * }
18461
- * .my-form.ng-invalid {
18462
- * background: red;
18463
- * color:white;
18464
- * }
18465
- * </pre>
18466
- *
18467
- * @example
18468
- <example deps="angular-animate.js" animations="true" fixBase="true" module="formExample">
18469
- <file name="index.html">
18470
- <script>
18471
- angular.module('formExample', [])
18472
- .controller('FormController', ['$scope', function($scope) {
18473
- $scope.userType = 'guest';
18474
- }]);
18475
- </script>
18476
- <style>
18477
- .my-form {
18478
- -webkit-transition:all linear 0.5s;
18479
- transition:all linear 0.5s;
18480
- background: transparent;
18481
- }
18482
- .my-form.ng-invalid {
18483
- background: red;
18484
- }
18485
- </style>
18486
- <form name="myForm" ng-controller="FormController" class="my-form">
18487
- userType: <input name="input" ng-model="userType" required>
18488
- <span class="error" ng-show="myForm.input.$error.required">Required!</span><br>
18489
- <tt>userType = {{userType}}</tt><br>
18490
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>
18491
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>
18492
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br>
18493
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>
18494
- </form>
18495
- </file>
18496
- <file name="protractor.js" type="protractor">
18497
- it('should initialize to model', function() {
18498
- var userType = element(by.binding('userType'));
18499
- var valid = element(by.binding('myForm.input.$valid'));
18500
-
18501
- expect(userType.getText()).toContain('guest');
18502
- expect(valid.getText()).toContain('true');
18503
- });
18504
-
18505
- it('should be invalid if empty', function() {
18506
- var userType = element(by.binding('userType'));
18507
- var valid = element(by.binding('myForm.input.$valid'));
18508
- var userInput = element(by.model('userType'));
18509
-
18510
- userInput.clear();
18511
- userInput.sendKeys('');
18512
-
18513
- expect(userType.getText()).toEqual('userType =');
18514
- expect(valid.getText()).toContain('false');
18515
- });
18516
- </file>
18517
- </example>
18518
- *
18519
- * @param {string=} name Name of the form. If specified, the form controller will be published into
18520
- * related scope, under this name.
18521
- */
18522
-var formDirectiveFactory = function(isNgForm) {
18523
- return ['$timeout', function($timeout) {
18524
- var formDirective = {
18525
- name: 'form',
18526
- restrict: isNgForm ? 'EAC' : 'E',
18527
- controller: FormController,
18528
- compile: function ngFormCompile(formElement) {
18529
- // Setup initial state of the control
18530
- formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);
18531
-
18532
- return {
18533
- pre: function ngFormPreLink(scope, formElement, attr, controller) {
18534
- // if `action` attr is not present on the form, prevent the default action (submission)
18535
- if (!('action' in attr)) {
18536
- // we can't use jq events because if a form is destroyed during submission the default
18537
- // action is not prevented. see #1238
18538
- //
18539
- // IE 9 is not affected because it doesn't fire a submit event and try to do a full
18540
- // page reload if the form was destroyed by submission of the form via a click handler
18541
- // on a button in the form. Looks like an IE9 specific bug.
18542
- var handleFormSubmission = function(event) {
18543
- scope.$apply(function() {
18544
- controller.$commitViewValue();
18545
- controller.$setSubmitted();
18546
- });
18547
-
18548
- event.preventDefault();
18549
- };
18550
-
18551
- addEventListenerFn(formElement[0], 'submit', handleFormSubmission);
18552
-
18553
- // unregister the preventDefault listener so that we don't not leak memory but in a
18554
- // way that will achieve the prevention of the default action.
18555
- formElement.on('$destroy', function() {
18556
- $timeout(function() {
18557
- removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);
18558
- }, 0, false);
18559
- });
18560
- }
18561
-
18562
- var parentFormCtrl = controller.$$parentForm,
18563
- alias = controller.$name;
18564
-
18565
- if (alias) {
18566
- setter(scope, alias, controller, alias);
18567
- attr.$observe(attr.name ? 'name' : 'ngForm', function(newValue) {
18568
- if (alias === newValue) return;
18569
- setter(scope, alias, undefined, alias);
18570
- alias = newValue;
18571
- setter(scope, alias, controller, alias);
18572
- parentFormCtrl.$$renameControl(controller, alias);
18573
- });
18574
- }
18575
- formElement.on('$destroy', function() {
18576
- parentFormCtrl.$removeControl(controller);
18577
- if (alias) {
18578
- setter(scope, alias, undefined, alias);
18579
- }
18580
- extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards
18581
- });
18582
- }
18583
- };
18584
- }
18585
- };
18586
-
18587
- return formDirective;
18588
- }];
18589
-};
18590
-
18591
-var formDirective = formDirectiveFactory();
18592
-var ngFormDirective = formDirectiveFactory(true);
18593
-
18594
-/* global VALID_CLASS: true,
18595
- INVALID_CLASS: true,
18596
- PRISTINE_CLASS: true,
18597
- DIRTY_CLASS: true,
18598
- UNTOUCHED_CLASS: true,
18599
- TOUCHED_CLASS: true,
18600
-*/
18601
-
18602
-// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
18603
-var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
18604
-var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;
18605
-var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
18606
-var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/;
18607
-var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/;
18608
-var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
18609
-var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/;
18610
-var MONTH_REGEXP = /^(\d{4})-(\d\d)$/;
18611
-var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
18612
-var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
18613
-
18614
-var $ngModelMinErr = new minErr('ngModel');
18615
-
18616
-var inputType = {
18617
-
18618
- /**
18619
- * @ngdoc input
18620
- * @name input[text]
18621
- *
18622
- * @description
18623
- * Standard HTML text input with angular data binding, inherited by most of the `input` elements.
18624
- *
18625
- *
18626
- * @param {string} ngModel Assignable angular expression to data-bind to.
18627
- * @param {string=} name Property name of the form under which the control is published.
18628
- * @param {string=} required Adds `required` validation error key if the value is not entered.
18629
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18630
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18631
- * `required` when you want to data-bind to the `required` attribute.
18632
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
18633
- * minlength.
18634
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
18635
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
18636
- * any length.
18637
- * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
18638
- * that contains the regular expression body that will be converted to a regular expression
18639
- * as in the ngPattern directive.
18640
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
18641
- * a RegExp found by evaluating the Angular expression given in the attribute value.
18642
- * If the expression evaluates to a RegExp object then this is used directly.
18643
- * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
18644
- * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
18645
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
18646
- * interaction with the input element.
18647
- * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
18648
- * This parameter is ignored for input[type=password] controls, which will never trim the
18649
- * input.
18650
- *
18651
- * @example
18652
- <example name="text-input-directive" module="textInputExample">
18653
- <file name="index.html">
18654
- <script>
18655
- angular.module('textInputExample', [])
18656
- .controller('ExampleController', ['$scope', function($scope) {
18657
- $scope.text = 'guest';
18658
- $scope.word = /^\s*\w*\s*$/;
18659
- }]);
18660
- </script>
18661
- <form name="myForm" ng-controller="ExampleController">
18662
- Single word: <input type="text" name="input" ng-model="text"
18663
- ng-pattern="word" required ng-trim="false">
18664
- <span class="error" ng-show="myForm.input.$error.required">
18665
- Required!</span>
18666
- <span class="error" ng-show="myForm.input.$error.pattern">
18667
- Single word only!</span>
18668
-
18669
- <tt>text = {{text}}</tt><br/>
18670
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18671
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18672
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18673
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18674
- </form>
18675
- </file>
18676
- <file name="protractor.js" type="protractor">
18677
- var text = element(by.binding('text'));
18678
- var valid = element(by.binding('myForm.input.$valid'));
18679
- var input = element(by.model('text'));
18680
-
18681
- it('should initialize to model', function() {
18682
- expect(text.getText()).toContain('guest');
18683
- expect(valid.getText()).toContain('true');
18684
- });
18685
-
18686
- it('should be invalid if empty', function() {
18687
- input.clear();
18688
- input.sendKeys('');
18689
-
18690
- expect(text.getText()).toEqual('text =');
18691
- expect(valid.getText()).toContain('false');
18692
- });
18693
-
18694
- it('should be invalid if multi word', function() {
18695
- input.clear();
18696
- input.sendKeys('hello world');
18697
-
18698
- expect(valid.getText()).toContain('false');
18699
- });
18700
- </file>
18701
- </example>
18702
- */
18703
- 'text': textInputType,
18704
-
18705
- /**
18706
- * @ngdoc input
18707
- * @name input[date]
18708
- *
18709
- * @description
18710
- * Input with date validation and transformation. In browsers that do not yet support
18711
- * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601
18712
- * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many
18713
- * modern browsers do not yet support this input type, it is important to provide cues to users on the
18714
- * expected input format via a placeholder or label.
18715
- *
18716
- * The model must always be a Date object, otherwise Angular will throw an error.
18717
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
18718
- *
18719
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
18720
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
18721
- *
18722
- * @param {string} ngModel Assignable angular expression to data-bind to.
18723
- * @param {string=} name Property name of the form under which the control is published.
18724
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
18725
- * valid ISO date string (yyyy-MM-dd).
18726
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
18727
- * a valid ISO date string (yyyy-MM-dd).
18728
- * @param {string=} required Sets `required` validation error key if the value is not entered.
18729
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18730
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18731
- * `required` when you want to data-bind to the `required` attribute.
18732
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
18733
- * interaction with the input element.
18734
- *
18735
- * @example
18736
- <example name="date-input-directive" module="dateInputExample">
18737
- <file name="index.html">
18738
- <script>
18739
- angular.module('dateInputExample', [])
18740
- .controller('DateController', ['$scope', function($scope) {
18741
- $scope.value = new Date(2013, 9, 22);
18742
- }]);
18743
- </script>
18744
- <form name="myForm" ng-controller="DateController as dateCtrl">
18745
- Pick a date in 2013:
18746
- <input type="date" id="exampleInput" name="input" ng-model="value"
18747
- placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required />
18748
- <span class="error" ng-show="myForm.input.$error.required">
18749
- Required!</span>
18750
- <span class="error" ng-show="myForm.input.$error.date">
18751
- Not a valid date!</span>
18752
- <tt>value = {{value | date: "yyyy-MM-dd"}}</tt><br/>
18753
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18754
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18755
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18756
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18757
- </form>
18758
- </file>
18759
- <file name="protractor.js" type="protractor">
18760
- var value = element(by.binding('value | date: "yyyy-MM-dd"'));
18761
- var valid = element(by.binding('myForm.input.$valid'));
18762
- var input = element(by.model('value'));
18763
-
18764
- // currently protractor/webdriver does not support
18765
- // sending keys to all known HTML5 input controls
18766
- // for various browsers (see https://github.com/angular/protractor/issues/562).
18767
- function setInput(val) {
18768
- // set the value of the element and force validation.
18769
- var scr = "var ipt = document.getElementById('exampleInput'); " +
18770
- "ipt.value = '" + val + "';" +
18771
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
18772
- browser.executeScript(scr);
18773
- }
18774
-
18775
- it('should initialize to model', function() {
18776
- expect(value.getText()).toContain('2013-10-22');
18777
- expect(valid.getText()).toContain('myForm.input.$valid = true');
18778
- });
18779
-
18780
- it('should be invalid if empty', function() {
18781
- setInput('');
18782
- expect(value.getText()).toEqual('value =');
18783
- expect(valid.getText()).toContain('myForm.input.$valid = false');
18784
- });
18785
-
18786
- it('should be invalid if over max', function() {
18787
- setInput('2015-01-01');
18788
- expect(value.getText()).toContain('');
18789
- expect(valid.getText()).toContain('myForm.input.$valid = false');
18790
- });
18791
- </file>
18792
- </example>
18793
- */
18794
- 'date': createDateInputType('date', DATE_REGEXP,
18795
- createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']),
18796
- 'yyyy-MM-dd'),
18797
-
18798
- /**
18799
- * @ngdoc input
18800
- * @name input[datetime-local]
18801
- *
18802
- * @description
18803
- * Input with datetime validation and transformation. In browsers that do not yet support
18804
- * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
18805
- * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.
18806
- *
18807
- * The model must always be a Date object, otherwise Angular will throw an error.
18808
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
18809
- *
18810
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
18811
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
18812
- *
18813
- * @param {string} ngModel Assignable angular expression to data-bind to.
18814
- * @param {string=} name Property name of the form under which the control is published.
18815
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
18816
- * valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).
18817
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
18818
- * a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).
18819
- * @param {string=} required Sets `required` validation error key if the value is not entered.
18820
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18821
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18822
- * `required` when you want to data-bind to the `required` attribute.
18823
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
18824
- * interaction with the input element.
18825
- *
18826
- * @example
18827
- <example name="datetimelocal-input-directive" module="dateExample">
18828
- <file name="index.html">
18829
- <script>
18830
- angular.module('dateExample', [])
18831
- .controller('DateController', ['$scope', function($scope) {
18832
- $scope.value = new Date(2010, 11, 28, 14, 57);
18833
- }]);
18834
- </script>
18835
- <form name="myForm" ng-controller="DateController as dateCtrl">
18836
- Pick a date between in 2013:
18837
- <input type="datetime-local" id="exampleInput" name="input" ng-model="value"
18838
- placeholder="yyyy-MM-ddTHH:mm:ss" min="2001-01-01T00:00:00" max="2013-12-31T00:00:00" required />
18839
- <span class="error" ng-show="myForm.input.$error.required">
18840
- Required!</span>
18841
- <span class="error" ng-show="myForm.input.$error.datetimelocal">
18842
- Not a valid date!</span>
18843
- <tt>value = {{value | date: "yyyy-MM-ddTHH:mm:ss"}}</tt><br/>
18844
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18845
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18846
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18847
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18848
- </form>
18849
- </file>
18850
- <file name="protractor.js" type="protractor">
18851
- var value = element(by.binding('value | date: "yyyy-MM-ddTHH:mm:ss"'));
18852
- var valid = element(by.binding('myForm.input.$valid'));
18853
- var input = element(by.model('value'));
18854
-
18855
- // currently protractor/webdriver does not support
18856
- // sending keys to all known HTML5 input controls
18857
- // for various browsers (https://github.com/angular/protractor/issues/562).
18858
- function setInput(val) {
18859
- // set the value of the element and force validation.
18860
- var scr = "var ipt = document.getElementById('exampleInput'); " +
18861
- "ipt.value = '" + val + "';" +
18862
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
18863
- browser.executeScript(scr);
18864
- }
18865
-
18866
- it('should initialize to model', function() {
18867
- expect(value.getText()).toContain('2010-12-28T14:57:00');
18868
- expect(valid.getText()).toContain('myForm.input.$valid = true');
18869
- });
18870
-
18871
- it('should be invalid if empty', function() {
18872
- setInput('');
18873
- expect(value.getText()).toEqual('value =');
18874
- expect(valid.getText()).toContain('myForm.input.$valid = false');
18875
- });
18876
-
18877
- it('should be invalid if over max', function() {
18878
- setInput('2015-01-01T23:59:00');
18879
- expect(value.getText()).toContain('');
18880
- expect(valid.getText()).toContain('myForm.input.$valid = false');
18881
- });
18882
- </file>
18883
- </example>
18884
- */
18885
- 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP,
18886
- createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']),
18887
- 'yyyy-MM-ddTHH:mm:ss.sss'),
18888
-
18889
- /**
18890
- * @ngdoc input
18891
- * @name input[time]
18892
- *
18893
- * @description
18894
- * Input with time validation and transformation. In browsers that do not yet support
18895
- * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
18896
- * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a
18897
- * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.
18898
- *
18899
- * The model must always be a Date object, otherwise Angular will throw an error.
18900
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
18901
- *
18902
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
18903
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
18904
- *
18905
- * @param {string} ngModel Assignable angular expression to data-bind to.
18906
- * @param {string=} name Property name of the form under which the control is published.
18907
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
18908
- * valid ISO time format (HH:mm:ss).
18909
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be a
18910
- * valid ISO time format (HH:mm:ss).
18911
- * @param {string=} required Sets `required` validation error key if the value is not entered.
18912
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18913
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18914
- * `required` when you want to data-bind to the `required` attribute.
18915
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
18916
- * interaction with the input element.
18917
- *
18918
- * @example
18919
- <example name="time-input-directive" module="timeExample">
18920
- <file name="index.html">
18921
- <script>
18922
- angular.module('timeExample', [])
18923
- .controller('DateController', ['$scope', function($scope) {
18924
- $scope.value = new Date(1970, 0, 1, 14, 57, 0);
18925
- }]);
18926
- </script>
18927
- <form name="myForm" ng-controller="DateController as dateCtrl">
18928
- Pick a between 8am and 5pm:
18929
- <input type="time" id="exampleInput" name="input" ng-model="value"
18930
- placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required />
18931
- <span class="error" ng-show="myForm.input.$error.required">
18932
- Required!</span>
18933
- <span class="error" ng-show="myForm.input.$error.time">
18934
- Not a valid date!</span>
18935
- <tt>value = {{value | date: "HH:mm:ss"}}</tt><br/>
18936
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18937
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18938
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18939
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18940
- </form>
18941
- </file>
18942
- <file name="protractor.js" type="protractor">
18943
- var value = element(by.binding('value | date: "HH:mm:ss"'));
18944
- var valid = element(by.binding('myForm.input.$valid'));
18945
- var input = element(by.model('value'));
18946
-
18947
- // currently protractor/webdriver does not support
18948
- // sending keys to all known HTML5 input controls
18949
- // for various browsers (https://github.com/angular/protractor/issues/562).
18950
- function setInput(val) {
18951
- // set the value of the element and force validation.
18952
- var scr = "var ipt = document.getElementById('exampleInput'); " +
18953
- "ipt.value = '" + val + "';" +
18954
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
18955
- browser.executeScript(scr);
18956
- }
18957
-
18958
- it('should initialize to model', function() {
18959
- expect(value.getText()).toContain('14:57:00');
18960
- expect(valid.getText()).toContain('myForm.input.$valid = true');
18961
- });
18962
-
18963
- it('should be invalid if empty', function() {
18964
- setInput('');
18965
- expect(value.getText()).toEqual('value =');
18966
- expect(valid.getText()).toContain('myForm.input.$valid = false');
18967
- });
18968
-
18969
- it('should be invalid if over max', function() {
18970
- setInput('23:59:00');
18971
- expect(value.getText()).toContain('');
18972
- expect(valid.getText()).toContain('myForm.input.$valid = false');
18973
- });
18974
- </file>
18975
- </example>
18976
- */
18977
- 'time': createDateInputType('time', TIME_REGEXP,
18978
- createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']),
18979
- 'HH:mm:ss.sss'),
18980
-
18981
- /**
18982
- * @ngdoc input
18983
- * @name input[week]
18984
- *
18985
- * @description
18986
- * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support
18987
- * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
18988
- * week format (yyyy-W##), for example: `2013-W02`.
18989
- *
18990
- * The model must always be a Date object, otherwise Angular will throw an error.
18991
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
18992
- *
18993
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
18994
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
18995
- *
18996
- * @param {string} ngModel Assignable angular expression to data-bind to.
18997
- * @param {string=} name Property name of the form under which the control is published.
18998
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
18999
- * valid ISO week format (yyyy-W##).
19000
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
19001
- * a valid ISO week format (yyyy-W##).
19002
- * @param {string=} required Sets `required` validation error key if the value is not entered.
19003
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
19004
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
19005
- * `required` when you want to data-bind to the `required` attribute.
19006
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
19007
- * interaction with the input element.
19008
- *
19009
- * @example
19010
- <example name="week-input-directive" module="weekExample">
19011
- <file name="index.html">
19012
- <script>
19013
- angular.module('weekExample', [])
19014
- .controller('DateController', ['$scope', function($scope) {
19015
- $scope.value = new Date(2013, 0, 3);
19016
- }]);
19017
- </script>
19018
- <form name="myForm" ng-controller="DateController as dateCtrl">
19019
- Pick a date between in 2013:
19020
- <input id="exampleInput" type="week" name="input" ng-model="value"
19021
- placeholder="YYYY-W##" min="2012-W32" max="2013-W52" required />
19022
- <span class="error" ng-show="myForm.input.$error.required">
19023
- Required!</span>
19024
- <span class="error" ng-show="myForm.input.$error.week">
19025
- Not a valid date!</span>
19026
- <tt>value = {{value | date: "yyyy-Www"}}</tt><br/>
19027
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
19028
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
19029
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
19030
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
19031
- </form>
19032
- </file>
19033
- <file name="protractor.js" type="protractor">
19034
- var value = element(by.binding('value | date: "yyyy-Www"'));
19035
- var valid = element(by.binding('myForm.input.$valid'));
19036
- var input = element(by.model('value'));
19037
-
19038
- // currently protractor/webdriver does not support
19039
- // sending keys to all known HTML5 input controls
19040
- // for various browsers (https://github.com/angular/protractor/issues/562).
19041
- function setInput(val) {
19042
- // set the value of the element and force validation.
19043
- var scr = "var ipt = document.getElementById('exampleInput'); " +
19044
- "ipt.value = '" + val + "';" +
19045
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
19046
- browser.executeScript(scr);
19047
- }
19048
-
19049
- it('should initialize to model', function() {
19050
- expect(value.getText()).toContain('2013-W01');
19051
- expect(valid.getText()).toContain('myForm.input.$valid = true');
19052
- });
19053
-
19054
- it('should be invalid if empty', function() {
19055
- setInput('');
19056
- expect(value.getText()).toEqual('value =');
19057
- expect(valid.getText()).toContain('myForm.input.$valid = false');
19058
- });
19059
-
19060
- it('should be invalid if over max', function() {
19061
- setInput('2015-W01');
19062
- expect(value.getText()).toContain('');
19063
- expect(valid.getText()).toContain('myForm.input.$valid = false');
19064
- });
19065
- </file>
19066
- </example>
19067
- */
19068
- 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'),
19069
-
19070
- /**
19071
- * @ngdoc input
19072
- * @name input[month]
19073
- *
19074
- * @description
19075
- * Input with month validation and transformation. In browsers that do not yet support
19076
- * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
19077
- * month format (yyyy-MM), for example: `2009-01`.
19078
- *
19079
- * The model must always be a Date object, otherwise Angular will throw an error.
19080
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
19081
- * If the model is not set to the first of the month, the next view to model update will set it
19082
- * to the first of the month.
19083
- *
19084
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
19085
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
19086
- *
19087
- * @param {string} ngModel Assignable angular expression to data-bind to.
19088
- * @param {string=} name Property name of the form under which the control is published.
19089
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be
19090
- * a valid ISO month format (yyyy-MM).
19091
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must
19092
- * be a valid ISO month format (yyyy-MM).
19093
- * @param {string=} required Sets `required` validation error key if the value is not entered.
19094
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
19095
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
19096
- * `required` when you want to data-bind to the `required` attribute.
19097
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
19098
- * interaction with the input element.
19099
- *
19100
- * @example
19101
- <example name="month-input-directive" module="monthExample">
19102
- <file name="index.html">
19103
- <script>
19104
- angular.module('monthExample', [])
19105
- .controller('DateController', ['$scope', function($scope) {
19106
- $scope.value = new Date(2013, 9, 1);
19107
- }]);
19108
- </script>
19109
- <form name="myForm" ng-controller="DateController as dateCtrl">
19110
- Pick a month int 2013:
19111
- <input id="exampleInput" type="month" name="input" ng-model="value"
19112
- placeholder="yyyy-MM" min="2013-01" max="2013-12" required />
19113
- <span class="error" ng-show="myForm.input.$error.required">
19114
- Required!</span>
19115
- <span class="error" ng-show="myForm.input.$error.month">
19116
- Not a valid month!</span>
19117
- <tt>value = {{value | date: "yyyy-MM"}}</tt><br/>
19118
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
19119
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
19120
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
19121
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
19122
- </form>
19123
- </file>
19124
- <file name="protractor.js" type="protractor">
19125
- var value = element(by.binding('value | date: "yyyy-MM"'));
19126
- var valid = element(by.binding('myForm.input.$valid'));
19127
- var input = element(by.model('value'));
19128
-
19129
- // currently protractor/webdriver does not support
19130
- // sending keys to all known HTML5 input controls
19131
- // for various browsers (https://github.com/angular/protractor/issues/562).
19132
- function setInput(val) {
19133
- // set the value of the element and force validation.
19134
- var scr = "var ipt = document.getElementById('exampleInput'); " +
19135
- "ipt.value = '" + val + "';" +
19136
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
19137
- browser.executeScript(scr);
19138
- }
19139
-
19140
- it('should initialize to model', function() {
19141
- expect(value.getText()).toContain('2013-10');
19142
- expect(valid.getText()).toContain('myForm.input.$valid = true');
19143
- });
19144
-
19145
- it('should be invalid if empty', function() {
19146
- setInput('');
19147
- expect(value.getText()).toEqual('value =');
19148
- expect(valid.getText()).toContain('myForm.input.$valid = false');
19149
- });
19150
-
19151
- it('should be invalid if over max', function() {
19152
- setInput('2015-01');
19153
- expect(value.getText()).toContain('');
19154
- expect(valid.getText()).toContain('myForm.input.$valid = false');
19155
- });
19156
- </file>
19157
- </example>
19158
- */
19159
- 'month': createDateInputType('month', MONTH_REGEXP,
19160
- createDateParser(MONTH_REGEXP, ['yyyy', 'MM']),
19161
- 'yyyy-MM'),
19162
-
19163
- /**
19164
- * @ngdoc input
19165
- * @name input[number]
19166
- *
19167
- * @description
19168
- * Text input with number validation and transformation. Sets the `number` validation
19169
- * error if not a valid number.
19170
- *
19171
- * The model must always be a number, otherwise Angular will throw an error.
19172
- *
19173
- * @param {string} ngModel Assignable angular expression to data-bind to.
19174
- * @param {string=} name Property name of the form under which the control is published.
19175
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
19176
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
19177
- * @param {string=} required Sets `required` validation error key if the value is not entered.
19178
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
19179
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
19180
- * `required` when you want to data-bind to the `required` attribute.
19181
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
19182
- * minlength.
19183
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
19184
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
19185
- * any length.
19186
- * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
19187
- * that contains the regular expression body that will be converted to a regular expression
19188
- * as in the ngPattern directive.
19189
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
19190
- * a RegExp found by evaluating the Angular expression given in the attribute value.
19191
- * If the expression evaluates to a RegExp object then this is used directly.
19192
- * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
19193
- * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
19194
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
19195
- * interaction with the input element.
19196
- *
19197
- * @example
19198
- <example name="number-input-directive" module="numberExample">
19199
- <file name="index.html">
19200
- <script>
19201
- angular.module('numberExample', [])
19202
- .controller('ExampleController', ['$scope', function($scope) {
19203
- $scope.value = 12;
19204
- }]);
19205
- </script>
19206
- <form name="myForm" ng-controller="ExampleController">
19207
- Number: <input type="number" name="input" ng-model="value"
19208
- min="0" max="99" required>
19209
- <span class="error" ng-show="myForm.input.$error.required">
19210
- Required!</span>
19211
- <span class="error" ng-show="myForm.input.$error.number">
19212
- Not valid number!</span>
19213
- <tt>value = {{value}}</tt><br/>
19214
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
19215
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
19216
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
19217
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
19218
- </form>
19219
- </file>
19220
- <file name="protractor.js" type="protractor">
19221
- var value = element(by.binding('value'));
19222
- var valid = element(by.binding('myForm.input.$valid'));
19223
- var input = element(by.model('value'));
19224
-
19225
- it('should initialize to model', function() {
19226
- expect(value.getText()).toContain('12');
19227
- expect(valid.getText()).toContain('true');
19228
- });
19229
-
19230
- it('should be invalid if empty', function() {
19231
- input.clear();
19232
- input.sendKeys('');
19233
- expect(value.getText()).toEqual('value =');
19234
- expect(valid.getText()).toContain('false');
19235
- });
19236
-
19237
- it('should be invalid if over max', function() {
19238
- input.clear();
19239
- input.sendKeys('123');
19240
- expect(value.getText()).toEqual('value =');
19241
- expect(valid.getText()).toContain('false');
19242
- });
19243
- </file>
19244
- </example>
19245
- */
19246
- 'number': numberInputType,
19247
-
19248
-
19249
- /**
19250
- * @ngdoc input
19251
- * @name input[url]
19252
- *
19253
- * @description
19254
- * Text input with URL validation. Sets the `url` validation error key if the content is not a
19255
- * valid URL.
19256
- *
19257
- * <div class="alert alert-warning">
19258
- * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex
19259
- * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify
19260
- * the built-in validators (see the {@link guide/forms Forms guide})
19261
- * </div>
19262
- *
19263
- * @param {string} ngModel Assignable angular expression to data-bind to.
19264
- * @param {string=} name Property name of the form under which the control is published.
19265
- * @param {string=} required Sets `required` validation error key if the value is not entered.
19266
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
19267
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
19268
- * `required` when you want to data-bind to the `required` attribute.
19269
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
19270
- * minlength.
19271
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
19272
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
19273
- * any length.
19274
- * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
19275
- * that contains the regular expression body that will be converted to a regular expression
19276
- * as in the ngPattern directive.
19277
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
19278
- * a RegExp found by evaluating the Angular expression given in the attribute value.
19279
- * If the expression evaluates to a RegExp object then this is used directly.
19280
- * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
19281
- * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
19282
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
19283
- * interaction with the input element.
19284
- *
19285
- * @example
19286
- <example name="url-input-directive" module="urlExample">
19287
- <file name="index.html">
19288
- <script>
19289
- angular.module('urlExample', [])
19290
- .controller('ExampleController', ['$scope', function($scope) {
19291
- $scope.text = 'http://google.com';
19292
- }]);
19293
- </script>
19294
- <form name="myForm" ng-controller="ExampleController">
19295
- URL: <input type="url" name="input" ng-model="text" required>
19296
- <span class="error" ng-show="myForm.input.$error.required">
19297
- Required!</span>
19298
- <span class="error" ng-show="myForm.input.$error.url">
19299
- Not valid url!</span>
19300
- <tt>text = {{text}}</tt><br/>
19301
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
19302
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
19303
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
19304
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
19305
- <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>
19306
- </form>
19307
- </file>
19308
- <file name="protractor.js" type="protractor">
19309
- var text = element(by.binding('text'));
19310
- var valid = element(by.binding('myForm.input.$valid'));
19311
- var input = element(by.model('text'));
19312
-
19313
- it('should initialize to model', function() {
19314
- expect(text.getText()).toContain('http://google.com');
19315
- expect(valid.getText()).toContain('true');
19316
- });
19317
-
19318
- it('should be invalid if empty', function() {
19319
- input.clear();
19320
- input.sendKeys('');
19321
-
19322
- expect(text.getText()).toEqual('text =');
19323
- expect(valid.getText()).toContain('false');
19324
- });
19325
-
19326
- it('should be invalid if not url', function() {
19327
- input.clear();
19328
- input.sendKeys('box');
19329
-
19330
- expect(valid.getText()).toContain('false');
19331
- });
19332
- </file>
19333
- </example>
19334
- */
19335
- 'url': urlInputType,
19336
-
19337
-
19338
- /**
19339
- * @ngdoc input
19340
- * @name input[email]
19341
- *
19342
- * @description
19343
- * Text input with email validation. Sets the `email` validation error key if not a valid email
19344
- * address.
19345
- *
19346
- * <div class="alert alert-warning">
19347
- * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex
19348
- * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can
19349
- * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide})
19350
- * </div>
19351
- *
19352
- * @param {string} ngModel Assignable angular expression to data-bind to.
19353
- * @param {string=} name Property name of the form under which the control is published.
19354
- * @param {string=} required Sets `required` validation error key if the value is not entered.
19355
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
19356
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
19357
- * `required` when you want to data-bind to the `required` attribute.
19358
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
19359
- * minlength.
19360
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
19361
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
19362
- * any length.
19363
- * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
19364
- * that contains the regular expression body that will be converted to a regular expression
19365
- * as in the ngPattern directive.
19366
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
19367
- * a RegExp found by evaluating the Angular expression given in the attribute value.
19368
- * If the expression evaluates to a RegExp object then this is used directly.
19369
- * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
19370
- * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
19371
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
19372
- * interaction with the input element.
19373
- *
19374
- * @example
19375
- <example name="email-input-directive" module="emailExample">
19376
- <file name="index.html">
19377
- <script>
19378
- angular.module('emailExample', [])
19379
- .controller('ExampleController', ['$scope', function($scope) {
19380
- $scope.text = 'me@example.com';
19381
- }]);
19382
- </script>
19383
- <form name="myForm" ng-controller="ExampleController">
19384
- Email: <input type="email" name="input" ng-model="text" required>
19385
- <span class="error" ng-show="myForm.input.$error.required">
19386
- Required!</span>
19387
- <span class="error" ng-show="myForm.input.$error.email">
19388
- Not valid email!</span>
19389
- <tt>text = {{text}}</tt><br/>
19390
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
19391
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
19392
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
19393
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
19394
- <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>
19395
- </form>
19396
- </file>
19397
- <file name="protractor.js" type="protractor">
19398
- var text = element(by.binding('text'));
19399
- var valid = element(by.binding('myForm.input.$valid'));
19400
- var input = element(by.model('text'));
19401
-
19402
- it('should initialize to model', function() {
19403
- expect(text.getText()).toContain('me@example.com');
19404
- expect(valid.getText()).toContain('true');
19405
- });
19406
-
19407
- it('should be invalid if empty', function() {
19408
- input.clear();
19409
- input.sendKeys('');
19410
- expect(text.getText()).toEqual('text =');
19411
- expect(valid.getText()).toContain('false');
19412
- });
19413
-
19414
- it('should be invalid if not email', function() {
19415
- input.clear();
19416
- input.sendKeys('xxx');
19417
-
19418
- expect(valid.getText()).toContain('false');
19419
- });
19420
- </file>
19421
- </example>
19422
- */
19423
- 'email': emailInputType,
19424
-
19425
-
19426
- /**
19427
- * @ngdoc input
19428
- * @name input[radio]
19429
- *
19430
- * @description
19431
- * HTML radio button.
19432
- *
19433
- * @param {string} ngModel Assignable angular expression to data-bind to.
19434
- * @param {string} value The value to which the expression should be set when selected.
19435
- * @param {string=} name Property name of the form under which the control is published.
19436
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
19437
- * interaction with the input element.
19438
- * @param {string} ngValue Angular expression which sets the value to which the expression should
19439
- * be set when selected.
19440
- *
19441
- * @example
19442
- <example name="radio-input-directive" module="radioExample">
19443
- <file name="index.html">
19444
- <script>
19445
- angular.module('radioExample', [])
19446
- .controller('ExampleController', ['$scope', function($scope) {
19447
- $scope.color = 'blue';
19448
- $scope.specialValue = {
19449
- "id": "12345",
19450
- "value": "green"
19451
- };
19452
- }]);
19453
- </script>
19454
- <form name="myForm" ng-controller="ExampleController">
19455
- <input type="radio" ng-model="color" value="red"> Red <br/>
19456
- <input type="radio" ng-model="color" ng-value="specialValue"> Green <br/>
19457
- <input type="radio" ng-model="color" value="blue"> Blue <br/>
19458
- <tt>color = {{color | json}}</tt><br/>
19459
- </form>
19460
- Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`.
19461
- </file>
19462
- <file name="protractor.js" type="protractor">
19463
- it('should change state', function() {
19464
- var color = element(by.binding('color'));
19465
-
19466
- expect(color.getText()).toContain('blue');
19467
-
19468
- element.all(by.model('color')).get(0).click();
19469
-
19470
- expect(color.getText()).toContain('red');
19471
- });
19472
- </file>
19473
- </example>
19474
- */
19475
- 'radio': radioInputType,
19476
-
19477
-
19478
- /**
19479
- * @ngdoc input
19480
- * @name input[checkbox]
19481
- *
19482
- * @description
19483
- * HTML checkbox.
19484
- *
19485
- * @param {string} ngModel Assignable angular expression to data-bind to.
19486
- * @param {string=} name Property name of the form under which the control is published.
19487
- * @param {expression=} ngTrueValue The value to which the expression should be set when selected.
19488
- * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.
19489
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
19490
- * interaction with the input element.
19491
- *
19492
- * @example
19493
- <example name="checkbox-input-directive" module="checkboxExample">
19494
- <file name="index.html">
19495
- <script>
19496
- angular.module('checkboxExample', [])
19497
- .controller('ExampleController', ['$scope', function($scope) {
19498
- $scope.value1 = true;
19499
- $scope.value2 = 'YES'
19500
- }]);
19501
- </script>
19502
- <form name="myForm" ng-controller="ExampleController">
19503
- Value1: <input type="checkbox" ng-model="value1"> <br/>
19504
- Value2: <input type="checkbox" ng-model="value2"
19505
- ng-true-value="'YES'" ng-false-value="'NO'"> <br/>
19506
- <tt>value1 = {{value1}}</tt><br/>
19507
- <tt>value2 = {{value2}}</tt><br/>
19508
- </form>
19509
- </file>
19510
- <file name="protractor.js" type="protractor">
19511
- it('should change state', function() {
19512
- var value1 = element(by.binding('value1'));
19513
- var value2 = element(by.binding('value2'));
19514
-
19515
- expect(value1.getText()).toContain('true');
19516
- expect(value2.getText()).toContain('YES');
19517
-
19518
- element(by.model('value1')).click();
19519
- element(by.model('value2')).click();
19520
-
19521
- expect(value1.getText()).toContain('false');
19522
- expect(value2.getText()).toContain('NO');
19523
- });
19524
- </file>
19525
- </example>
19526
- */
19527
- 'checkbox': checkboxInputType,
19528
-
19529
- 'hidden': noop,
19530
- 'button': noop,
19531
- 'submit': noop,
19532
- 'reset': noop,
19533
- 'file': noop
19534
-};
19535
-
19536
-function stringBasedInputType(ctrl) {
19537
- ctrl.$formatters.push(function(value) {
19538
- return ctrl.$isEmpty(value) ? value : value.toString();
19539
- });
19540
-}
19541
-
19542
-function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
19543
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
19544
- stringBasedInputType(ctrl);
19545
-}
19546
-
19547
-function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
19548
- var type = lowercase(element[0].type);
19549
-
19550
- // In composition mode, users are still inputing intermediate text buffer,
19551
- // hold the listener until composition is done.
19552
- // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
19553
- if (!$sniffer.android) {
19554
- var composing = false;
19555
-
19556
- element.on('compositionstart', function(data) {
19557
- composing = true;
19558
- });
19559
-
19560
- element.on('compositionend', function() {
19561
- composing = false;
19562
- listener();
19563
- });
19564
- }
19565
-
19566
- var listener = function(ev) {
19567
- if (timeout) {
19568
- $browser.defer.cancel(timeout);
19569
- timeout = null;
19570
- }
19571
- if (composing) return;
19572
- var value = element.val(),
19573
- event = ev && ev.type;
19574
-
19575
- // By default we will trim the value
19576
- // If the attribute ng-trim exists we will avoid trimming
19577
- // If input type is 'password', the value is never trimmed
19578
- if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) {
19579
- value = trim(value);
19580
- }
19581
-
19582
- // If a control is suffering from bad input (due to native validators), browsers discard its
19583
- // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the
19584
- // control's value is the same empty value twice in a row.
19585
- if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) {
19586
- ctrl.$setViewValue(value, event);
19587
- }
19588
- };
19589
-
19590
- // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the
19591
- // input event on backspace, delete or cut
19592
- if ($sniffer.hasEvent('input')) {
19593
- element.on('input', listener);
19594
- } else {
19595
- var timeout;
19596
-
19597
- var deferListener = function(ev, input, origValue) {
19598
- if (!timeout) {
19599
- timeout = $browser.defer(function() {
19600
- timeout = null;
19601
- if (!input || input.value !== origValue) {
19602
- listener(ev);
19603
- }
19604
- });
19605
- }
19606
- };
19607
-
19608
- element.on('keydown', function(event) {
19609
- var key = event.keyCode;
19610
-
19611
- // ignore
19612
- // command modifiers arrows
19613
- if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;
19614
-
19615
- deferListener(event, this, this.value);
19616
- });
19617
-
19618
- // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it
19619
- if ($sniffer.hasEvent('paste')) {
19620
- element.on('paste cut', deferListener);
19621
- }
19622
- }
19623
-
19624
- // if user paste into input using mouse on older browser
19625
- // or form autocomplete on newer browser, we need "change" event to catch it
19626
- element.on('change', listener);
19627
-
19628
- ctrl.$render = function() {
19629
- element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);
19630
- };
19631
-}
19632
-
19633
-function weekParser(isoWeek, existingDate) {
19634
- if (isDate(isoWeek)) {
19635
- return isoWeek;
19636
- }
19637
-
19638
- if (isString(isoWeek)) {
19639
- WEEK_REGEXP.lastIndex = 0;
19640
- var parts = WEEK_REGEXP.exec(isoWeek);
19641
- if (parts) {
19642
- var year = +parts[1],
19643
- week = +parts[2],
19644
- hours = 0,
19645
- minutes = 0,
19646
- seconds = 0,
19647
- milliseconds = 0,
19648
- firstThurs = getFirstThursdayOfYear(year),
19649
- addDays = (week - 1) * 7;
19650
-
19651
- if (existingDate) {
19652
- hours = existingDate.getHours();
19653
- minutes = existingDate.getMinutes();
19654
- seconds = existingDate.getSeconds();
19655
- milliseconds = existingDate.getMilliseconds();
19656
- }
19657
-
19658
- return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds);
19659
- }
19660
- }
19661
-
19662
- return NaN;
19663
-}
19664
-
19665
-function createDateParser(regexp, mapping) {
19666
- return function(iso, date) {
19667
- var parts, map;
19668
-
19669
- if (isDate(iso)) {
19670
- return iso;
19671
- }
19672
-
19673
- if (isString(iso)) {
19674
- // When a date is JSON'ified to wraps itself inside of an extra
19675
- // set of double quotes. This makes the date parsing code unable
19676
- // to match the date string and parse it as a date.
19677
- if (iso.charAt(0) == '"' && iso.charAt(iso.length - 1) == '"') {
19678
- iso = iso.substring(1, iso.length - 1);
19679
- }
19680
- if (ISO_DATE_REGEXP.test(iso)) {
19681
- return new Date(iso);
19682
- }
19683
- regexp.lastIndex = 0;
19684
- parts = regexp.exec(iso);
19685
-
19686
- if (parts) {
19687
- parts.shift();
19688
- if (date) {
19689
- map = {
19690
- yyyy: date.getFullYear(),
19691
- MM: date.getMonth() + 1,
19692
- dd: date.getDate(),
19693
- HH: date.getHours(),
19694
- mm: date.getMinutes(),
19695
- ss: date.getSeconds(),
19696
- sss: date.getMilliseconds() / 1000
19697
- };
19698
- } else {
19699
- map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 };
19700
- }
19701
-
19702
- forEach(parts, function(part, index) {
19703
- if (index < mapping.length) {
19704
- map[mapping[index]] = +part;
19705
- }
19706
- });
19707
- return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0);
19708
- }
19709
- }
19710
-
19711
- return NaN;
19712
- };
19713
-}
19714
-
19715
-function createDateInputType(type, regexp, parseDate, format) {
19716
- return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {
19717
- badInputChecker(scope, element, attr, ctrl);
19718
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
19719
- var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;
19720
- var previousDate;
19721
-
19722
- ctrl.$$parserName = type;
19723
- ctrl.$parsers.push(function(value) {
19724
- if (ctrl.$isEmpty(value)) return null;
19725
- if (regexp.test(value)) {
19726
- // Note: We cannot read ctrl.$modelValue, as there might be a different
19727
- // parser/formatter in the processing chain so that the model
19728
- // contains some different data format!
19729
- var parsedDate = parseDate(value, previousDate);
19730
- if (timezone === 'UTC') {
19731
- parsedDate.setMinutes(parsedDate.getMinutes() - parsedDate.getTimezoneOffset());
19732
- }
19733
- return parsedDate;
19734
- }
19735
- return undefined;
19736
- });
19737
-
19738
- ctrl.$formatters.push(function(value) {
19739
- if (value && !isDate(value)) {
19740
- throw $ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);
19741
- }
19742
- if (isValidDate(value)) {
19743
- previousDate = value;
19744
- if (previousDate && timezone === 'UTC') {
19745
- var timezoneOffset = 60000 * previousDate.getTimezoneOffset();
19746
- previousDate = new Date(previousDate.getTime() + timezoneOffset);
19747
- }
19748
- return $filter('date')(value, format, timezone);
19749
- } else {
19750
- previousDate = null;
19751
- return '';
19752
- }
19753
- });
19754
-
19755
- if (isDefined(attr.min) || attr.ngMin) {
19756
- var minVal;
19757
- ctrl.$validators.min = function(value) {
19758
- return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal;
19759
- };
19760
- attr.$observe('min', function(val) {
19761
- minVal = parseObservedDateValue(val);
19762
- ctrl.$validate();
19763
- });
19764
- }
19765
-
19766
- if (isDefined(attr.max) || attr.ngMax) {
19767
- var maxVal;
19768
- ctrl.$validators.max = function(value) {
19769
- return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;
19770
- };
19771
- attr.$observe('max', function(val) {
19772
- maxVal = parseObservedDateValue(val);
19773
- ctrl.$validate();
19774
- });
19775
- }
19776
-
19777
- function isValidDate(value) {
19778
- // Invalid Date: getTime() returns NaN
19779
- return value && !(value.getTime && value.getTime() !== value.getTime());
19780
- }
19781
-
19782
- function parseObservedDateValue(val) {
19783
- return isDefined(val) ? (isDate(val) ? val : parseDate(val)) : undefined;
19784
- }
19785
- };
19786
-}
19787
-
19788
-function badInputChecker(scope, element, attr, ctrl) {
19789
- var node = element[0];
19790
- var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity);
19791
- if (nativeValidation) {
19792
- ctrl.$parsers.push(function(value) {
19793
- var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};
19794
- // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430):
19795
- // - also sets validity.badInput (should only be validity.typeMismatch).
19796
- // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email)
19797
- // - can ignore this case as we can still read out the erroneous email...
19798
- return validity.badInput && !validity.typeMismatch ? undefined : value;
19799
- });
19800
- }
19801
-}
19802
-
19803
-function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
19804
- badInputChecker(scope, element, attr, ctrl);
19805
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
19806
-
19807
- ctrl.$$parserName = 'number';
19808
- ctrl.$parsers.push(function(value) {
19809
- if (ctrl.$isEmpty(value)) return null;
19810
- if (NUMBER_REGEXP.test(value)) return parseFloat(value);
19811
- return undefined;
19812
- });
19813
-
19814
- ctrl.$formatters.push(function(value) {
19815
- if (!ctrl.$isEmpty(value)) {
19816
- if (!isNumber(value)) {
19817
- throw $ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);
19818
- }
19819
- value = value.toString();
19820
- }
19821
- return value;
19822
- });
19823
-
19824
- if (attr.min || attr.ngMin) {
19825
- var minVal;
19826
- ctrl.$validators.min = function(value) {
19827
- return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;
19828
- };
19829
-
19830
- attr.$observe('min', function(val) {
19831
- if (isDefined(val) && !isNumber(val)) {
19832
- val = parseFloat(val, 10);
19833
- }
19834
- minVal = isNumber(val) && !isNaN(val) ? val : undefined;
19835
- // TODO(matsko): implement validateLater to reduce number of validations
19836
- ctrl.$validate();
19837
- });
19838
- }
19839
-
19840
- if (attr.max || attr.ngMax) {
19841
- var maxVal;
19842
- ctrl.$validators.max = function(value) {
19843
- return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;
19844
- };
19845
-
19846
- attr.$observe('max', function(val) {
19847
- if (isDefined(val) && !isNumber(val)) {
19848
- val = parseFloat(val, 10);
19849
- }
19850
- maxVal = isNumber(val) && !isNaN(val) ? val : undefined;
19851
- // TODO(matsko): implement validateLater to reduce number of validations
19852
- ctrl.$validate();
19853
- });
19854
- }
19855
-}
19856
-
19857
-function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
19858
- // Note: no badInputChecker here by purpose as `url` is only a validation
19859
- // in browsers, i.e. we can always read out input.value even if it is not valid!
19860
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
19861
- stringBasedInputType(ctrl);
19862
-
19863
- ctrl.$$parserName = 'url';
19864
- ctrl.$validators.url = function(modelValue, viewValue) {
19865
- var value = modelValue || viewValue;
19866
- return ctrl.$isEmpty(value) || URL_REGEXP.test(value);
19867
- };
19868
-}
19869
-
19870
-function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
19871
- // Note: no badInputChecker here by purpose as `url` is only a validation
19872
- // in browsers, i.e. we can always read out input.value even if it is not valid!
19873
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
19874
- stringBasedInputType(ctrl);
19875
-
19876
- ctrl.$$parserName = 'email';
19877
- ctrl.$validators.email = function(modelValue, viewValue) {
19878
- var value = modelValue || viewValue;
19879
- return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);
19880
- };
19881
-}
19882
-
19883
-function radioInputType(scope, element, attr, ctrl) {
19884
- // make the name unique, if not defined
19885
- if (isUndefined(attr.name)) {
19886
- element.attr('name', nextUid());
19887
- }
19888
-
19889
- var listener = function(ev) {
19890
- if (element[0].checked) {
19891
- ctrl.$setViewValue(attr.value, ev && ev.type);
19892
- }
19893
- };
19894
-
19895
- element.on('click', listener);
19896
-
19897
- ctrl.$render = function() {
19898
- var value = attr.value;
19899
- element[0].checked = (value == ctrl.$viewValue);
19900
- };
19901
-
19902
- attr.$observe('value', ctrl.$render);
19903
-}
19904
-
19905
-function parseConstantExpr($parse, context, name, expression, fallback) {
19906
- var parseFn;
19907
- if (isDefined(expression)) {
19908
- parseFn = $parse(expression);
19909
- if (!parseFn.constant) {
19910
- throw minErr('ngModel')('constexpr', 'Expected constant expression for `{0}`, but saw ' +
19911
- '`{1}`.', name, expression);
19912
- }
19913
- return parseFn(context);
19914
- }
19915
- return fallback;
19916
-}
19917
-
19918
-function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {
19919
- var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true);
19920
- var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false);
19921
-
19922
- var listener = function(ev) {
19923
- ctrl.$setViewValue(element[0].checked, ev && ev.type);
19924
- };
19925
-
19926
- element.on('click', listener);
19927
-
19928
- ctrl.$render = function() {
19929
- element[0].checked = ctrl.$viewValue;
19930
- };
19931
-
19932
- // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false`
19933
- // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert
19934
- // it to a boolean.
19935
- ctrl.$isEmpty = function(value) {
19936
- return value === false;
19937
- };
19938
-
19939
- ctrl.$formatters.push(function(value) {
19940
- return equals(value, trueValue);
19941
- });
19942
-
19943
- ctrl.$parsers.push(function(value) {
19944
- return value ? trueValue : falseValue;
19945
- });
19946
-}
19947
-
19948
-
19949
-/**
19950
- * @ngdoc directive
19951
- * @name textarea
19952
- * @restrict E
19953
- *
19954
- * @description
19955
- * HTML textarea element control with angular data-binding. The data-binding and validation
19956
- * properties of this element are exactly the same as those of the
19957
- * {@link ng.directive:input input element}.
19958
- *
19959
- * @param {string} ngModel Assignable angular expression to data-bind to.
19960
- * @param {string=} name Property name of the form under which the control is published.
19961
- * @param {string=} required Sets `required` validation error key if the value is not entered.
19962
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
19963
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
19964
- * `required` when you want to data-bind to the `required` attribute.
19965
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
19966
- * minlength.
19967
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
19968
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
19969
- * length.
19970
- * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
19971
- * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
19972
- * patterns defined as scope expressions.
19973
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
19974
- * interaction with the input element.
19975
- * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
19976
- */
19977
-
19978
-
19979
-/**
19980
- * @ngdoc directive
19981
- * @name input
19982
- * @restrict E
19983
- *
19984
- * @description
19985
- * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding,
19986
- * input state control, and validation.
19987
- * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers.
19988
- *
19989
- * <div class="alert alert-warning">
19990
- * **Note:** Not every feature offered is available for all input types.
19991
- * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`.
19992
- * </div>
19993
- *
19994
- * @param {string} ngModel Assignable angular expression to data-bind to.
19995
- * @param {string=} name Property name of the form under which the control is published.
19996
- * @param {string=} required Sets `required` validation error key if the value is not entered.
19997
- * @param {boolean=} ngRequired Sets `required` attribute if set to true
19998
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
19999
- * minlength.
20000
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
20001
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
20002
- * length.
20003
- * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
20004
- * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
20005
- * patterns defined as scope expressions.
20006
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
20007
- * interaction with the input element.
20008
- * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
20009
- * This parameter is ignored for input[type=password] controls, which will never trim the
20010
- * input.
20011
- *
20012
- * @example
20013
- <example name="input-directive" module="inputExample">
20014
- <file name="index.html">
20015
- <script>
20016
- angular.module('inputExample', [])
20017
- .controller('ExampleController', ['$scope', function($scope) {
20018
- $scope.user = {name: 'guest', last: 'visitor'};
20019
- }]);
20020
- </script>
20021
- <div ng-controller="ExampleController">
20022
- <form name="myForm">
20023
- User name: <input type="text" name="userName" ng-model="user.name" required>
20024
- <span class="error" ng-show="myForm.userName.$error.required">
20025
- Required!</span><br>
20026
- Last name: <input type="text" name="lastName" ng-model="user.last"
20027
- ng-minlength="3" ng-maxlength="10">
20028
- <span class="error" ng-show="myForm.lastName.$error.minlength">
20029
- Too short!</span>
20030
- <span class="error" ng-show="myForm.lastName.$error.maxlength">
20031
- Too long!</span><br>
20032
- </form>
20033
- <hr>
20034
- <tt>user = {{user}}</tt><br/>
20035
- <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br>
20036
- <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br>
20037
- <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br>
20038
- <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br>
20039
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br>
20040
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>
20041
- <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br>
20042
- <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br>
20043
- </div>
20044
- </file>
20045
- <file name="protractor.js" type="protractor">
20046
- var user = element(by.exactBinding('user'));
20047
- var userNameValid = element(by.binding('myForm.userName.$valid'));
20048
- var lastNameValid = element(by.binding('myForm.lastName.$valid'));
20049
- var lastNameError = element(by.binding('myForm.lastName.$error'));
20050
- var formValid = element(by.binding('myForm.$valid'));
20051
- var userNameInput = element(by.model('user.name'));
20052
- var userLastInput = element(by.model('user.last'));
20053
-
20054
- it('should initialize to model', function() {
20055
- expect(user.getText()).toContain('{"name":"guest","last":"visitor"}');
20056
- expect(userNameValid.getText()).toContain('true');
20057
- expect(formValid.getText()).toContain('true');
20058
- });
20059
-
20060
- it('should be invalid if empty when required', function() {
20061
- userNameInput.clear();
20062
- userNameInput.sendKeys('');
20063
-
20064
- expect(user.getText()).toContain('{"last":"visitor"}');
20065
- expect(userNameValid.getText()).toContain('false');
20066
- expect(formValid.getText()).toContain('false');
20067
- });
20068
-
20069
- it('should be valid if empty when min length is set', function() {
20070
- userLastInput.clear();
20071
- userLastInput.sendKeys('');
20072
-
20073
- expect(user.getText()).toContain('{"name":"guest","last":""}');
20074
- expect(lastNameValid.getText()).toContain('true');
20075
- expect(formValid.getText()).toContain('true');
20076
- });
20077
-
20078
- it('should be invalid if less than required min length', function() {
20079
- userLastInput.clear();
20080
- userLastInput.sendKeys('xx');
20081
-
20082
- expect(user.getText()).toContain('{"name":"guest"}');
20083
- expect(lastNameValid.getText()).toContain('false');
20084
- expect(lastNameError.getText()).toContain('minlength');
20085
- expect(formValid.getText()).toContain('false');
20086
- });
20087
-
20088
- it('should be invalid if longer than max length', function() {
20089
- userLastInput.clear();
20090
- userLastInput.sendKeys('some ridiculously long name');
20091
-
20092
- expect(user.getText()).toContain('{"name":"guest"}');
20093
- expect(lastNameValid.getText()).toContain('false');
20094
- expect(lastNameError.getText()).toContain('maxlength');
20095
- expect(formValid.getText()).toContain('false');
20096
- });
20097
- </file>
20098
- </example>
20099
- */
20100
-var inputDirective = ['$browser', '$sniffer', '$filter', '$parse',
20101
- function($browser, $sniffer, $filter, $parse) {
20102
- return {
20103
- restrict: 'E',
20104
- require: ['?ngModel'],
20105
- link: {
20106
- pre: function(scope, element, attr, ctrls) {
20107
- if (ctrls[0]) {
20108
- (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer,
20109
- $browser, $filter, $parse);
20110
- }
20111
- }
20112
- }
20113
- };
20114
-}];
20115
-
20116
-var VALID_CLASS = 'ng-valid',
20117
- INVALID_CLASS = 'ng-invalid',
20118
- PRISTINE_CLASS = 'ng-pristine',
20119
- DIRTY_CLASS = 'ng-dirty',
20120
- UNTOUCHED_CLASS = 'ng-untouched',
20121
- TOUCHED_CLASS = 'ng-touched',
20122
- PENDING_CLASS = 'ng-pending';
20123
-
20124
-/**
20125
- * @ngdoc type
20126
- * @name ngModel.NgModelController
20127
- *
20128
- * @property {string} $viewValue Actual string value in the view.
20129
- * @property {*} $modelValue The value in the model that the control is bound to.
20130
- * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
20131
- the control reads value from the DOM. The functions are called in array order, each passing
20132
- its return value through to the next. The last return value is forwarded to the
20133
- {@link ngModel.NgModelController#$validators `$validators`} collection.
20134
-
20135
-Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue
20136
-`$viewValue`}.
20137
-
20138
-Returning `undefined` from a parser means a parse error occurred. In that case,
20139
-no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel`
20140
-will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`}
20141
-is set to `true`. The parse error is stored in `ngModel.$error.parse`.
20142
-
20143
- *
20144
- * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
20145
- the model value changes. The functions are called in reverse array order, each passing the value through to the
20146
- next. The last return value is used as the actual DOM value.
20147
- Used to format / convert values for display in the control.
20148
- * ```js
20149
- * function formatter(value) {
20150
- * if (value) {
20151
- * return value.toUpperCase();
20152
- * }
20153
- * }
20154
- * ngModel.$formatters.push(formatter);
20155
- * ```
20156
- *
20157
- * @property {Object.<string, function>} $validators A collection of validators that are applied
20158
- * whenever the model value changes. The key value within the object refers to the name of the
20159
- * validator while the function refers to the validation operation. The validation operation is
20160
- * provided with the model value as an argument and must return a true or false value depending
20161
- * on the response of that validation.
20162
- *
20163
- * ```js
20164
- * ngModel.$validators.validCharacters = function(modelValue, viewValue) {
20165
- * var value = modelValue || viewValue;
20166
- * return /[0-9]+/.test(value) &&
20167
- * /[a-z]+/.test(value) &&
20168
- * /[A-Z]+/.test(value) &&
20169
- * /\W+/.test(value);
20170
- * };
20171
- * ```
20172
- *
20173
- * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to
20174
- * perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided
20175
- * is expected to return a promise when it is run during the model validation process. Once the promise
20176
- * is delivered then the validation status will be set to true when fulfilled and false when rejected.
20177
- * When the asynchronous validators are triggered, each of the validators will run in parallel and the model
20178
- * value will only be updated once all validators have been fulfilled. As long as an asynchronous validator
20179
- * is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators
20180
- * will only run once all synchronous validators have passed.
20181
- *
20182
- * Please note that if $http is used then it is important that the server returns a success HTTP response code
20183
- * in order to fulfill the validation and a status level of `4xx` in order to reject the validation.
20184
- *
20185
- * ```js
20186
- * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {
20187
- * var value = modelValue || viewValue;
20188
- *
20189
- * // Lookup user by username
20190
- * return $http.get('/api/users/' + value).
20191
- * then(function resolved() {
20192
- * //username exists, this means validation fails
20193
- * return $q.reject('exists');
20194
- * }, function rejected() {
20195
- * //username does not exist, therefore this validation passes
20196
- * return true;
20197
- * });
20198
- * };
20199
- * ```
20200
- *
20201
- * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the
20202
- * view value has changed. It is called with no arguments, and its return value is ignored.
20203
- * This can be used in place of additional $watches against the model value.
20204
- *
20205
- * @property {Object} $error An object hash with all failing validator ids as keys.
20206
- * @property {Object} $pending An object hash with all pending validator ids as keys.
20207
- *
20208
- * @property {boolean} $untouched True if control has not lost focus yet.
20209
- * @property {boolean} $touched True if control has lost focus.
20210
- * @property {boolean} $pristine True if user has not interacted with the control yet.
20211
- * @property {boolean} $dirty True if user has already interacted with the control.
20212
- * @property {boolean} $valid True if there is no error.
20213
- * @property {boolean} $invalid True if at least one error on the control.
20214
- * @property {string} $name The name attribute of the control.
20215
- *
20216
- * @description
20217
- *
20218
- * `NgModelController` provides API for the {@link ngModel `ngModel`} directive.
20219
- * The controller contains services for data-binding, validation, CSS updates, and value formatting
20220
- * and parsing. It purposefully does not contain any logic which deals with DOM rendering or
20221
- * listening to DOM events.
20222
- * Such DOM related logic should be provided by other directives which make use of
20223
- * `NgModelController` for data-binding to control elements.
20224
- * Angular provides this DOM logic for most {@link input `input`} elements.
20225
- * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example
20226
- * custom control example} that uses `ngModelController` to bind to `contenteditable` elements.
20227
- *
20228
- * @example
20229
- * ### Custom Control Example
20230
- * This example shows how to use `NgModelController` with a custom control to achieve
20231
- * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)
20232
- * collaborate together to achieve the desired result.
20233
- *
20234
- * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element
20235
- * contents be edited in place by the user. This will not work on older browsers.
20236
- *
20237
- * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}
20238
- * module to automatically remove "bad" content like inline event listener (e.g. `<span onclick="...">`).
20239
- * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks
20240
- * that content using the `$sce` service.
20241
- *
20242
- * <example name="NgModelController" module="customControl" deps="angular-sanitize.js">
20243
- <file name="style.css">
20244
- [contenteditable] {
20245
- border: 1px solid black;
20246
- background-color: white;
20247
- min-height: 20px;
20248
- }
20249
-
20250
- .ng-invalid {
20251
- border: 1px solid red;
20252
- }
20253
-
20254
- </file>
20255
- <file name="script.js">
20256
- angular.module('customControl', ['ngSanitize']).
20257
- directive('contenteditable', ['$sce', function($sce) {
20258
- return {
20259
- restrict: 'A', // only activate on element attribute
20260
- require: '?ngModel', // get a hold of NgModelController
20261
- link: function(scope, element, attrs, ngModel) {
20262
- if (!ngModel) return; // do nothing if no ng-model
20263
-
20264
- // Specify how UI should be updated
20265
- ngModel.$render = function() {
20266
- element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));
20267
- };
20268
-
20269
- // Listen for change events to enable binding
20270
- element.on('blur keyup change', function() {
20271
- scope.$evalAsync(read);
20272
- });
20273
- read(); // initialize
20274
-
20275
- // Write data to the model
20276
- function read() {
20277
- var html = element.html();
20278
- // When we clear the content editable the browser leaves a <br> behind
20279
- // If strip-br attribute is provided then we strip this out
20280
- if ( attrs.stripBr && html == '<br>' ) {
20281
- html = '';
20282
- }
20283
- ngModel.$setViewValue(html);
20284
- }
20285
- }
20286
- };
20287
- }]);
20288
- </file>
20289
- <file name="index.html">
20290
- <form name="myForm">
20291
- <div contenteditable
20292
- name="myWidget" ng-model="userContent"
20293
- strip-br="true"
20294
- required>Change me!</div>
20295
- <span ng-show="myForm.myWidget.$error.required">Required!</span>
20296
- <hr>
20297
- <textarea ng-model="userContent"></textarea>
20298
- </form>
20299
- </file>
20300
- <file name="protractor.js" type="protractor">
20301
- it('should data-bind and become invalid', function() {
20302
- if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {
20303
- // SafariDriver can't handle contenteditable
20304
- // and Firefox driver can't clear contenteditables very well
20305
- return;
20306
- }
20307
- var contentEditable = element(by.css('[contenteditable]'));
20308
- var content = 'Change me!';
20309
-
20310
- expect(contentEditable.getText()).toEqual(content);
20311
-
20312
- contentEditable.clear();
20313
- contentEditable.sendKeys(protractor.Key.BACK_SPACE);
20314
- expect(contentEditable.getText()).toEqual('');
20315
- expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);
20316
- });
20317
- </file>
20318
- * </example>
20319
- *
20320
- *
20321
- */
20322
-var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate',
20323
- function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {
20324
- this.$viewValue = Number.NaN;
20325
- this.$modelValue = Number.NaN;
20326
- this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity.
20327
- this.$validators = {};
20328
- this.$asyncValidators = {};
20329
- this.$parsers = [];
20330
- this.$formatters = [];
20331
- this.$viewChangeListeners = [];
20332
- this.$untouched = true;
20333
- this.$touched = false;
20334
- this.$pristine = true;
20335
- this.$dirty = false;
20336
- this.$valid = true;
20337
- this.$invalid = false;
20338
- this.$error = {}; // keep invalid keys here
20339
- this.$$success = {}; // keep valid keys here
20340
- this.$pending = undefined; // keep pending keys here
20341
- this.$name = $interpolate($attr.name || '', false)($scope);
20342
-
20343
-
20344
- var parsedNgModel = $parse($attr.ngModel),
20345
- parsedNgModelAssign = parsedNgModel.assign,
20346
- ngModelGet = parsedNgModel,
20347
- ngModelSet = parsedNgModelAssign,
20348
- pendingDebounce = null,
20349
- ctrl = this;
20350
-
20351
- this.$$setOptions = function(options) {
20352
- ctrl.$options = options;
20353
- if (options && options.getterSetter) {
20354
- var invokeModelGetter = $parse($attr.ngModel + '()'),
20355
- invokeModelSetter = $parse($attr.ngModel + '($$$p)');
20356
-
20357
- ngModelGet = function($scope) {
20358
- var modelValue = parsedNgModel($scope);
20359
- if (isFunction(modelValue)) {
20360
- modelValue = invokeModelGetter($scope);
20361
- }
20362
- return modelValue;
20363
- };
20364
- ngModelSet = function($scope, newValue) {
20365
- if (isFunction(parsedNgModel($scope))) {
20366
- invokeModelSetter($scope, {$$$p: ctrl.$modelValue});
20367
- } else {
20368
- parsedNgModelAssign($scope, ctrl.$modelValue);
20369
- }
20370
- };
20371
- } else if (!parsedNgModel.assign) {
20372
- throw $ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
20373
- $attr.ngModel, startingTag($element));
20374
- }
20375
- };
20376
-
20377
- /**
20378
- * @ngdoc method
20379
- * @name ngModel.NgModelController#$render
20380
- *
20381
- * @description
20382
- * Called when the view needs to be updated. It is expected that the user of the ng-model
20383
- * directive will implement this method.
20384
- *
20385
- * The `$render()` method is invoked in the following situations:
20386
- *
20387
- * * `$rollbackViewValue()` is called. If we are rolling back the view value to the last
20388
- * committed value then `$render()` is called to update the input control.
20389
- * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and
20390
- * the `$viewValue` are different to last time.
20391
- *
20392
- * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of
20393
- * `$modelValue` and `$viewValue` are actually different to their previous value. If `$modelValue`
20394
- * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be
20395
- * invoked if you only change a property on the objects.
20396
- */
20397
- this.$render = noop;
20398
-
20399
- /**
20400
- * @ngdoc method
20401
- * @name ngModel.NgModelController#$isEmpty
20402
- *
20403
- * @description
20404
- * This is called when we need to determine if the value of an input is empty.
20405
- *
20406
- * For instance, the required directive does this to work out if the input has data or not.
20407
- *
20408
- * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.
20409
- *
20410
- * You can override this for input directives whose concept of being empty is different to the
20411
- * default. The `checkboxInputType` directive does this because in its case a value of `false`
20412
- * implies empty.
20413
- *
20414
- * @param {*} value The value of the input to check for emptiness.
20415
- * @returns {boolean} True if `value` is "empty".
20416
- */
20417
- this.$isEmpty = function(value) {
20418
- return isUndefined(value) || value === '' || value === null || value !== value;
20419
- };
20420
-
20421
- var parentForm = $element.inheritedData('$formController') || nullFormCtrl,
20422
- currentValidationRunId = 0;
20423
-
20424
- /**
20425
- * @ngdoc method
20426
- * @name ngModel.NgModelController#$setValidity
20427
- *
20428
- * @description
20429
- * Change the validity state, and notify the form.
20430
- *
20431
- * This method can be called within $parsers/$formatters or a custom validation implementation.
20432
- * However, in most cases it should be sufficient to use the `ngModel.$validators` and
20433
- * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.
20434
- *
20435
- * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned
20436
- * to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`
20437
- * (for unfulfilled `$asyncValidators`), so that it is available for data-binding.
20438
- * The `validationErrorKey` should be in camelCase and will get converted into dash-case
20439
- * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`
20440
- * class and can be bound to as `{{someForm.someControl.$error.myError}}` .
20441
- * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),
20442
- * or skipped (null). Pending is used for unfulfilled `$asyncValidators`.
20443
- * Skipped is used by Angular when validators do not run because of parse errors and
20444
- * when `$asyncValidators` do not run because any of the `$validators` failed.
20445
- */
20446
- addSetValidityMethod({
20447
- ctrl: this,
20448
- $element: $element,
20449
- set: function(object, property) {
20450
- object[property] = true;
20451
- },
20452
- unset: function(object, property) {
20453
- delete object[property];
20454
- },
20455
- parentForm: parentForm,
20456
- $animate: $animate
20457
- });
20458
-
20459
- /**
20460
- * @ngdoc method
20461
- * @name ngModel.NgModelController#$setPristine
20462
- *
20463
- * @description
20464
- * Sets the control to its pristine state.
20465
- *
20466
- * This method can be called to remove the `ng-dirty` class and set the control to its pristine
20467
- * state (`ng-pristine` class). A model is considered to be pristine when the control
20468
- * has not been changed from when first compiled.
20469
- */
20470
- this.$setPristine = function() {
20471
- ctrl.$dirty = false;
20472
- ctrl.$pristine = true;
20473
- $animate.removeClass($element, DIRTY_CLASS);
20474
- $animate.addClass($element, PRISTINE_CLASS);
20475
- };
20476
-
20477
- /**
20478
- * @ngdoc method
20479
- * @name ngModel.NgModelController#$setDirty
20480
- *
20481
- * @description
20482
- * Sets the control to its dirty state.
20483
- *
20484
- * This method can be called to remove the `ng-pristine` class and set the control to its dirty
20485
- * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed
20486
- * from when first compiled.
20487
- */
20488
- this.$setDirty = function() {
20489
- ctrl.$dirty = true;
20490
- ctrl.$pristine = false;
20491
- $animate.removeClass($element, PRISTINE_CLASS);
20492
- $animate.addClass($element, DIRTY_CLASS);
20493
- parentForm.$setDirty();
20494
- };
20495
-
20496
- /**
20497
- * @ngdoc method
20498
- * @name ngModel.NgModelController#$setUntouched
20499
- *
20500
- * @description
20501
- * Sets the control to its untouched state.
20502
- *
20503
- * This method can be called to remove the `ng-touched` class and set the control to its
20504
- * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched
20505
- * by default, however this function can be used to restore that state if the model has
20506
- * already been touched by the user.
20507
- */
20508
- this.$setUntouched = function() {
20509
- ctrl.$touched = false;
20510
- ctrl.$untouched = true;
20511
- $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS);
20512
- };
20513
-
20514
- /**
20515
- * @ngdoc method
20516
- * @name ngModel.NgModelController#$setTouched
20517
- *
20518
- * @description
20519
- * Sets the control to its touched state.
20520
- *
20521
- * This method can be called to remove the `ng-untouched` class and set the control to its
20522
- * touched state (`ng-touched` class). A model is considered to be touched when the user has
20523
- * first focused the control element and then shifted focus away from the control (blur event).
20524
- */
20525
- this.$setTouched = function() {
20526
- ctrl.$touched = true;
20527
- ctrl.$untouched = false;
20528
- $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS);
20529
- };
20530
-
20531
- /**
20532
- * @ngdoc method
20533
- * @name ngModel.NgModelController#$rollbackViewValue
20534
- *
20535
- * @description
20536
- * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`,
20537
- * which may be caused by a pending debounced event or because the input is waiting for a some
20538
- * future event.
20539
- *
20540
- * If you have an input that uses `ng-model-options` to set up debounced events or events such
20541
- * as blur you can have a situation where there is a period when the `$viewValue`
20542
- * is out of synch with the ngModel's `$modelValue`.
20543
- *
20544
- * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue`
20545
- * programmatically before these debounced/future events have resolved/occurred, because Angular's
20546
- * dirty checking mechanism is not able to tell whether the model has actually changed or not.
20547
- *
20548
- * The `$rollbackViewValue()` method should be called before programmatically changing the model of an
20549
- * input which may have such events pending. This is important in order to make sure that the
20550
- * input field will be updated with the new model value and any pending operations are cancelled.
20551
- *
20552
- * <example name="ng-model-cancel-update" module="cancel-update-example">
20553
- * <file name="app.js">
20554
- * angular.module('cancel-update-example', [])
20555
- *
20556
- * .controller('CancelUpdateController', ['$scope', function($scope) {
20557
- * $scope.resetWithCancel = function(e) {
20558
- * if (e.keyCode == 27) {
20559
- * $scope.myForm.myInput1.$rollbackViewValue();
20560
- * $scope.myValue = '';
20561
- * }
20562
- * };
20563
- * $scope.resetWithoutCancel = function(e) {
20564
- * if (e.keyCode == 27) {
20565
- * $scope.myValue = '';
20566
- * }
20567
- * };
20568
- * }]);
20569
- * </file>
20570
- * <file name="index.html">
20571
- * <div ng-controller="CancelUpdateController">
20572
- * <p>Try typing something in each input. See that the model only updates when you
20573
- * blur off the input.
20574
- * </p>
20575
- * <p>Now see what happens if you start typing then press the Escape key</p>
20576
- *
20577
- * <form name="myForm" ng-model-options="{ updateOn: 'blur' }">
20578
- * <p>With $rollbackViewValue()</p>
20579
- * <input name="myInput1" ng-model="myValue" ng-keydown="resetWithCancel($event)"><br/>
20580
- * myValue: "{{ myValue }}"
20581
- *
20582
- * <p>Without $rollbackViewValue()</p>
20583
- * <input name="myInput2" ng-model="myValue" ng-keydown="resetWithoutCancel($event)"><br/>
20584
- * myValue: "{{ myValue }}"
20585
- * </form>
20586
- * </div>
20587
- * </file>
20588
- * </example>
20589
- */
20590
- this.$rollbackViewValue = function() {
20591
- $timeout.cancel(pendingDebounce);
20592
- ctrl.$viewValue = ctrl.$$lastCommittedViewValue;
20593
- ctrl.$render();
20594
- };
20595
-
20596
- /**
20597
- * @ngdoc method
20598
- * @name ngModel.NgModelController#$validate
20599
- *
20600
- * @description
20601
- * Runs each of the registered validators (first synchronous validators and then
20602
- * asynchronous validators).
20603
- * If the validity changes to invalid, the model will be set to `undefined`,
20604
- * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`.
20605
- * If the validity changes to valid, it will set the model to the last available valid
20606
- * modelValue, i.e. either the last parsed value or the last value set from the scope.
20607
- */
20608
- this.$validate = function() {
20609
- // ignore $validate before model is initialized
20610
- if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
20611
- return;
20612
- }
20613
-
20614
- var viewValue = ctrl.$$lastCommittedViewValue;
20615
- // Note: we use the $$rawModelValue as $modelValue might have been
20616
- // set to undefined during a view -> model update that found validation
20617
- // errors. We can't parse the view here, since that could change
20618
- // the model although neither viewValue nor the model on the scope changed
20619
- var modelValue = ctrl.$$rawModelValue;
20620
-
20621
- // Check if the there's a parse error, so we don't unset it accidentially
20622
- var parserName = ctrl.$$parserName || 'parse';
20623
- var parserValid = ctrl.$error[parserName] ? false : undefined;
20624
-
20625
- var prevValid = ctrl.$valid;
20626
- var prevModelValue = ctrl.$modelValue;
20627
-
20628
- var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
20629
-
20630
- ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) {
20631
- // If there was no change in validity, don't update the model
20632
- // This prevents changing an invalid modelValue to undefined
20633
- if (!allowInvalid && prevValid !== allValid) {
20634
- // Note: Don't check ctrl.$valid here, as we could have
20635
- // external validators (e.g. calculated on the server),
20636
- // that just call $setValidity and need the model value
20637
- // to calculate their validity.
20638
- ctrl.$modelValue = allValid ? modelValue : undefined;
20639
-
20640
- if (ctrl.$modelValue !== prevModelValue) {
20641
- ctrl.$$writeModelToScope();
20642
- }
20643
- }
20644
- });
20645
-
20646
- };
20647
-
20648
- this.$$runValidators = function(parseValid, modelValue, viewValue, doneCallback) {
20649
- currentValidationRunId++;
20650
- var localValidationRunId = currentValidationRunId;
20651
-
20652
- // check parser error
20653
- if (!processParseErrors(parseValid)) {
20654
- validationDone(false);
20655
- return;
20656
- }
20657
- if (!processSyncValidators()) {
20658
- validationDone(false);
20659
- return;
20660
- }
20661
- processAsyncValidators();
20662
-
20663
- function processParseErrors(parseValid) {
20664
- var errorKey = ctrl.$$parserName || 'parse';
20665
- if (parseValid === undefined) {
20666
- setValidity(errorKey, null);
20667
- } else {
20668
- setValidity(errorKey, parseValid);
20669
- if (!parseValid) {
20670
- forEach(ctrl.$validators, function(v, name) {
20671
- setValidity(name, null);
20672
- });
20673
- forEach(ctrl.$asyncValidators, function(v, name) {
20674
- setValidity(name, null);
20675
- });
20676
- return false;
20677
- }
20678
- }
20679
- return true;
20680
- }
20681
-
20682
- function processSyncValidators() {
20683
- var syncValidatorsValid = true;
20684
- forEach(ctrl.$validators, function(validator, name) {
20685
- var result = validator(modelValue, viewValue);
20686
- syncValidatorsValid = syncValidatorsValid && result;
20687
- setValidity(name, result);
20688
- });
20689
- if (!syncValidatorsValid) {
20690
- forEach(ctrl.$asyncValidators, function(v, name) {
20691
- setValidity(name, null);
20692
- });
20693
- return false;
20694
- }
20695
- return true;
20696
- }
20697
-
20698
- function processAsyncValidators() {
20699
- var validatorPromises = [];
20700
- var allValid = true;
20701
- forEach(ctrl.$asyncValidators, function(validator, name) {
20702
- var promise = validator(modelValue, viewValue);
20703
- if (!isPromiseLike(promise)) {
20704
- throw $ngModelMinErr("$asyncValidators",
20705
- "Expected asynchronous validator to return a promise but got '{0}' instead.", promise);
20706
- }
20707
- setValidity(name, undefined);
20708
- validatorPromises.push(promise.then(function() {
20709
- setValidity(name, true);
20710
- }, function(error) {
20711
- allValid = false;
20712
- setValidity(name, false);
20713
- }));
20714
- });
20715
- if (!validatorPromises.length) {
20716
- validationDone(true);
20717
- } else {
20718
- $q.all(validatorPromises).then(function() {
20719
- validationDone(allValid);
20720
- }, noop);
20721
- }
20722
- }
20723
-
20724
- function setValidity(name, isValid) {
20725
- if (localValidationRunId === currentValidationRunId) {
20726
- ctrl.$setValidity(name, isValid);
20727
- }
20728
- }
20729
-
20730
- function validationDone(allValid) {
20731
- if (localValidationRunId === currentValidationRunId) {
20732
-
20733
- doneCallback(allValid);
20734
- }
20735
- }
20736
- };
20737
-
20738
- /**
20739
- * @ngdoc method
20740
- * @name ngModel.NgModelController#$commitViewValue
20741
- *
20742
- * @description
20743
- * Commit a pending update to the `$modelValue`.
20744
- *
20745
- * Updates may be pending by a debounced event or because the input is waiting for a some future
20746
- * event defined in `ng-model-options`. this method is rarely needed as `NgModelController`
20747
- * usually handles calling this in response to input events.
20748
- */
20749
- this.$commitViewValue = function() {
20750
- var viewValue = ctrl.$viewValue;
20751
-
20752
- $timeout.cancel(pendingDebounce);
20753
-
20754
- // If the view value has not changed then we should just exit, except in the case where there is
20755
- // a native validator on the element. In this case the validation state may have changed even though
20756
- // the viewValue has stayed empty.
20757
- if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) {
20758
- return;
20759
- }
20760
- ctrl.$$lastCommittedViewValue = viewValue;
20761
-
20762
- // change to dirty
20763
- if (ctrl.$pristine) {
20764
- this.$setDirty();
20765
- }
20766
- this.$$parseAndValidate();
20767
- };
20768
-
20769
- this.$$parseAndValidate = function() {
20770
- var viewValue = ctrl.$$lastCommittedViewValue;
20771
- var modelValue = viewValue;
20772
- var parserValid = isUndefined(modelValue) ? undefined : true;
20773
-
20774
- if (parserValid) {
20775
- for (var i = 0; i < ctrl.$parsers.length; i++) {
20776
- modelValue = ctrl.$parsers[i](modelValue);
20777
- if (isUndefined(modelValue)) {
20778
- parserValid = false;
20779
- break;
20780
- }
20781
- }
20782
- }
20783
- if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
20784
- // ctrl.$modelValue has not been touched yet...
20785
- ctrl.$modelValue = ngModelGet($scope);
20786
- }
20787
- var prevModelValue = ctrl.$modelValue;
20788
- var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
20789
- ctrl.$$rawModelValue = modelValue;
20790
-
20791
- if (allowInvalid) {
20792
- ctrl.$modelValue = modelValue;
20793
- writeToModelIfNeeded();
20794
- }
20795
-
20796
- // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date.
20797
- // This can happen if e.g. $setViewValue is called from inside a parser
20798
- ctrl.$$runValidators(parserValid, modelValue, ctrl.$$lastCommittedViewValue, function(allValid) {
20799
- if (!allowInvalid) {
20800
- // Note: Don't check ctrl.$valid here, as we could have
20801
- // external validators (e.g. calculated on the server),
20802
- // that just call $setValidity and need the model value
20803
- // to calculate their validity.
20804
- ctrl.$modelValue = allValid ? modelValue : undefined;
20805
- writeToModelIfNeeded();
20806
- }
20807
- });
20808
-
20809
- function writeToModelIfNeeded() {
20810
- if (ctrl.$modelValue !== prevModelValue) {
20811
- ctrl.$$writeModelToScope();
20812
- }
20813
- }
20814
- };
20815
-
20816
- this.$$writeModelToScope = function() {
20817
- ngModelSet($scope, ctrl.$modelValue);
20818
- forEach(ctrl.$viewChangeListeners, function(listener) {
20819
- try {
20820
- listener();
20821
- } catch (e) {
20822
- $exceptionHandler(e);
20823
- }
20824
- });
20825
- };
20826
-
20827
- /**
20828
- * @ngdoc method
20829
- * @name ngModel.NgModelController#$setViewValue
20830
- *
20831
- * @description
20832
- * Update the view value.
20833
- *
20834
- * This method should be called when an input directive want to change the view value; typically,
20835
- * this is done from within a DOM event handler.
20836
- *
20837
- * For example {@link ng.directive:input input} calls it when the value of the input changes and
20838
- * {@link ng.directive:select select} calls it when an option is selected.
20839
- *
20840
- * If the new `value` is an object (rather than a string or a number), we should make a copy of the
20841
- * object before passing it to `$setViewValue`. This is because `ngModel` does not perform a deep
20842
- * watch of objects, it only looks for a change of identity. If you only change the property of
20843
- * the object then ngModel will not realise that the object has changed and will not invoke the
20844
- * `$parsers` and `$validators` pipelines.
20845
- *
20846
- * For this reason, you should not change properties of the copy once it has been passed to
20847
- * `$setViewValue`. Otherwise you may cause the model value on the scope to change incorrectly.
20848
- *
20849
- * When this method is called, the new `value` will be staged for committing through the `$parsers`
20850
- * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged
20851
- * value sent directly for processing, finally to be applied to `$modelValue` and then the
20852
- * **expression** specified in the `ng-model` attribute.
20853
- *
20854
- * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called.
20855
- *
20856
- * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn`
20857
- * and the `default` trigger is not listed, all those actions will remain pending until one of the
20858
- * `updateOn` events is triggered on the DOM element.
20859
- * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions}
20860
- * directive is used with a custom debounce for this particular event.
20861
- *
20862
- * Note that calling this function does not trigger a `$digest`.
20863
- *
20864
- * @param {string} value Value from the view.
20865
- * @param {string} trigger Event that triggered the update.
20866
- */
20867
- this.$setViewValue = function(value, trigger) {
20868
- ctrl.$viewValue = value;
20869
- if (!ctrl.$options || ctrl.$options.updateOnDefault) {
20870
- ctrl.$$debounceViewValueCommit(trigger);
20871
- }
20872
- };
20873
-
20874
- this.$$debounceViewValueCommit = function(trigger) {
20875
- var debounceDelay = 0,
20876
- options = ctrl.$options,
20877
- debounce;
20878
-
20879
- if (options && isDefined(options.debounce)) {
20880
- debounce = options.debounce;
20881
- if (isNumber(debounce)) {
20882
- debounceDelay = debounce;
20883
- } else if (isNumber(debounce[trigger])) {
20884
- debounceDelay = debounce[trigger];
20885
- } else if (isNumber(debounce['default'])) {
20886
- debounceDelay = debounce['default'];
20887
- }
20888
- }
20889
-
20890
- $timeout.cancel(pendingDebounce);
20891
- if (debounceDelay) {
20892
- pendingDebounce = $timeout(function() {
20893
- ctrl.$commitViewValue();
20894
- }, debounceDelay);
20895
- } else if ($rootScope.$$phase) {
20896
- ctrl.$commitViewValue();
20897
- } else {
20898
- $scope.$apply(function() {
20899
- ctrl.$commitViewValue();
20900
- });
20901
- }
20902
- };
20903
-
20904
- // model -> value
20905
- // Note: we cannot use a normal scope.$watch as we want to detect the following:
20906
- // 1. scope value is 'a'
20907
- // 2. user enters 'b'
20908
- // 3. ng-change kicks in and reverts scope value to 'a'
20909
- // -> scope value did not change since the last digest as
20910
- // ng-change executes in apply phase
20911
- // 4. view should be changed back to 'a'
20912
- $scope.$watch(function ngModelWatch() {
20913
- var modelValue = ngModelGet($scope);
20914
-
20915
- // if scope model value and ngModel value are out of sync
20916
- // TODO(perf): why not move this to the action fn?
20917
- if (modelValue !== ctrl.$modelValue) {
20918
- ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;
20919
-
20920
- var formatters = ctrl.$formatters,
20921
- idx = formatters.length;
20922
-
20923
- var viewValue = modelValue;
20924
- while (idx--) {
20925
- viewValue = formatters[idx](viewValue);
20926
- }
20927
- if (ctrl.$viewValue !== viewValue) {
20928
- ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;
20929
- ctrl.$render();
20930
-
20931
- ctrl.$$runValidators(undefined, modelValue, viewValue, noop);
20932
- }
20933
- }
20934
-
20935
- return modelValue;
20936
- });
20937
-}];
20938
-
20939
-
20940
-/**
20941
- * @ngdoc directive
20942
- * @name ngModel
20943
- *
20944
- * @element input
20945
- * @priority 1
20946
- *
20947
- * @description
20948
- * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a
20949
- * property on the scope using {@link ngModel.NgModelController NgModelController},
20950
- * which is created and exposed by this directive.
20951
- *
20952
- * `ngModel` is responsible for:
20953
- *
20954
- * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`
20955
- * require.
20956
- * - Providing validation behavior (i.e. required, number, email, url).
20957
- * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors).
20958
- * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations.
20959
- * - Registering the control with its parent {@link ng.directive:form form}.
20960
- *
20961
- * Note: `ngModel` will try to bind to the property given by evaluating the expression on the
20962
- * current scope. If the property doesn't already exist on this scope, it will be created
20963
- * implicitly and added to the scope.
20964
- *
20965
- * For best practices on using `ngModel`, see:
20966
- *
20967
- * - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes)
20968
- *
20969
- * For basic examples, how to use `ngModel`, see:
20970
- *
20971
- * - {@link ng.directive:input input}
20972
- * - {@link input[text] text}
20973
- * - {@link input[checkbox] checkbox}
20974
- * - {@link input[radio] radio}
20975
- * - {@link input[number] number}
20976
- * - {@link input[email] email}
20977
- * - {@link input[url] url}
20978
- * - {@link input[date] date}
20979
- * - {@link input[datetime-local] datetime-local}
20980
- * - {@link input[time] time}
20981
- * - {@link input[month] month}
20982
- * - {@link input[week] week}
20983
- * - {@link ng.directive:select select}
20984
- * - {@link ng.directive:textarea textarea}
20985
- *
20986
- * # CSS classes
20987
- * The following CSS classes are added and removed on the associated input/select/textarea element
20988
- * depending on the validity of the model.
20989
- *
20990
- * - `ng-valid`: the model is valid
20991
- * - `ng-invalid`: the model is invalid
20992
- * - `ng-valid-[key]`: for each valid key added by `$setValidity`
20993
- * - `ng-invalid-[key]`: for each invalid key added by `$setValidity`
20994
- * - `ng-pristine`: the control hasn't been interacted with yet
20995
- * - `ng-dirty`: the control has been interacted with
20996
- * - `ng-touched`: the control has been blurred
20997
- * - `ng-untouched`: the control hasn't been blurred
20998
- * - `ng-pending`: any `$asyncValidators` are unfulfilled
20999
- *
21000
- * Keep in mind that ngAnimate can detect each of these classes when added and removed.
21001
- *
21002
- * ## Animation Hooks
21003
- *
21004
- * Animations within models are triggered when any of the associated CSS classes are added and removed
21005
- * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,
21006
- * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.
21007
- * The animations that are triggered within ngModel are similar to how they work in ngClass and
21008
- * animations can be hooked into using CSS transitions, keyframes as well as JS animations.
21009
- *
21010
- * The following example shows a simple way to utilize CSS transitions to style an input element
21011
- * that has been rendered as invalid after it has been validated:
21012
- *
21013
- * <pre>
21014
- * //be sure to include ngAnimate as a module to hook into more
21015
- * //advanced animations
21016
- * .my-input {
21017
- * transition:0.5s linear all;
21018
- * background: white;
21019
- * }
21020
- * .my-input.ng-invalid {
21021
- * background: red;
21022
- * color:white;
21023
- * }
21024
- * </pre>
21025
- *
21026
- * @example
21027
- * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample">
21028
- <file name="index.html">
21029
- <script>
21030
- angular.module('inputExample', [])
21031
- .controller('ExampleController', ['$scope', function($scope) {
21032
- $scope.val = '1';
21033
- }]);
21034
- </script>
21035
- <style>
21036
- .my-input {
21037
- -webkit-transition:all linear 0.5s;
21038
- transition:all linear 0.5s;
21039
- background: transparent;
21040
- }
21041
- .my-input.ng-invalid {
21042
- color:white;
21043
- background: red;
21044
- }
21045
- </style>
21046
- Update input to see transitions when valid/invalid.
21047
- Integer is a valid value.
21048
- <form name="testForm" ng-controller="ExampleController">
21049
- <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" />
21050
- </form>
21051
- </file>
21052
- * </example>
21053
- *
21054
- * ## Binding to a getter/setter
21055
- *
21056
- * Sometimes it's helpful to bind `ngModel` to a getter/setter function. A getter/setter is a
21057
- * function that returns a representation of the model when called with zero arguments, and sets
21058
- * the internal state of a model when called with an argument. It's sometimes useful to use this
21059
- * for models that have an internal representation that's different than what the model exposes
21060
- * to the view.
21061
- *
21062
- * <div class="alert alert-success">
21063
- * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more
21064
- * frequently than other parts of your code.
21065
- * </div>
21066
- *
21067
- * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that
21068
- * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to
21069
- * a `<form>`, which will enable this behavior for all `<input>`s within it. See
21070
- * {@link ng.directive:ngModelOptions `ngModelOptions`} for more.
21071
- *
21072
- * The following example shows how to use `ngModel` with a getter/setter:
21073
- *
21074
- * @example
21075
- * <example name="ngModel-getter-setter" module="getterSetterExample">
21076
- <file name="index.html">
21077
- <div ng-controller="ExampleController">
21078
- <form name="userForm">
21079
- Name:
21080
- <input type="text" name="userName"
21081
- ng-model="user.name"
21082
- ng-model-options="{ getterSetter: true }" />
21083
- </form>
21084
- <pre>user.name = <span ng-bind="user.name()"></span></pre>
21085
- </div>
21086
- </file>
21087
- <file name="app.js">
21088
- angular.module('getterSetterExample', [])
21089
- .controller('ExampleController', ['$scope', function($scope) {
21090
- var _name = 'Brian';
21091
- $scope.user = {
21092
- name: function(newName) {
21093
- if (angular.isDefined(newName)) {
21094
- _name = newName;
21095
- }
21096
- return _name;
21097
- }
21098
- };
21099
- }]);
21100
- </file>
21101
- * </example>
21102
- */
21103
-var ngModelDirective = ['$rootScope', function($rootScope) {
21104
- return {
21105
- restrict: 'A',
21106
- require: ['ngModel', '^?form', '^?ngModelOptions'],
21107
- controller: NgModelController,
21108
- // Prelink needs to run before any input directive
21109
- // so that we can set the NgModelOptions in NgModelController
21110
- // before anyone else uses it.
21111
- priority: 1,
21112
- compile: function ngModelCompile(element) {
21113
- // Setup initial state of the control
21114
- element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS);
21115
-
21116
- return {
21117
- pre: function ngModelPreLink(scope, element, attr, ctrls) {
21118
- var modelCtrl = ctrls[0],
21119
- formCtrl = ctrls[1] || nullFormCtrl;
21120
-
21121
- modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);
21122
-
21123
- // notify others, especially parent forms
21124
- formCtrl.$addControl(modelCtrl);
21125
-
21126
- attr.$observe('name', function(newValue) {
21127
- if (modelCtrl.$name !== newValue) {
21128
- formCtrl.$$renameControl(modelCtrl, newValue);
21129
- }
21130
- });
21131
-
21132
- scope.$on('$destroy', function() {
21133
- formCtrl.$removeControl(modelCtrl);
21134
- });
21135
- },
21136
- post: function ngModelPostLink(scope, element, attr, ctrls) {
21137
- var modelCtrl = ctrls[0];
21138
- if (modelCtrl.$options && modelCtrl.$options.updateOn) {
21139
- element.on(modelCtrl.$options.updateOn, function(ev) {
21140
- modelCtrl.$$debounceViewValueCommit(ev && ev.type);
21141
- });
21142
- }
21143
-
21144
- element.on('blur', function(ev) {
21145
- if (modelCtrl.$touched) return;
21146
-
21147
- if ($rootScope.$$phase) {
21148
- scope.$evalAsync(modelCtrl.$setTouched);
21149
- } else {
21150
- scope.$apply(modelCtrl.$setTouched);
21151
- }
21152
- });
21153
- }
21154
- };
21155
- }
21156
- };
21157
-}];
21158
-
21159
-
21160
-/**
21161
- * @ngdoc directive
21162
- * @name ngChange
21163
- *
21164
- * @description
21165
- * Evaluate the given expression when the user changes the input.
21166
- * The expression is evaluated immediately, unlike the JavaScript onchange event
21167
- * which only triggers at the end of a change (usually, when the user leaves the
21168
- * form element or presses the return key).
21169
- *
21170
- * The `ngChange` expression is only evaluated when a change in the input value causes
21171
- * a new value to be committed to the model.
21172
- *
21173
- * It will not be evaluated:
21174
- * * if the value returned from the `$parsers` transformation pipeline has not changed
21175
- * * if the input has continued to be invalid since the model will stay `null`
21176
- * * if the model is changed programmatically and not by a change to the input value
21177
- *
21178
- *
21179
- * Note, this directive requires `ngModel` to be present.
21180
- *
21181
- * @element input
21182
- * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change
21183
- * in input value.
21184
- *
21185
- * @example
21186
- * <example name="ngChange-directive" module="changeExample">
21187
- * <file name="index.html">
21188
- * <script>
21189
- * angular.module('changeExample', [])
21190
- * .controller('ExampleController', ['$scope', function($scope) {
21191
- * $scope.counter = 0;
21192
- * $scope.change = function() {
21193
- * $scope.counter++;
21194
- * };
21195
- * }]);
21196
- * </script>
21197
- * <div ng-controller="ExampleController">
21198
- * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
21199
- * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" />
21200
- * <label for="ng-change-example2">Confirmed</label><br />
21201
- * <tt>debug = {{confirmed}}</tt><br/>
21202
- * <tt>counter = {{counter}}</tt><br/>
21203
- * </div>
21204
- * </file>
21205
- * <file name="protractor.js" type="protractor">
21206
- * var counter = element(by.binding('counter'));
21207
- * var debug = element(by.binding('confirmed'));
21208
- *
21209
- * it('should evaluate the expression if changing from view', function() {
21210
- * expect(counter.getText()).toContain('0');
21211
- *
21212
- * element(by.id('ng-change-example1')).click();
21213
- *
21214
- * expect(counter.getText()).toContain('1');
21215
- * expect(debug.getText()).toContain('true');
21216
- * });
21217
- *
21218
- * it('should not evaluate the expression if changing from model', function() {
21219
- * element(by.id('ng-change-example2')).click();
21220
-
21221
- * expect(counter.getText()).toContain('0');
21222
- * expect(debug.getText()).toContain('true');
21223
- * });
21224
- * </file>
21225
- * </example>
21226
- */
21227
-var ngChangeDirective = valueFn({
21228
- restrict: 'A',
21229
- require: 'ngModel',
21230
- link: function(scope, element, attr, ctrl) {
21231
- ctrl.$viewChangeListeners.push(function() {
21232
- scope.$eval(attr.ngChange);
21233
- });
21234
- }
21235
-});
21236
-
21237
-
21238
-var requiredDirective = function() {
21239
- return {
21240
- restrict: 'A',
21241
- require: '?ngModel',
21242
- link: function(scope, elm, attr, ctrl) {
21243
- if (!ctrl) return;
21244
- attr.required = true; // force truthy in case we are on non input element
21245
-
21246
- ctrl.$validators.required = function(modelValue, viewValue) {
21247
- return !attr.required || !ctrl.$isEmpty(viewValue);
21248
- };
21249
-
21250
- attr.$observe('required', function() {
21251
- ctrl.$validate();
21252
- });
21253
- }
21254
- };
21255
-};
21256
-
21257
-
21258
-var patternDirective = function() {
21259
- return {
21260
- restrict: 'A',
21261
- require: '?ngModel',
21262
- link: function(scope, elm, attr, ctrl) {
21263
- if (!ctrl) return;
21264
-
21265
- var regexp, patternExp = attr.ngPattern || attr.pattern;
21266
- attr.$observe('pattern', function(regex) {
21267
- if (isString(regex) && regex.length > 0) {
21268
- regex = new RegExp('^' + regex + '$');
21269
- }
21270
-
21271
- if (regex && !regex.test) {
21272
- throw minErr('ngPattern')('noregexp',
21273
- 'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp,
21274
- regex, startingTag(elm));
21275
- }
21276
-
21277
- regexp = regex || undefined;
21278
- ctrl.$validate();
21279
- });
21280
-
21281
- ctrl.$validators.pattern = function(value) {
21282
- return ctrl.$isEmpty(value) || isUndefined(regexp) || regexp.test(value);
21283
- };
21284
- }
21285
- };
21286
-};
21287
-
21288
-
21289
-var maxlengthDirective = function() {
21290
- return {
21291
- restrict: 'A',
21292
- require: '?ngModel',
21293
- link: function(scope, elm, attr, ctrl) {
21294
- if (!ctrl) return;
21295
-
21296
- var maxlength = -1;
21297
- attr.$observe('maxlength', function(value) {
21298
- var intVal = int(value);
21299
- maxlength = isNaN(intVal) ? -1 : intVal;
21300
- ctrl.$validate();
21301
- });
21302
- ctrl.$validators.maxlength = function(modelValue, viewValue) {
21303
- return (maxlength < 0) || ctrl.$isEmpty(modelValue) || (viewValue.length <= maxlength);
21304
- };
21305
- }
21306
- };
21307
-};
21308
-
21309
-var minlengthDirective = function() {
21310
- return {
21311
- restrict: 'A',
21312
- require: '?ngModel',
21313
- link: function(scope, elm, attr, ctrl) {
21314
- if (!ctrl) return;
21315
-
21316
- var minlength = 0;
21317
- attr.$observe('minlength', function(value) {
21318
- minlength = int(value) || 0;
21319
- ctrl.$validate();
21320
- });
21321
- ctrl.$validators.minlength = function(modelValue, viewValue) {
21322
- return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength;
21323
- };
21324
- }
21325
- };
21326
-};
21327
-
21328
-
21329
-/**
21330
- * @ngdoc directive
21331
- * @name ngList
21332
- *
21333
- * @description
21334
- * Text input that converts between a delimited string and an array of strings. The default
21335
- * delimiter is a comma followed by a space - equivalent to `ng-list=", "`. You can specify a custom
21336
- * delimiter as the value of the `ngList` attribute - for example, `ng-list=" | "`.
21337
- *
21338
- * The behaviour of the directive is affected by the use of the `ngTrim` attribute.
21339
- * * If `ngTrim` is set to `"false"` then whitespace around both the separator and each
21340
- * list item is respected. This implies that the user of the directive is responsible for
21341
- * dealing with whitespace but also allows you to use whitespace as a delimiter, such as a
21342
- * tab or newline character.
21343
- * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected
21344
- * when joining the list items back together) and whitespace around each list item is stripped
21345
- * before it is added to the model.
21346
- *
21347
- * ### Example with Validation
21348
- *
21349
- * <example name="ngList-directive" module="listExample">
21350
- * <file name="app.js">
21351
- * angular.module('listExample', [])
21352
- * .controller('ExampleController', ['$scope', function($scope) {
21353
- * $scope.names = ['morpheus', 'neo', 'trinity'];
21354
- * }]);
21355
- * </file>
21356
- * <file name="index.html">
21357
- * <form name="myForm" ng-controller="ExampleController">
21358
- * List: <input name="namesInput" ng-model="names" ng-list required>
21359
- * <span class="error" ng-show="myForm.namesInput.$error.required">
21360
- * Required!</span>
21361
- * <br>
21362
- * <tt>names = {{names}}</tt><br/>
21363
- * <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>
21364
- * <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>
21365
- * <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
21366
- * <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
21367
- * </form>
21368
- * </file>
21369
- * <file name="protractor.js" type="protractor">
21370
- * var listInput = element(by.model('names'));
21371
- * var names = element(by.exactBinding('names'));
21372
- * var valid = element(by.binding('myForm.namesInput.$valid'));
21373
- * var error = element(by.css('span.error'));
21374
- *
21375
- * it('should initialize to model', function() {
21376
- * expect(names.getText()).toContain('["morpheus","neo","trinity"]');
21377
- * expect(valid.getText()).toContain('true');
21378
- * expect(error.getCssValue('display')).toBe('none');
21379
- * });
21380
- *
21381
- * it('should be invalid if empty', function() {
21382
- * listInput.clear();
21383
- * listInput.sendKeys('');
21384
- *
21385
- * expect(names.getText()).toContain('');
21386
- * expect(valid.getText()).toContain('false');
21387
- * expect(error.getCssValue('display')).not.toBe('none');
21388
- * });
21389
- * </file>
21390
- * </example>
21391
- *
21392
- * ### Example - splitting on whitespace
21393
- * <example name="ngList-directive-newlines">
21394
- * <file name="index.html">
21395
- * <textarea ng-model="list" ng-list="&#10;" ng-trim="false"></textarea>
21396
- * <pre>{{ list | json }}</pre>
21397
- * </file>
21398
- * <file name="protractor.js" type="protractor">
21399
- * it("should split the text by newlines", function() {
21400
- * var listInput = element(by.model('list'));
21401
- * var output = element(by.binding('list | json'));
21402
- * listInput.sendKeys('abc\ndef\nghi');
21403
- * expect(output.getText()).toContain('[\n "abc",\n "def",\n "ghi"\n]');
21404
- * });
21405
- * </file>
21406
- * </example>
21407
- *
21408
- * @element input
21409
- * @param {string=} ngList optional delimiter that should be used to split the value.
21410
- */
21411
-var ngListDirective = function() {
21412
- return {
21413
- restrict: 'A',
21414
- priority: 100,
21415
- require: 'ngModel',
21416
- link: function(scope, element, attr, ctrl) {
21417
- // We want to control whitespace trimming so we use this convoluted approach
21418
- // to access the ngList attribute, which doesn't pre-trim the attribute
21419
- var ngList = element.attr(attr.$attr.ngList) || ', ';
21420
- var trimValues = attr.ngTrim !== 'false';
21421
- var separator = trimValues ? trim(ngList) : ngList;
21422
-
21423
- var parse = function(viewValue) {
21424
- // If the viewValue is invalid (say required but empty) it will be `undefined`
21425
- if (isUndefined(viewValue)) return;
21426
-
21427
- var list = [];
21428
-
21429
- if (viewValue) {
21430
- forEach(viewValue.split(separator), function(value) {
21431
- if (value) list.push(trimValues ? trim(value) : value);
21432
- });
21433
- }
21434
-
21435
- return list;
21436
- };
21437
-
21438
- ctrl.$parsers.push(parse);
21439
- ctrl.$formatters.push(function(value) {
21440
- if (isArray(value)) {
21441
- return value.join(ngList);
21442
- }
21443
-
21444
- return undefined;
21445
- });
21446
-
21447
- // Override the standard $isEmpty because an empty array means the input is empty.
21448
- ctrl.$isEmpty = function(value) {
21449
- return !value || !value.length;
21450
- };
21451
- }
21452
- };
21453
-};
21454
-
21455
-
21456
-var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
21457
-/**
21458
- * @ngdoc directive
21459
- * @name ngValue
21460
- *
21461
- * @description
21462
- * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`},
21463
- * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to
21464
- * the bound value.
21465
- *
21466
- * `ngValue` is useful when dynamically generating lists of radio buttons using
21467
- * {@link ngRepeat `ngRepeat`}, as shown below.
21468
- *
21469
- * Likewise, `ngValue` can be used to generate `<option>` elements for
21470
- * the {@link select `select`} element. In that case however, only strings are supported
21471
- * for the `value `attribute, so the resulting `ngModel` will always be a string.
21472
- * Support for `select` models with non-string values is available via `ngOptions`.
21473
- *
21474
- * @element input
21475
- * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute
21476
- * of the `input` element
21477
- *
21478
- * @example
21479
- <example name="ngValue-directive" module="valueExample">
21480
- <file name="index.html">
21481
- <script>
21482
- angular.module('valueExample', [])
21483
- .controller('ExampleController', ['$scope', function($scope) {
21484
- $scope.names = ['pizza', 'unicorns', 'robots'];
21485
- $scope.my = { favorite: 'unicorns' };
21486
- }]);
21487
- </script>
21488
- <form ng-controller="ExampleController">
21489
- <h2>Which is your favorite?</h2>
21490
- <label ng-repeat="name in names" for="{{name}}">
21491
- {{name}}
21492
- <input type="radio"
21493
- ng-model="my.favorite"
21494
- ng-value="name"
21495
- id="{{name}}"
21496
- name="favorite">
21497
- </label>
21498
- <div>You chose {{my.favorite}}</div>
21499
- </form>
21500
- </file>
21501
- <file name="protractor.js" type="protractor">
21502
- var favorite = element(by.binding('my.favorite'));
21503
-
21504
- it('should initialize to model', function() {
21505
- expect(favorite.getText()).toContain('unicorns');
21506
- });
21507
- it('should bind the values to the inputs', function() {
21508
- element.all(by.model('my.favorite')).get(0).click();
21509
- expect(favorite.getText()).toContain('pizza');
21510
- });
21511
- </file>
21512
- </example>
21513
- */
21514
-var ngValueDirective = function() {
21515
- return {
21516
- restrict: 'A',
21517
- priority: 100,
21518
- compile: function(tpl, tplAttr) {
21519
- if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {
21520
- return function ngValueConstantLink(scope, elm, attr) {
21521
- attr.$set('value', scope.$eval(attr.ngValue));
21522
- };
21523
- } else {
21524
- return function ngValueLink(scope, elm, attr) {
21525
- scope.$watch(attr.ngValue, function valueWatchAction(value) {
21526
- attr.$set('value', value);
21527
- });
21528
- };
21529
- }
21530
- }
21531
- };
21532
-};
21533
-
21534
-/**
21535
- * @ngdoc directive
21536
- * @name ngModelOptions
21537
- *
21538
- * @description
21539
- * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of
21540
- * events that will trigger a model update and/or a debouncing delay so that the actual update only
21541
- * takes place when a timer expires; this timer will be reset after another change takes place.
21542
- *
21543
- * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might
21544
- * be different than the value in the actual model. This means that if you update the model you
21545
- * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in
21546
- * order to make sure it is synchronized with the model and that any debounced action is canceled.
21547
- *
21548
- * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`}
21549
- * method is by making sure the input is placed inside a form that has a `name` attribute. This is
21550
- * important because `form` controllers are published to the related scope under the name in their
21551
- * `name` attribute.
21552
- *
21553
- * Any pending changes will take place immediately when an enclosing form is submitted via the
21554
- * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
21555
- * to have access to the updated model.
21556
- *
21557
- * `ngModelOptions` has an effect on the element it's declared on and its descendants.
21558
- *
21559
- * @param {Object} ngModelOptions options to apply to the current model. Valid keys are:
21560
- * - `updateOn`: string specifying which event should the input be bound to. You can set several
21561
- * events using an space delimited list. There is a special event called `default` that
21562
- * matches the default events belonging of the control.
21563
- * - `debounce`: integer value which contains the debounce model update value in milliseconds. A
21564
- * value of 0 triggers an immediate update. If an object is supplied instead, you can specify a
21565
- * custom value for each event. For example:
21566
- * `ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }"`
21567
- * - `allowInvalid`: boolean value which indicates that the model can be set with values that did
21568
- * not validate correctly instead of the default behavior of setting the model to undefined.
21569
- * - `getterSetter`: boolean value which determines whether or not to treat functions bound to
21570
- `ngModel` as getters/setters.
21571
- * - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for
21572
- * `<input type="date">`, `<input type="time">`, ... . Right now, the only supported value is `'UTC'`,
21573
- * otherwise the default timezone of the browser will be used.
21574
- *
21575
- * @example
21576
-
21577
- The following example shows how to override immediate updates. Changes on the inputs within the
21578
- form will update the model only when the control loses focus (blur event). If `escape` key is
21579
- pressed while the input field is focused, the value is reset to the value in the current model.
21580
-
21581
- <example name="ngModelOptions-directive-blur" module="optionsExample">
21582
- <file name="index.html">
21583
- <div ng-controller="ExampleController">
21584
- <form name="userForm">
21585
- Name:
21586
- <input type="text" name="userName"
21587
- ng-model="user.name"
21588
- ng-model-options="{ updateOn: 'blur' }"
21589
- ng-keyup="cancel($event)" /><br />
21590
-
21591
- Other data:
21592
- <input type="text" ng-model="user.data" /><br />
21593
- </form>
21594
- <pre>user.name = <span ng-bind="user.name"></span></pre>
21595
- </div>
21596
- </file>
21597
- <file name="app.js">
21598
- angular.module('optionsExample', [])
21599
- .controller('ExampleController', ['$scope', function($scope) {
21600
- $scope.user = { name: 'say', data: '' };
21601
-
21602
- $scope.cancel = function(e) {
21603
- if (e.keyCode == 27) {
21604
- $scope.userForm.userName.$rollbackViewValue();
21605
- }
21606
- };
21607
- }]);
21608
- </file>
21609
- <file name="protractor.js" type="protractor">
21610
- var model = element(by.binding('user.name'));
21611
- var input = element(by.model('user.name'));
21612
- var other = element(by.model('user.data'));
21613
-
21614
- it('should allow custom events', function() {
21615
- input.sendKeys(' hello');
21616
- input.click();
21617
- expect(model.getText()).toEqual('say');
21618
- other.click();
21619
- expect(model.getText()).toEqual('say hello');
21620
- });
21621
-
21622
- it('should $rollbackViewValue when model changes', function() {
21623
- input.sendKeys(' hello');
21624
- expect(input.getAttribute('value')).toEqual('say hello');
21625
- input.sendKeys(protractor.Key.ESCAPE);
21626
- expect(input.getAttribute('value')).toEqual('say');
21627
- other.click();
21628
- expect(model.getText()).toEqual('say');
21629
- });
21630
- </file>
21631
- </example>
21632
-
21633
- This one shows how to debounce model changes. Model will be updated only 1 sec after last change.
21634
- If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.
21635
-
21636
- <example name="ngModelOptions-directive-debounce" module="optionsExample">
21637
- <file name="index.html">
21638
- <div ng-controller="ExampleController">
21639
- <form name="userForm">
21640
- Name:
21641
- <input type="text" name="userName"
21642
- ng-model="user.name"
21643
- ng-model-options="{ debounce: 1000 }" />
21644
- <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button><br />
21645
- </form>
21646
- <pre>user.name = <span ng-bind="user.name"></span></pre>
21647
- </div>
21648
- </file>
21649
- <file name="app.js">
21650
- angular.module('optionsExample', [])
21651
- .controller('ExampleController', ['$scope', function($scope) {
21652
- $scope.user = { name: 'say' };
21653
- }]);
21654
- </file>
21655
- </example>
21656
-
21657
- This one shows how to bind to getter/setters:
21658
-
21659
- <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample">
21660
- <file name="index.html">
21661
- <div ng-controller="ExampleController">
21662
- <form name="userForm">
21663
- Name:
21664
- <input type="text" name="userName"
21665
- ng-model="user.name"
21666
- ng-model-options="{ getterSetter: true }" />
21667
- </form>
21668
- <pre>user.name = <span ng-bind="user.name()"></span></pre>
21669
- </div>
21670
- </file>
21671
- <file name="app.js">
21672
- angular.module('getterSetterExample', [])
21673
- .controller('ExampleController', ['$scope', function($scope) {
21674
- var _name = 'Brian';
21675
- $scope.user = {
21676
- name: function(newName) {
21677
- return angular.isDefined(newName) ? (_name = newName) : _name;
21678
- }
21679
- };
21680
- }]);
21681
- </file>
21682
- </example>
21683
- */
21684
-var ngModelOptionsDirective = function() {
21685
- return {
21686
- restrict: 'A',
21687
- controller: ['$scope', '$attrs', function($scope, $attrs) {
21688
- var that = this;
21689
- this.$options = $scope.$eval($attrs.ngModelOptions);
21690
- // Allow adding/overriding bound events
21691
- if (this.$options.updateOn !== undefined) {
21692
- this.$options.updateOnDefault = false;
21693
- // extract "default" pseudo-event from list of events that can trigger a model update
21694
- this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() {
21695
- that.$options.updateOnDefault = true;
21696
- return ' ';
21697
- }));
21698
- } else {
21699
- this.$options.updateOnDefault = true;
21700
- }
21701
- }]
21702
- };
21703
-};
21704
-
21705
-// helper methods
21706
-function addSetValidityMethod(context) {
21707
- var ctrl = context.ctrl,
21708
- $element = context.$element,
21709
- classCache = {},
21710
- set = context.set,
21711
- unset = context.unset,
21712
- parentForm = context.parentForm,
21713
- $animate = context.$animate;
21714
-
21715
- classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS));
21716
-
21717
- ctrl.$setValidity = setValidity;
21718
-
21719
- function setValidity(validationErrorKey, state, options) {
21720
- if (state === undefined) {
21721
- createAndSet('$pending', validationErrorKey, options);
21722
- } else {
21723
- unsetAndCleanup('$pending', validationErrorKey, options);
21724
- }
21725
- if (!isBoolean(state)) {
21726
- unset(ctrl.$error, validationErrorKey, options);
21727
- unset(ctrl.$$success, validationErrorKey, options);
21728
- } else {
21729
- if (state) {
21730
- unset(ctrl.$error, validationErrorKey, options);
21731
- set(ctrl.$$success, validationErrorKey, options);
21732
- } else {
21733
- set(ctrl.$error, validationErrorKey, options);
21734
- unset(ctrl.$$success, validationErrorKey, options);
21735
- }
21736
- }
21737
- if (ctrl.$pending) {
21738
- cachedToggleClass(PENDING_CLASS, true);
21739
- ctrl.$valid = ctrl.$invalid = undefined;
21740
- toggleValidationCss('', null);
21741
- } else {
21742
- cachedToggleClass(PENDING_CLASS, false);
21743
- ctrl.$valid = isObjectEmpty(ctrl.$error);
21744
- ctrl.$invalid = !ctrl.$valid;
21745
- toggleValidationCss('', ctrl.$valid);
21746
- }
21747
-
21748
- // re-read the state as the set/unset methods could have
21749
- // combined state in ctrl.$error[validationError] (used for forms),
21750
- // where setting/unsetting only increments/decrements the value,
21751
- // and does not replace it.
21752
- var combinedState;
21753
- if (ctrl.$pending && ctrl.$pending[validationErrorKey]) {
21754
- combinedState = undefined;
21755
- } else if (ctrl.$error[validationErrorKey]) {
21756
- combinedState = false;
21757
- } else if (ctrl.$$success[validationErrorKey]) {
21758
- combinedState = true;
21759
- } else {
21760
- combinedState = null;
21761
- }
21762
- toggleValidationCss(validationErrorKey, combinedState);
21763
- parentForm.$setValidity(validationErrorKey, combinedState, ctrl);
21764
- }
21765
-
21766
- function createAndSet(name, value, options) {
21767
- if (!ctrl[name]) {
21768
- ctrl[name] = {};
21769
- }
21770
- set(ctrl[name], value, options);
21771
- }
21772
-
21773
- function unsetAndCleanup(name, value, options) {
21774
- if (ctrl[name]) {
21775
- unset(ctrl[name], value, options);
21776
- }
21777
- if (isObjectEmpty(ctrl[name])) {
21778
- ctrl[name] = undefined;
21779
- }
21780
- }
21781
-
21782
- function cachedToggleClass(className, switchValue) {
21783
- if (switchValue && !classCache[className]) {
21784
- $animate.addClass($element, className);
21785
- classCache[className] = true;
21786
- } else if (!switchValue && classCache[className]) {
21787
- $animate.removeClass($element, className);
21788
- classCache[className] = false;
21789
- }
21790
- }
21791
-
21792
- function toggleValidationCss(validationErrorKey, isValid) {
21793
- validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';
21794
-
21795
- cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true);
21796
- cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false);
21797
- }
21798
-}
21799
-
21800
-function isObjectEmpty(obj) {
21801
- if (obj) {
21802
- for (var prop in obj) {
21803
- return false;
21804
- }
21805
- }
21806
- return true;
21807
-}
21808
-
21809
-/**
21810
- * @ngdoc directive
21811
- * @name ngBind
21812
- * @restrict AC
21813
- *
21814
- * @description
21815
- * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element
21816
- * with the value of a given expression, and to update the text content when the value of that
21817
- * expression changes.
21818
- *
21819
- * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like
21820
- * `{{ expression }}` which is similar but less verbose.
21821
- *
21822
- * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily
21823
- * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an
21824
- * element attribute, it makes the bindings invisible to the user while the page is loading.
21825
- *
21826
- * An alternative solution to this problem would be using the
21827
- * {@link ng.directive:ngCloak ngCloak} directive.
21828
- *
21829
- *
21830
- * @element ANY
21831
- * @param {expression} ngBind {@link guide/expression Expression} to evaluate.
21832
- *
21833
- * @example
21834
- * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.
21835
- <example module="bindExample">
21836
- <file name="index.html">
21837
- <script>
21838
- angular.module('bindExample', [])
21839
- .controller('ExampleController', ['$scope', function($scope) {
21840
- $scope.name = 'Whirled';
21841
- }]);
21842
- </script>
21843
- <div ng-controller="ExampleController">
21844
- Enter name: <input type="text" ng-model="name"><br>
21845
- Hello <span ng-bind="name"></span>!
21846
- </div>
21847
- </file>
21848
- <file name="protractor.js" type="protractor">
21849
- it('should check ng-bind', function() {
21850
- var nameInput = element(by.model('name'));
21851
-
21852
- expect(element(by.binding('name')).getText()).toBe('Whirled');
21853
- nameInput.clear();
21854
- nameInput.sendKeys('world');
21855
- expect(element(by.binding('name')).getText()).toBe('world');
21856
- });
21857
- </file>
21858
- </example>
21859
- */
21860
-var ngBindDirective = ['$compile', function($compile) {
21861
- return {
21862
- restrict: 'AC',
21863
- compile: function ngBindCompile(templateElement) {
21864
- $compile.$$addBindingClass(templateElement);
21865
- return function ngBindLink(scope, element, attr) {
21866
- $compile.$$addBindingInfo(element, attr.ngBind);
21867
- element = element[0];
21868
- scope.$watch(attr.ngBind, function ngBindWatchAction(value) {
21869
- element.textContent = value === undefined ? '' : value;
21870
- });
21871
- };
21872
- }
21873
- };
21874
-}];
21875
-
21876
-
21877
-/**
21878
- * @ngdoc directive
21879
- * @name ngBindTemplate
21880
- *
21881
- * @description
21882
- * The `ngBindTemplate` directive specifies that the element
21883
- * text content should be replaced with the interpolation of the template
21884
- * in the `ngBindTemplate` attribute.
21885
- * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`
21886
- * expressions. This directive is needed since some HTML elements
21887
- * (such as TITLE and OPTION) cannot contain SPAN elements.
21888
- *
21889
- * @element ANY
21890
- * @param {string} ngBindTemplate template of form
21891
- * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.
21892
- *
21893
- * @example
21894
- * Try it here: enter text in text box and watch the greeting change.
21895
- <example module="bindExample">
21896
- <file name="index.html">
21897
- <script>
21898
- angular.module('bindExample', [])
21899
- .controller('ExampleController', ['$scope', function($scope) {
21900
- $scope.salutation = 'Hello';
21901
- $scope.name = 'World';
21902
- }]);
21903
- </script>
21904
- <div ng-controller="ExampleController">
21905
- Salutation: <input type="text" ng-model="salutation"><br>
21906
- Name: <input type="text" ng-model="name"><br>
21907
- <pre ng-bind-template="{{salutation}} {{name}}!"></pre>
21908
- </div>
21909
- </file>
21910
- <file name="protractor.js" type="protractor">
21911
- it('should check ng-bind', function() {
21912
- var salutationElem = element(by.binding('salutation'));
21913
- var salutationInput = element(by.model('salutation'));
21914
- var nameInput = element(by.model('name'));
21915
-
21916
- expect(salutationElem.getText()).toBe('Hello World!');
21917
-
21918
- salutationInput.clear();
21919
- salutationInput.sendKeys('Greetings');
21920
- nameInput.clear();
21921
- nameInput.sendKeys('user');
21922
-
21923
- expect(salutationElem.getText()).toBe('Greetings user!');
21924
- });
21925
- </file>
21926
- </example>
21927
- */
21928
-var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) {
21929
- return {
21930
- compile: function ngBindTemplateCompile(templateElement) {
21931
- $compile.$$addBindingClass(templateElement);
21932
- return function ngBindTemplateLink(scope, element, attr) {
21933
- var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));
21934
- $compile.$$addBindingInfo(element, interpolateFn.expressions);
21935
- element = element[0];
21936
- attr.$observe('ngBindTemplate', function(value) {
21937
- element.textContent = value === undefined ? '' : value;
21938
- });
21939
- };
21940
- }
21941
- };
21942
-}];
21943
-
21944
-
21945
-/**
21946
- * @ngdoc directive
21947
- * @name ngBindHtml
21948
- *
21949
- * @description
21950
- * Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default,
21951
- * the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service.
21952
- * To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link
21953
- * ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize}
21954
- * in your module's dependencies, you need to include "angular-sanitize.js" in your application.
21955
- *
21956
- * You may also bypass sanitization for values you know are safe. To do so, bind to
21957
- * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example
21958
- * under {@link ng.$sce#show-me-an-example-using-sce- Strict Contextual Escaping (SCE)}.
21959
- *
21960
- * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you
21961
- * will have an exception (instead of an exploit.)
21962
- *
21963
- * @element ANY
21964
- * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.
21965
- *
21966
- * @example
21967
-
21968
- <example module="bindHtmlExample" deps="angular-sanitize.js">
21969
- <file name="index.html">
21970
- <div ng-controller="ExampleController">
21971
- <p ng-bind-html="myHTML"></p>
21972
- </div>
21973
- </file>
21974
-
21975
- <file name="script.js">
21976
- angular.module('bindHtmlExample', ['ngSanitize'])
21977
- .controller('ExampleController', ['$scope', function($scope) {
21978
- $scope.myHTML =
21979
- 'I am an <code>HTML</code>string with ' +
21980
- '<a href="#">links!</a> and other <em>stuff</em>';
21981
- }]);
21982
- </file>
21983
-
21984
- <file name="protractor.js" type="protractor">
21985
- it('should check ng-bind-html', function() {
21986
- expect(element(by.binding('myHTML')).getText()).toBe(
21987
- 'I am an HTMLstring with links! and other stuff');
21988
- });
21989
- </file>
21990
- </example>
21991
- */
21992
-var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) {
21993
- return {
21994
- restrict: 'A',
21995
- compile: function ngBindHtmlCompile(tElement, tAttrs) {
21996
- var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
21997
- var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {
21998
- return (value || '').toString();
21999
- });
22000
- $compile.$$addBindingClass(tElement);
22001
-
22002
- return function ngBindHtmlLink(scope, element, attr) {
22003
- $compile.$$addBindingInfo(element, attr.ngBindHtml);
22004
-
22005
- scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {
22006
- // we re-evaluate the expr because we want a TrustedValueHolderType
22007
- // for $sce, not a string
22008
- element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
22009
- });
22010
- };
22011
- }
22012
- };
22013
-}];
22014
-
22015
-function classDirective(name, selector) {
22016
- name = 'ngClass' + name;
22017
- return ['$animate', function($animate) {
22018
- return {
22019
- restrict: 'AC',
22020
- link: function(scope, element, attr) {
22021
- var oldVal;
22022
-
22023
- scope.$watch(attr[name], ngClassWatchAction, true);
22024
-
22025
- attr.$observe('class', function(value) {
22026
- ngClassWatchAction(scope.$eval(attr[name]));
22027
- });
22028
-
22029
-
22030
- if (name !== 'ngClass') {
22031
- scope.$watch('$index', function($index, old$index) {
22032
- // jshint bitwise: false
22033
- var mod = $index & 1;
22034
- if (mod !== (old$index & 1)) {
22035
- var classes = arrayClasses(scope.$eval(attr[name]));
22036
- mod === selector ?
22037
- addClasses(classes) :
22038
- removeClasses(classes);
22039
- }
22040
- });
22041
- }
22042
-
22043
- function addClasses(classes) {
22044
- var newClasses = digestClassCounts(classes, 1);
22045
- attr.$addClass(newClasses);
22046
- }
22047
-
22048
- function removeClasses(classes) {
22049
- var newClasses = digestClassCounts(classes, -1);
22050
- attr.$removeClass(newClasses);
22051
- }
22052
-
22053
- function digestClassCounts(classes, count) {
22054
- var classCounts = element.data('$classCounts') || {};
22055
- var classesToUpdate = [];
22056
- forEach(classes, function(className) {
22057
- if (count > 0 || classCounts[className]) {
22058
- classCounts[className] = (classCounts[className] || 0) + count;
22059
- if (classCounts[className] === +(count > 0)) {
22060
- classesToUpdate.push(className);
22061
- }
22062
- }
22063
- });
22064
- element.data('$classCounts', classCounts);
22065
- return classesToUpdate.join(' ');
22066
- }
22067
-
22068
- function updateClasses(oldClasses, newClasses) {
22069
- var toAdd = arrayDifference(newClasses, oldClasses);
22070
- var toRemove = arrayDifference(oldClasses, newClasses);
22071
- toAdd = digestClassCounts(toAdd, 1);
22072
- toRemove = digestClassCounts(toRemove, -1);
22073
- if (toAdd && toAdd.length) {
22074
- $animate.addClass(element, toAdd);
22075
- }
22076
- if (toRemove && toRemove.length) {
22077
- $animate.removeClass(element, toRemove);
22078
- }
22079
- }
22080
-
22081
- function ngClassWatchAction(newVal) {
22082
- if (selector === true || scope.$index % 2 === selector) {
22083
- var newClasses = arrayClasses(newVal || []);
22084
- if (!oldVal) {
22085
- addClasses(newClasses);
22086
- } else if (!equals(newVal,oldVal)) {
22087
- var oldClasses = arrayClasses(oldVal);
22088
- updateClasses(oldClasses, newClasses);
22089
- }
22090
- }
22091
- oldVal = shallowCopy(newVal);
22092
- }
22093
- }
22094
- };
22095
-
22096
- function arrayDifference(tokens1, tokens2) {
22097
- var values = [];
22098
-
22099
- outer:
22100
- for (var i = 0; i < tokens1.length; i++) {
22101
- var token = tokens1[i];
22102
- for (var j = 0; j < tokens2.length; j++) {
22103
- if (token == tokens2[j]) continue outer;
22104
- }
22105
- values.push(token);
22106
- }
22107
- return values;
22108
- }
22109
-
22110
- function arrayClasses(classVal) {
22111
- if (isArray(classVal)) {
22112
- return classVal;
22113
- } else if (isString(classVal)) {
22114
- return classVal.split(' ');
22115
- } else if (isObject(classVal)) {
22116
- var classes = [];
22117
- forEach(classVal, function(v, k) {
22118
- if (v) {
22119
- classes = classes.concat(k.split(' '));
22120
- }
22121
- });
22122
- return classes;
22123
- }
22124
- return classVal;
22125
- }
22126
- }];
22127
-}
22128
-
22129
-/**
22130
- * @ngdoc directive
22131
- * @name ngClass
22132
- * @restrict AC
22133
- *
22134
- * @description
22135
- * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding
22136
- * an expression that represents all classes to be added.
22137
- *
22138
- * The directive operates in three different ways, depending on which of three types the expression
22139
- * evaluates to:
22140
- *
22141
- * 1. If the expression evaluates to a string, the string should be one or more space-delimited class
22142
- * names.
22143
- *
22144
- * 2. If the expression evaluates to an array, each element of the array should be a string that is
22145
- * one or more space-delimited class names.
22146
- *
22147
- * 3. If the expression evaluates to an object, then for each key-value pair of the
22148
- * object with a truthy value the corresponding key is used as a class name.
22149
- *
22150
- * The directive won't add duplicate classes if a particular class was already set.
22151
- *
22152
- * When the expression changes, the previously added classes are removed and only then the
22153
- * new classes are added.
22154
- *
22155
- * @animations
22156
- * add - happens just before the class is applied to the element
22157
- * remove - happens just before the class is removed from the element
22158
- *
22159
- * @element ANY
22160
- * @param {expression} ngClass {@link guide/expression Expression} to eval. The result
22161
- * of the evaluation can be a string representing space delimited class
22162
- * names, an array, or a map of class names to boolean values. In the case of a map, the
22163
- * names of the properties whose values are truthy will be added as css classes to the
22164
- * element.
22165
- *
22166
- * @example Example that demonstrates basic bindings via ngClass directive.
22167
- <example>
22168
- <file name="index.html">
22169
- <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p>
22170
- <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br>
22171
- <input type="checkbox" ng-model="important"> important (apply "bold" class)<br>
22172
- <input type="checkbox" ng-model="error"> error (apply "red" class)
22173
- <hr>
22174
- <p ng-class="style">Using String Syntax</p>
22175
- <input type="text" ng-model="style" placeholder="Type: bold strike red">
22176
- <hr>
22177
- <p ng-class="[style1, style2, style3]">Using Array Syntax</p>
22178
- <input ng-model="style1" placeholder="Type: bold, strike or red"><br>
22179
- <input ng-model="style2" placeholder="Type: bold, strike or red"><br>
22180
- <input ng-model="style3" placeholder="Type: bold, strike or red"><br>
22181
- </file>
22182
- <file name="style.css">
22183
- .strike {
22184
- text-decoration: line-through;
22185
- }
22186
- .bold {
22187
- font-weight: bold;
22188
- }
22189
- .red {
22190
- color: red;
22191
- }
22192
- </file>
22193
- <file name="protractor.js" type="protractor">
22194
- var ps = element.all(by.css('p'));
22195
-
22196
- it('should let you toggle the class', function() {
22197
-
22198
- expect(ps.first().getAttribute('class')).not.toMatch(/bold/);
22199
- expect(ps.first().getAttribute('class')).not.toMatch(/red/);
22200
-
22201
- element(by.model('important')).click();
22202
- expect(ps.first().getAttribute('class')).toMatch(/bold/);
22203
-
22204
- element(by.model('error')).click();
22205
- expect(ps.first().getAttribute('class')).toMatch(/red/);
22206
- });
22207
-
22208
- it('should let you toggle string example', function() {
22209
- expect(ps.get(1).getAttribute('class')).toBe('');
22210
- element(by.model('style')).clear();
22211
- element(by.model('style')).sendKeys('red');
22212
- expect(ps.get(1).getAttribute('class')).toBe('red');
22213
- });
22214
-
22215
- it('array example should have 3 classes', function() {
22216
- expect(ps.last().getAttribute('class')).toBe('');
22217
- element(by.model('style1')).sendKeys('bold');
22218
- element(by.model('style2')).sendKeys('strike');
22219
- element(by.model('style3')).sendKeys('red');
22220
- expect(ps.last().getAttribute('class')).toBe('bold strike red');
22221
- });
22222
- </file>
22223
- </example>
22224
-
22225
- ## Animations
22226
-
22227
- The example below demonstrates how to perform animations using ngClass.
22228
-
22229
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
22230
- <file name="index.html">
22231
- <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'">
22232
- <input id="clearbtn" type="button" value="clear" ng-click="myVar=''">
22233
- <br>
22234
- <span class="base-class" ng-class="myVar">Sample Text</span>
22235
- </file>
22236
- <file name="style.css">
22237
- .base-class {
22238
- -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
22239
- transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
22240
- }
22241
-
22242
- .base-class.my-class {
22243
- color: red;
22244
- font-size:3em;
22245
- }
22246
- </file>
22247
- <file name="protractor.js" type="protractor">
22248
- it('should check ng-class', function() {
22249
- expect(element(by.css('.base-class')).getAttribute('class')).not.
22250
- toMatch(/my-class/);
22251
-
22252
- element(by.id('setbtn')).click();
22253
-
22254
- expect(element(by.css('.base-class')).getAttribute('class')).
22255
- toMatch(/my-class/);
22256
-
22257
- element(by.id('clearbtn')).click();
22258
-
22259
- expect(element(by.css('.base-class')).getAttribute('class')).not.
22260
- toMatch(/my-class/);
22261
- });
22262
- </file>
22263
- </example>
22264
-
22265
-
22266
- ## ngClass and pre-existing CSS3 Transitions/Animations
22267
- The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.
22268
- Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder
22269
- any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure
22270
- to view the step by step details of {@link ng.$animate#addClass $animate.addClass} and
22271
- {@link ng.$animate#removeClass $animate.removeClass}.
22272
- */
22273
-var ngClassDirective = classDirective('', true);
22274
-
22275
-/**
22276
- * @ngdoc directive
22277
- * @name ngClassOdd
22278
- * @restrict AC
22279
- *
22280
- * @description
22281
- * The `ngClassOdd` and `ngClassEven` directives work exactly as
22282
- * {@link ng.directive:ngClass ngClass}, except they work in
22283
- * conjunction with `ngRepeat` and take effect only on odd (even) rows.
22284
- *
22285
- * This directive can be applied only within the scope of an
22286
- * {@link ng.directive:ngRepeat ngRepeat}.
22287
- *
22288
- * @element ANY
22289
- * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result
22290
- * of the evaluation can be a string representing space delimited class names or an array.
22291
- *
22292
- * @example
22293
- <example>
22294
- <file name="index.html">
22295
- <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
22296
- <li ng-repeat="name in names">
22297
- <span ng-class-odd="'odd'" ng-class-even="'even'">
22298
- {{name}}
22299
- </span>
22300
- </li>
22301
- </ol>
22302
- </file>
22303
- <file name="style.css">
22304
- .odd {
22305
- color: red;
22306
- }
22307
- .even {
22308
- color: blue;
22309
- }
22310
- </file>
22311
- <file name="protractor.js" type="protractor">
22312
- it('should check ng-class-odd and ng-class-even', function() {
22313
- expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
22314
- toMatch(/odd/);
22315
- expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
22316
- toMatch(/even/);
22317
- });
22318
- </file>
22319
- </example>
22320
- */
22321
-var ngClassOddDirective = classDirective('Odd', 0);
22322
-
22323
-/**
22324
- * @ngdoc directive
22325
- * @name ngClassEven
22326
- * @restrict AC
22327
- *
22328
- * @description
22329
- * The `ngClassOdd` and `ngClassEven` directives work exactly as
22330
- * {@link ng.directive:ngClass ngClass}, except they work in
22331
- * conjunction with `ngRepeat` and take effect only on odd (even) rows.
22332
- *
22333
- * This directive can be applied only within the scope of an
22334
- * {@link ng.directive:ngRepeat ngRepeat}.
22335
- *
22336
- * @element ANY
22337
- * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The
22338
- * result of the evaluation can be a string representing space delimited class names or an array.
22339
- *
22340
- * @example
22341
- <example>
22342
- <file name="index.html">
22343
- <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
22344
- <li ng-repeat="name in names">
22345
- <span ng-class-odd="'odd'" ng-class-even="'even'">
22346
- {{name}} &nbsp; &nbsp; &nbsp;
22347
- </span>
22348
- </li>
22349
- </ol>
22350
- </file>
22351
- <file name="style.css">
22352
- .odd {
22353
- color: red;
22354
- }
22355
- .even {
22356
- color: blue;
22357
- }
22358
- </file>
22359
- <file name="protractor.js" type="protractor">
22360
- it('should check ng-class-odd and ng-class-even', function() {
22361
- expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
22362
- toMatch(/odd/);
22363
- expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
22364
- toMatch(/even/);
22365
- });
22366
- </file>
22367
- </example>
22368
- */
22369
-var ngClassEvenDirective = classDirective('Even', 1);
22370
-
22371
-/**
22372
- * @ngdoc directive
22373
- * @name ngCloak
22374
- * @restrict AC
22375
- *
22376
- * @description
22377
- * The `ngCloak` directive is used to prevent the Angular html template from being briefly
22378
- * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this
22379
- * directive to avoid the undesirable flicker effect caused by the html template display.
22380
- *
22381
- * The directive can be applied to the `<body>` element, but the preferred usage is to apply
22382
- * multiple `ngCloak` directives to small portions of the page to permit progressive rendering
22383
- * of the browser view.
22384
- *
22385
- * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and
22386
- * `angular.min.js`.
22387
- * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
22388
- *
22389
- * ```css
22390
- * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
22391
- * display: none !important;
22392
- * }
22393
- * ```
22394
- *
22395
- * When this css rule is loaded by the browser, all html elements (including their children) that
22396
- * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive
22397
- * during the compilation of the template it deletes the `ngCloak` element attribute, making
22398
- * the compiled element visible.
22399
- *
22400
- * For the best result, the `angular.js` script must be loaded in the head section of the html
22401
- * document; alternatively, the css rule above must be included in the external stylesheet of the
22402
- * application.
22403
- *
22404
- * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they
22405
- * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css
22406
- * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below.
22407
- *
22408
- * @element ANY
22409
- *
22410
- * @example
22411
- <example>
22412
- <file name="index.html">
22413
- <div id="template1" ng-cloak>{{ 'hello' }}</div>
22414
- <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div>
22415
- </file>
22416
- <file name="protractor.js" type="protractor">
22417
- it('should remove the template directive and css class', function() {
22418
- expect($('#template1').getAttribute('ng-cloak')).
22419
- toBeNull();
22420
- expect($('#template2').getAttribute('ng-cloak')).
22421
- toBeNull();
22422
- });
22423
- </file>
22424
- </example>
22425
- *
22426
- */
22427
-var ngCloakDirective = ngDirective({
22428
- compile: function(element, attr) {
22429
- attr.$set('ngCloak', undefined);
22430
- element.removeClass('ng-cloak');
22431
- }
22432
-});
22433
-
22434
-/**
22435
- * @ngdoc directive
22436
- * @name ngController
22437
- *
22438
- * @description
22439
- * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular
22440
- * supports the principles behind the Model-View-Controller design pattern.
22441
- *
22442
- * MVC components in angular:
22443
- *
22444
- * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties
22445
- * are accessed through bindings.
22446
- * * View — The template (HTML with data bindings) that is rendered into the View.
22447
- * * Controller — The `ngController` directive specifies a Controller class; the class contains business
22448
- * logic behind the application to decorate the scope with functions and values
22449
- *
22450
- * Note that you can also attach controllers to the DOM by declaring it in a route definition
22451
- * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller
22452
- * again using `ng-controller` in the template itself. This will cause the controller to be attached
22453
- * and executed twice.
22454
- *
22455
- * @element ANY
22456
- * @scope
22457
- * @priority 500
22458
- * @param {expression} ngController Name of a constructor function registered with the current
22459
- * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression}
22460
- * that on the current scope evaluates to a constructor function.
22461
- *
22462
- * The controller instance can be published into a scope property by specifying
22463
- * `ng-controller="as propertyName"`.
22464
- *
22465
- * If the current `$controllerProvider` is configured to use globals (via
22466
- * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may
22467
- * also be the name of a globally accessible constructor function (not recommended).
22468
- *
22469
- * @example
22470
- * Here is a simple form for editing user contact information. Adding, removing, clearing, and
22471
- * greeting are methods declared on the controller (see source tab). These methods can
22472
- * easily be called from the angular markup. Any changes to the data are automatically reflected
22473
- * in the View without the need for a manual update.
22474
- *
22475
- * Two different declaration styles are included below:
22476
- *
22477
- * * one binds methods and properties directly onto the controller using `this`:
22478
- * `ng-controller="SettingsController1 as settings"`
22479
- * * one injects `$scope` into the controller:
22480
- * `ng-controller="SettingsController2"`
22481
- *
22482
- * The second option is more common in the Angular community, and is generally used in boilerplates
22483
- * and in this guide. However, there are advantages to binding properties directly to the controller
22484
- * and avoiding scope.
22485
- *
22486
- * * Using `controller as` makes it obvious which controller you are accessing in the template when
22487
- * multiple controllers apply to an element.
22488
- * * If you are writing your controllers as classes you have easier access to the properties and
22489
- * methods, which will appear on the scope, from inside the controller code.
22490
- * * Since there is always a `.` in the bindings, you don't have to worry about prototypal
22491
- * inheritance masking primitives.
22492
- *
22493
- * This example demonstrates the `controller as` syntax.
22494
- *
22495
- * <example name="ngControllerAs" module="controllerAsExample">
22496
- * <file name="index.html">
22497
- * <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings">
22498
- * Name: <input type="text" ng-model="settings.name"/>
22499
- * [ <a href="" ng-click="settings.greet()">greet</a> ]<br/>
22500
- * Contact:
22501
- * <ul>
22502
- * <li ng-repeat="contact in settings.contacts">
22503
- * <select ng-model="contact.type">
22504
- * <option>phone</option>
22505
- * <option>email</option>
22506
- * </select>
22507
- * <input type="text" ng-model="contact.value"/>
22508
- * [ <a href="" ng-click="settings.clearContact(contact)">clear</a>
22509
- * | <a href="" ng-click="settings.removeContact(contact)">X</a> ]
22510
- * </li>
22511
- * <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li>
22512
- * </ul>
22513
- * </div>
22514
- * </file>
22515
- * <file name="app.js">
22516
- * angular.module('controllerAsExample', [])
22517
- * .controller('SettingsController1', SettingsController1);
22518
- *
22519
- * function SettingsController1() {
22520
- * this.name = "John Smith";
22521
- * this.contacts = [
22522
- * {type: 'phone', value: '408 555 1212'},
22523
- * {type: 'email', value: 'john.smith@example.org'} ];
22524
- * }
22525
- *
22526
- * SettingsController1.prototype.greet = function() {
22527
- * alert(this.name);
22528
- * };
22529
- *
22530
- * SettingsController1.prototype.addContact = function() {
22531
- * this.contacts.push({type: 'email', value: 'yourname@example.org'});
22532
- * };
22533
- *
22534
- * SettingsController1.prototype.removeContact = function(contactToRemove) {
22535
- * var index = this.contacts.indexOf(contactToRemove);
22536
- * this.contacts.splice(index, 1);
22537
- * };
22538
- *
22539
- * SettingsController1.prototype.clearContact = function(contact) {
22540
- * contact.type = 'phone';
22541
- * contact.value = '';
22542
- * };
22543
- * </file>
22544
- * <file name="protractor.js" type="protractor">
22545
- * it('should check controller as', function() {
22546
- * var container = element(by.id('ctrl-as-exmpl'));
22547
- * expect(container.element(by.model('settings.name'))
22548
- * .getAttribute('value')).toBe('John Smith');
22549
- *
22550
- * var firstRepeat =
22551
- * container.element(by.repeater('contact in settings.contacts').row(0));
22552
- * var secondRepeat =
22553
- * container.element(by.repeater('contact in settings.contacts').row(1));
22554
- *
22555
- * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
22556
- * .toBe('408 555 1212');
22557
- *
22558
- * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
22559
- * .toBe('john.smith@example.org');
22560
- *
22561
- * firstRepeat.element(by.linkText('clear')).click();
22562
- *
22563
- * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
22564
- * .toBe('');
22565
- *
22566
- * container.element(by.linkText('add')).click();
22567
- *
22568
- * expect(container.element(by.repeater('contact in settings.contacts').row(2))
22569
- * .element(by.model('contact.value'))
22570
- * .getAttribute('value'))
22571
- * .toBe('yourname@example.org');
22572
- * });
22573
- * </file>
22574
- * </example>
22575
- *
22576
- * This example demonstrates the "attach to `$scope`" style of controller.
22577
- *
22578
- * <example name="ngController" module="controllerExample">
22579
- * <file name="index.html">
22580
- * <div id="ctrl-exmpl" ng-controller="SettingsController2">
22581
- * Name: <input type="text" ng-model="name"/>
22582
- * [ <a href="" ng-click="greet()">greet</a> ]<br/>
22583
- * Contact:
22584
- * <ul>
22585
- * <li ng-repeat="contact in contacts">
22586
- * <select ng-model="contact.type">
22587
- * <option>phone</option>
22588
- * <option>email</option>
22589
- * </select>
22590
- * <input type="text" ng-model="contact.value"/>
22591
- * [ <a href="" ng-click="clearContact(contact)">clear</a>
22592
- * | <a href="" ng-click="removeContact(contact)">X</a> ]
22593
- * </li>
22594
- * <li>[ <a href="" ng-click="addContact()">add</a> ]</li>
22595
- * </ul>
22596
- * </div>
22597
- * </file>
22598
- * <file name="app.js">
22599
- * angular.module('controllerExample', [])
22600
- * .controller('SettingsController2', ['$scope', SettingsController2]);
22601
- *
22602
- * function SettingsController2($scope) {
22603
- * $scope.name = "John Smith";
22604
- * $scope.contacts = [
22605
- * {type:'phone', value:'408 555 1212'},
22606
- * {type:'email', value:'john.smith@example.org'} ];
22607
- *
22608
- * $scope.greet = function() {
22609
- * alert($scope.name);
22610
- * };
22611
- *
22612
- * $scope.addContact = function() {
22613
- * $scope.contacts.push({type:'email', value:'yourname@example.org'});
22614
- * };
22615
- *
22616
- * $scope.removeContact = function(contactToRemove) {
22617
- * var index = $scope.contacts.indexOf(contactToRemove);
22618
- * $scope.contacts.splice(index, 1);
22619
- * };
22620
- *
22621
- * $scope.clearContact = function(contact) {
22622
- * contact.type = 'phone';
22623
- * contact.value = '';
22624
- * };
22625
- * }
22626
- * </file>
22627
- * <file name="protractor.js" type="protractor">
22628
- * it('should check controller', function() {
22629
- * var container = element(by.id('ctrl-exmpl'));
22630
- *
22631
- * expect(container.element(by.model('name'))
22632
- * .getAttribute('value')).toBe('John Smith');
22633
- *
22634
- * var firstRepeat =
22635
- * container.element(by.repeater('contact in contacts').row(0));
22636
- * var secondRepeat =
22637
- * container.element(by.repeater('contact in contacts').row(1));
22638
- *
22639
- * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
22640
- * .toBe('408 555 1212');
22641
- * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
22642
- * .toBe('john.smith@example.org');
22643
- *
22644
- * firstRepeat.element(by.linkText('clear')).click();
22645
- *
22646
- * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
22647
- * .toBe('');
22648
- *
22649
- * container.element(by.linkText('add')).click();
22650
- *
22651
- * expect(container.element(by.repeater('contact in contacts').row(2))
22652
- * .element(by.model('contact.value'))
22653
- * .getAttribute('value'))
22654
- * .toBe('yourname@example.org');
22655
- * });
22656
- * </file>
22657
- *</example>
22658
-
22659
- */
22660
-var ngControllerDirective = [function() {
22661
- return {
22662
- restrict: 'A',
22663
- scope: true,
22664
- controller: '@',
22665
- priority: 500
22666
- };
22667
-}];
22668
-
22669
-/**
22670
- * @ngdoc directive
22671
- * @name ngCsp
22672
- *
22673
- * @element html
22674
- * @description
22675
- * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support.
22676
- *
22677
- * This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps.
22678
- *
22679
- * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).
22680
- * For Angular to be CSP compatible there are only two things that we need to do differently:
22681
- *
22682
- * - don't use `Function` constructor to generate optimized value getters
22683
- * - don't inject custom stylesheet into the document
22684
- *
22685
- * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp`
22686
- * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will
22687
- * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will
22688
- * be raised.
22689
- *
22690
- * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically
22691
- * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}).
22692
- * To make those directives work in CSP mode, include the `angular-csp.css` manually.
22693
- *
22694
- * Angular tries to autodetect if CSP is active and automatically turn on the CSP-safe mode. This
22695
- * autodetection however triggers a CSP error to be logged in the console:
22696
- *
22697
- * ```
22698
- * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of
22699
- * script in the following Content Security Policy directive: "default-src 'self'". Note that
22700
- * 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
22701
- * ```
22702
- *
22703
- * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp`
22704
- * directive on the root element of the application or on the `angular.js` script tag, whichever
22705
- * appears first in the html document.
22706
- *
22707
- * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*
22708
- *
22709
- * @example
22710
- * This example shows how to apply the `ngCsp` directive to the `html` tag.
22711
- ```html
22712
- <!doctype html>
22713
- <html ng-app ng-csp>
22714
- ...
22715
- ...
22716
- </html>
22717
- ```
22718
- * @example
22719
- // Note: the suffix `.csp` in the example name triggers
22720
- // csp mode in our http server!
22721
- <example name="example.csp" module="cspExample" ng-csp="true">
22722
- <file name="index.html">
22723
- <div ng-controller="MainController as ctrl">
22724
- <div>
22725
- <button ng-click="ctrl.inc()" id="inc">Increment</button>
22726
- <span id="counter">
22727
- {{ctrl.counter}}
22728
- </span>
22729
- </div>
22730
-
22731
- <div>
22732
- <button ng-click="ctrl.evil()" id="evil">Evil</button>
22733
- <span id="evilError">
22734
- {{ctrl.evilError}}
22735
- </span>
22736
- </div>
22737
- </div>
22738
- </file>
22739
- <file name="script.js">
22740
- angular.module('cspExample', [])
22741
- .controller('MainController', function() {
22742
- this.counter = 0;
22743
- this.inc = function() {
22744
- this.counter++;
22745
- };
22746
- this.evil = function() {
22747
- // jshint evil:true
22748
- try {
22749
- eval('1+2');
22750
- } catch (e) {
22751
- this.evilError = e.message;
22752
- }
22753
- };
22754
- });
22755
- </file>
22756
- <file name="protractor.js" type="protractor">
22757
- var util, webdriver;
22758
-
22759
- var incBtn = element(by.id('inc'));
22760
- var counter = element(by.id('counter'));
22761
- var evilBtn = element(by.id('evil'));
22762
- var evilError = element(by.id('evilError'));
22763
-
22764
- function getAndClearSevereErrors() {
22765
- return browser.manage().logs().get('browser').then(function(browserLog) {
22766
- return browserLog.filter(function(logEntry) {
22767
- return logEntry.level.value > webdriver.logging.Level.WARNING.value;
22768
- });
22769
- });
22770
- }
22771
-
22772
- function clearErrors() {
22773
- getAndClearSevereErrors();
22774
- }
22775
-
22776
- function expectNoErrors() {
22777
- getAndClearSevereErrors().then(function(filteredLog) {
22778
- expect(filteredLog.length).toEqual(0);
22779
- if (filteredLog.length) {
22780
- console.log('browser console errors: ' + util.inspect(filteredLog));
22781
- }
22782
- });
22783
- }
22784
-
22785
- function expectError(regex) {
22786
- getAndClearSevereErrors().then(function(filteredLog) {
22787
- var found = false;
22788
- filteredLog.forEach(function(log) {
22789
- if (log.message.match(regex)) {
22790
- found = true;
22791
- }
22792
- });
22793
- if (!found) {
22794
- throw new Error('expected an error that matches ' + regex);
22795
- }
22796
- });
22797
- }
22798
-
22799
- beforeEach(function() {
22800
- util = require('util');
22801
- webdriver = require('protractor/node_modules/selenium-webdriver');
22802
- });
22803
-
22804
- // For now, we only test on Chrome,
22805
- // as Safari does not load the page with Protractor's injected scripts,
22806
- // and Firefox webdriver always disables content security policy (#6358)
22807
- if (browser.params.browser !== 'chrome') {
22808
- return;
22809
- }
22810
-
22811
- it('should not report errors when the page is loaded', function() {
22812
- // clear errors so we are not dependent on previous tests
22813
- clearErrors();
22814
- // Need to reload the page as the page is already loaded when
22815
- // we come here
22816
- browser.driver.getCurrentUrl().then(function(url) {
22817
- browser.get(url);
22818
- });
22819
- expectNoErrors();
22820
- });
22821
-
22822
- it('should evaluate expressions', function() {
22823
- expect(counter.getText()).toEqual('0');
22824
- incBtn.click();
22825
- expect(counter.getText()).toEqual('1');
22826
- expectNoErrors();
22827
- });
22828
-
22829
- it('should throw and report an error when using "eval"', function() {
22830
- evilBtn.click();
22831
- expect(evilError.getText()).toMatch(/Content Security Policy/);
22832
- expectError(/Content Security Policy/);
22833
- });
22834
- </file>
22835
- </example>
22836
- */
22837
-
22838
-// ngCsp is not implemented as a proper directive any more, because we need it be processed while we
22839
-// bootstrap the system (before $parse is instantiated), for this reason we just have
22840
-// the csp.isActive() fn that looks for ng-csp attribute anywhere in the current doc
22841
-
22842
-/**
22843
- * @ngdoc directive
22844
- * @name ngClick
22845
- *
22846
- * @description
22847
- * The ngClick directive allows you to specify custom behavior when
22848
- * an element is clicked.
22849
- *
22850
- * @element ANY
22851
- * @priority 0
22852
- * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon
22853
- * click. ({@link guide/expression#-event- Event object is available as `$event`})
22854
- *
22855
- * @example
22856
- <example>
22857
- <file name="index.html">
22858
- <button ng-click="count = count + 1" ng-init="count=0">
22859
- Increment
22860
- </button>
22861
- <span>
22862
- count: {{count}}
22863
- </span>
22864
- </file>
22865
- <file name="protractor.js" type="protractor">
22866
- it('should check ng-click', function() {
22867
- expect(element(by.binding('count')).getText()).toMatch('0');
22868
- element(by.css('button')).click();
22869
- expect(element(by.binding('count')).getText()).toMatch('1');
22870
- });
22871
- </file>
22872
- </example>
22873
- */
22874
-/*
22875
- * A collection of directives that allows creation of custom event handlers that are defined as
22876
- * angular expressions and are compiled and executed within the current scope.
22877
- */
22878
-var ngEventDirectives = {};
22879
-
22880
-// For events that might fire synchronously during DOM manipulation
22881
-// we need to execute their event handlers asynchronously using $evalAsync,
22882
-// so that they are not executed in an inconsistent state.
22883
-var forceAsyncEvents = {
22884
- 'blur': true,
22885
- 'focus': true
22886
-};
22887
-forEach(
22888
- 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
22889
- function(eventName) {
22890
- var directiveName = directiveNormalize('ng-' + eventName);
22891
- ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {
22892
- return {
22893
- restrict: 'A',
22894
- compile: function($element, attr) {
22895
- // We expose the powerful $event object on the scope that provides access to the Window,
22896
- // etc. that isn't protected by the fast paths in $parse. We explicitly request better
22897
- // checks at the cost of speed since event handler expressions are not executed as
22898
- // frequently as regular change detection.
22899
- var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true);
22900
- return function ngEventHandler(scope, element) {
22901
- element.on(eventName, function(event) {
22902
- var callback = function() {
22903
- fn(scope, {$event:event});
22904
- };
22905
- if (forceAsyncEvents[eventName] && $rootScope.$$phase) {
22906
- scope.$evalAsync(callback);
22907
- } else {
22908
- scope.$apply(callback);
22909
- }
22910
- });
22911
- };
22912
- }
22913
- };
22914
- }];
22915
- }
22916
-);
22917
-
22918
-/**
22919
- * @ngdoc directive
22920
- * @name ngDblclick
22921
- *
22922
- * @description
22923
- * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.
22924
- *
22925
- * @element ANY
22926
- * @priority 0
22927
- * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon
22928
- * a dblclick. (The Event object is available as `$event`)
22929
- *
22930
- * @example
22931
- <example>
22932
- <file name="index.html">
22933
- <button ng-dblclick="count = count + 1" ng-init="count=0">
22934
- Increment (on double click)
22935
- </button>
22936
- count: {{count}}
22937
- </file>
22938
- </example>
22939
- */
22940
-
22941
-
22942
-/**
22943
- * @ngdoc directive
22944
- * @name ngMousedown
22945
- *
22946
- * @description
22947
- * The ngMousedown directive allows you to specify custom behavior on mousedown event.
22948
- *
22949
- * @element ANY
22950
- * @priority 0
22951
- * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon
22952
- * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})
22953
- *
22954
- * @example
22955
- <example>
22956
- <file name="index.html">
22957
- <button ng-mousedown="count = count + 1" ng-init="count=0">
22958
- Increment (on mouse down)
22959
- </button>
22960
- count: {{count}}
22961
- </file>
22962
- </example>
22963
- */
22964
-
22965
-
22966
-/**
22967
- * @ngdoc directive
22968
- * @name ngMouseup
22969
- *
22970
- * @description
22971
- * Specify custom behavior on mouseup event.
22972
- *
22973
- * @element ANY
22974
- * @priority 0
22975
- * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon
22976
- * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})
22977
- *
22978
- * @example
22979
- <example>
22980
- <file name="index.html">
22981
- <button ng-mouseup="count = count + 1" ng-init="count=0">
22982
- Increment (on mouse up)
22983
- </button>
22984
- count: {{count}}
22985
- </file>
22986
- </example>
22987
- */
22988
-
22989
-/**
22990
- * @ngdoc directive
22991
- * @name ngMouseover
22992
- *
22993
- * @description
22994
- * Specify custom behavior on mouseover event.
22995
- *
22996
- * @element ANY
22997
- * @priority 0
22998
- * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon
22999
- * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})
23000
- *
23001
- * @example
23002
- <example>
23003
- <file name="index.html">
23004
- <button ng-mouseover="count = count + 1" ng-init="count=0">
23005
- Increment (when mouse is over)
23006
- </button>
23007
- count: {{count}}
23008
- </file>
23009
- </example>
23010
- */
23011
-
23012
-
23013
-/**
23014
- * @ngdoc directive
23015
- * @name ngMouseenter
23016
- *
23017
- * @description
23018
- * Specify custom behavior on mouseenter event.
23019
- *
23020
- * @element ANY
23021
- * @priority 0
23022
- * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon
23023
- * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})
23024
- *
23025
- * @example
23026
- <example>
23027
- <file name="index.html">
23028
- <button ng-mouseenter="count = count + 1" ng-init="count=0">
23029
- Increment (when mouse enters)
23030
- </button>
23031
- count: {{count}}
23032
- </file>
23033
- </example>
23034
- */
23035
-
23036
-
23037
-/**
23038
- * @ngdoc directive
23039
- * @name ngMouseleave
23040
- *
23041
- * @description
23042
- * Specify custom behavior on mouseleave event.
23043
- *
23044
- * @element ANY
23045
- * @priority 0
23046
- * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon
23047
- * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})
23048
- *
23049
- * @example
23050
- <example>
23051
- <file name="index.html">
23052
- <button ng-mouseleave="count = count + 1" ng-init="count=0">
23053
- Increment (when mouse leaves)
23054
- </button>
23055
- count: {{count}}
23056
- </file>
23057
- </example>
23058
- */
23059
-
23060
-
23061
-/**
23062
- * @ngdoc directive
23063
- * @name ngMousemove
23064
- *
23065
- * @description
23066
- * Specify custom behavior on mousemove event.
23067
- *
23068
- * @element ANY
23069
- * @priority 0
23070
- * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon
23071
- * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})
23072
- *
23073
- * @example
23074
- <example>
23075
- <file name="index.html">
23076
- <button ng-mousemove="count = count + 1" ng-init="count=0">
23077
- Increment (when mouse moves)
23078
- </button>
23079
- count: {{count}}
23080
- </file>
23081
- </example>
23082
- */
23083
-
23084
-
23085
-/**
23086
- * @ngdoc directive
23087
- * @name ngKeydown
23088
- *
23089
- * @description
23090
- * Specify custom behavior on keydown event.
23091
- *
23092
- * @element ANY
23093
- * @priority 0
23094
- * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon
23095
- * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
23096
- *
23097
- * @example
23098
- <example>
23099
- <file name="index.html">
23100
- <input ng-keydown="count = count + 1" ng-init="count=0">
23101
- key down count: {{count}}
23102
- </file>
23103
- </example>
23104
- */
23105
-
23106
-
23107
-/**
23108
- * @ngdoc directive
23109
- * @name ngKeyup
23110
- *
23111
- * @description
23112
- * Specify custom behavior on keyup event.
23113
- *
23114
- * @element ANY
23115
- * @priority 0
23116
- * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon
23117
- * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
23118
- *
23119
- * @example
23120
- <example>
23121
- <file name="index.html">
23122
- <p>Typing in the input box below updates the key count</p>
23123
- <input ng-keyup="count = count + 1" ng-init="count=0"> key up count: {{count}}
23124
-
23125
- <p>Typing in the input box below updates the keycode</p>
23126
- <input ng-keyup="event=$event">
23127
- <p>event keyCode: {{ event.keyCode }}</p>
23128
- <p>event altKey: {{ event.altKey }}</p>
23129
- </file>
23130
- </example>
23131
- */
23132
-
23133
-
23134
-/**
23135
- * @ngdoc directive
23136
- * @name ngKeypress
23137
- *
23138
- * @description
23139
- * Specify custom behavior on keypress event.
23140
- *
23141
- * @element ANY
23142
- * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
23143
- * keypress. ({@link guide/expression#-event- Event object is available as `$event`}
23144
- * and can be interrogated for keyCode, altKey, etc.)
23145
- *
23146
- * @example
23147
- <example>
23148
- <file name="index.html">
23149
- <input ng-keypress="count = count + 1" ng-init="count=0">
23150
- key press count: {{count}}
23151
- </file>
23152
- </example>
23153
- */
23154
-
23155
-
23156
-/**
23157
- * @ngdoc directive
23158
- * @name ngSubmit
23159
- *
23160
- * @description
23161
- * Enables binding angular expressions to onsubmit events.
23162
- *
23163
- * Additionally it prevents the default action (which for form means sending the request to the
23164
- * server and reloading the current page), but only if the form does not contain `action`,
23165
- * `data-action`, or `x-action` attributes.
23166
- *
23167
- * <div class="alert alert-warning">
23168
- * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and
23169
- * `ngSubmit` handlers together. See the
23170
- * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation}
23171
- * for a detailed discussion of when `ngSubmit` may be triggered.
23172
- * </div>
23173
- *
23174
- * @element form
23175
- * @priority 0
23176
- * @param {expression} ngSubmit {@link guide/expression Expression} to eval.
23177
- * ({@link guide/expression#-event- Event object is available as `$event`})
23178
- *
23179
- * @example
23180
- <example module="submitExample">
23181
- <file name="index.html">
23182
- <script>
23183
- angular.module('submitExample', [])
23184
- .controller('ExampleController', ['$scope', function($scope) {
23185
- $scope.list = [];
23186
- $scope.text = 'hello';
23187
- $scope.submit = function() {
23188
- if ($scope.text) {
23189
- $scope.list.push(this.text);
23190
- $scope.text = '';
23191
- }
23192
- };
23193
- }]);
23194
- </script>
23195
- <form ng-submit="submit()" ng-controller="ExampleController">
23196
- Enter text and hit enter:
23197
- <input type="text" ng-model="text" name="text" />
23198
- <input type="submit" id="submit" value="Submit" />
23199
- <pre>list={{list}}</pre>
23200
- </form>
23201
- </file>
23202
- <file name="protractor.js" type="protractor">
23203
- it('should check ng-submit', function() {
23204
- expect(element(by.binding('list')).getText()).toBe('list=[]');
23205
- element(by.css('#submit')).click();
23206
- expect(element(by.binding('list')).getText()).toContain('hello');
23207
- expect(element(by.model('text')).getAttribute('value')).toBe('');
23208
- });
23209
- it('should ignore empty strings', function() {
23210
- expect(element(by.binding('list')).getText()).toBe('list=[]');
23211
- element(by.css('#submit')).click();
23212
- element(by.css('#submit')).click();
23213
- expect(element(by.binding('list')).getText()).toContain('hello');
23214
- });
23215
- </file>
23216
- </example>
23217
- */
23218
-
23219
-/**
23220
- * @ngdoc directive
23221
- * @name ngFocus
23222
- *
23223
- * @description
23224
- * Specify custom behavior on focus event.
23225
- *
23226
- * Note: As the `focus` event is executed synchronously when calling `input.focus()`
23227
- * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
23228
- * during an `$apply` to ensure a consistent state.
23229
- *
23230
- * @element window, input, select, textarea, a
23231
- * @priority 0
23232
- * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon
23233
- * focus. ({@link guide/expression#-event- Event object is available as `$event`})
23234
- *
23235
- * @example
23236
- * See {@link ng.directive:ngClick ngClick}
23237
- */
23238
-
23239
-/**
23240
- * @ngdoc directive
23241
- * @name ngBlur
23242
- *
23243
- * @description
23244
- * Specify custom behavior on blur event.
23245
- *
23246
- * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when
23247
- * an element has lost focus.
23248
- *
23249
- * Note: As the `blur` event is executed synchronously also during DOM manipulations
23250
- * (e.g. removing a focussed input),
23251
- * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
23252
- * during an `$apply` to ensure a consistent state.
23253
- *
23254
- * @element window, input, select, textarea, a
23255
- * @priority 0
23256
- * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon
23257
- * blur. ({@link guide/expression#-event- Event object is available as `$event`})
23258
- *
23259
- * @example
23260
- * See {@link ng.directive:ngClick ngClick}
23261
- */
23262
-
23263
-/**
23264
- * @ngdoc directive
23265
- * @name ngCopy
23266
- *
23267
- * @description
23268
- * Specify custom behavior on copy event.
23269
- *
23270
- * @element window, input, select, textarea, a
23271
- * @priority 0
23272
- * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon
23273
- * copy. ({@link guide/expression#-event- Event object is available as `$event`})
23274
- *
23275
- * @example
23276
- <example>
23277
- <file name="index.html">
23278
- <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value">
23279
- copied: {{copied}}
23280
- </file>
23281
- </example>
23282
- */
23283
-
23284
-/**
23285
- * @ngdoc directive
23286
- * @name ngCut
23287
- *
23288
- * @description
23289
- * Specify custom behavior on cut event.
23290
- *
23291
- * @element window, input, select, textarea, a
23292
- * @priority 0
23293
- * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon
23294
- * cut. ({@link guide/expression#-event- Event object is available as `$event`})
23295
- *
23296
- * @example
23297
- <example>
23298
- <file name="index.html">
23299
- <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value">
23300
- cut: {{cut}}
23301
- </file>
23302
- </example>
23303
- */
23304
-
23305
-/**
23306
- * @ngdoc directive
23307
- * @name ngPaste
23308
- *
23309
- * @description
23310
- * Specify custom behavior on paste event.
23311
- *
23312
- * @element window, input, select, textarea, a
23313
- * @priority 0
23314
- * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon
23315
- * paste. ({@link guide/expression#-event- Event object is available as `$event`})
23316
- *
23317
- * @example
23318
- <example>
23319
- <file name="index.html">
23320
- <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'>
23321
- pasted: {{paste}}
23322
- </file>
23323
- </example>
23324
- */
23325
-
23326
-/**
23327
- * @ngdoc directive
23328
- * @name ngIf
23329
- * @restrict A
23330
- *
23331
- * @description
23332
- * The `ngIf` directive removes or recreates a portion of the DOM tree based on an
23333
- * {expression}. If the expression assigned to `ngIf` evaluates to a false
23334
- * value then the element is removed from the DOM, otherwise a clone of the
23335
- * element is reinserted into the DOM.
23336
- *
23337
- * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the
23338
- * element in the DOM rather than changing its visibility via the `display` css property. A common
23339
- * case when this difference is significant is when using css selectors that rely on an element's
23340
- * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.
23341
- *
23342
- * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope
23343
- * is created when the element is restored. The scope created within `ngIf` inherits from
23344
- * its parent scope using
23345
- * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance).
23346
- * An important implication of this is if `ngModel` is used within `ngIf` to bind to
23347
- * a javascript primitive defined in the parent scope. In this case any modifications made to the
23348
- * variable within the child scope will override (hide) the value in the parent scope.
23349
- *
23350
- * Also, `ngIf` recreates elements using their compiled state. An example of this behavior
23351
- * is if an element's class attribute is directly modified after it's compiled, using something like
23352
- * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element
23353
- * the added class will be lost because the original compiled state is used to regenerate the element.
23354
- *
23355
- * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`
23356
- * and `leave` effects.
23357
- *
23358
- * @animations
23359
- * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container
23360
- * leave - happens just before the `ngIf` contents are removed from the DOM
23361
- *
23362
- * @element ANY
23363
- * @scope
23364
- * @priority 600
23365
- * @param {expression} ngIf If the {@link guide/expression expression} is falsy then
23366
- * the element is removed from the DOM tree. If it is truthy a copy of the compiled
23367
- * element is added to the DOM tree.
23368
- *
23369
- * @example
23370
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
23371
- <file name="index.html">
23372
- Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/>
23373
- Show when checked:
23374
- <span ng-if="checked" class="animate-if">
23375
- This is removed when the checkbox is unchecked.
23376
- </span>
23377
- </file>
23378
- <file name="animations.css">
23379
- .animate-if {
23380
- background:white;
23381
- border:1px solid black;
23382
- padding:10px;
23383
- }
23384
-
23385
- .animate-if.ng-enter, .animate-if.ng-leave {
23386
- -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
23387
- transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
23388
- }
23389
-
23390
- .animate-if.ng-enter,
23391
- .animate-if.ng-leave.ng-leave-active {
23392
- opacity:0;
23393
- }
23394
-
23395
- .animate-if.ng-leave,
23396
- .animate-if.ng-enter.ng-enter-active {
23397
- opacity:1;
23398
- }
23399
- </file>
23400
- </example>
23401
- */
23402
-var ngIfDirective = ['$animate', function($animate) {
23403
- return {
23404
- multiElement: true,
23405
- transclude: 'element',
23406
- priority: 600,
23407
- terminal: true,
23408
- restrict: 'A',
23409
- $$tlb: true,
23410
- link: function($scope, $element, $attr, ctrl, $transclude) {
23411
- var block, childScope, previousElements;
23412
- $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {
23413
-
23414
- if (value) {
23415
- if (!childScope) {
23416
- $transclude(function(clone, newScope) {
23417
- childScope = newScope;
23418
- clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');
23419
- // Note: We only need the first/last node of the cloned nodes.
23420
- // However, we need to keep the reference to the jqlite wrapper as it might be changed later
23421
- // by a directive with templateUrl when its template arrives.
23422
- block = {
23423
- clone: clone
23424
- };
23425
- $animate.enter(clone, $element.parent(), $element);
23426
- });
23427
- }
23428
- } else {
23429
- if (previousElements) {
23430
- previousElements.remove();
23431
- previousElements = null;
23432
- }
23433
- if (childScope) {
23434
- childScope.$destroy();
23435
- childScope = null;
23436
- }
23437
- if (block) {
23438
- previousElements = getBlockNodes(block.clone);
23439
- $animate.leave(previousElements).then(function() {
23440
- previousElements = null;
23441
- });
23442
- block = null;
23443
- }
23444
- }
23445
- });
23446
- }
23447
- };
23448
-}];
23449
-
23450
-/**
23451
- * @ngdoc directive
23452
- * @name ngInclude
23453
- * @restrict ECA
23454
- *
23455
- * @description
23456
- * Fetches, compiles and includes an external HTML fragment.
23457
- *
23458
- * By default, the template URL is restricted to the same domain and protocol as the
23459
- * application document. This is done by calling {@link $sce#getTrustedResourceUrl
23460
- * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols
23461
- * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or
23462
- * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link
23463
- * ng.$sce Strict Contextual Escaping}.
23464
- *
23465
- * In addition, the browser's
23466
- * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
23467
- * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
23468
- * policy may further restrict whether the template is successfully loaded.
23469
- * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`
23470
- * access on some browsers.
23471
- *
23472
- * @animations
23473
- * enter - animation is used to bring new content into the browser.
23474
- * leave - animation is used to animate existing content away.
23475
- *
23476
- * The enter and leave animation occur concurrently.
23477
- *
23478
- * @scope
23479
- * @priority 400
23480
- *
23481
- * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,
23482
- * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`.
23483
- * @param {string=} onload Expression to evaluate when a new partial is loaded.
23484
- *
23485
- * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll
23486
- * $anchorScroll} to scroll the viewport after the content is loaded.
23487
- *
23488
- * - If the attribute is not set, disable scrolling.
23489
- * - If the attribute is set without value, enable scrolling.
23490
- * - Otherwise enable scrolling only if the expression evaluates to truthy value.
23491
- *
23492
- * @example
23493
- <example module="includeExample" deps="angular-animate.js" animations="true">
23494
- <file name="index.html">
23495
- <div ng-controller="ExampleController">
23496
- <select ng-model="template" ng-options="t.name for t in templates">
23497
- <option value="">(blank)</option>
23498
- </select>
23499
- url of the template: <tt>{{template.url}}</tt>
23500
- <hr/>
23501
- <div class="slide-animate-container">
23502
- <div class="slide-animate" ng-include="template.url"></div>
23503
- </div>
23504
- </div>
23505
- </file>
23506
- <file name="script.js">
23507
- angular.module('includeExample', ['ngAnimate'])
23508
- .controller('ExampleController', ['$scope', function($scope) {
23509
- $scope.templates =
23510
- [ { name: 'template1.html', url: 'template1.html'},
23511
- { name: 'template2.html', url: 'template2.html'} ];
23512
- $scope.template = $scope.templates[0];
23513
- }]);
23514
- </file>
23515
- <file name="template1.html">
23516
- Content of template1.html
23517
- </file>
23518
- <file name="template2.html">
23519
- Content of template2.html
23520
- </file>
23521
- <file name="animations.css">
23522
- .slide-animate-container {
23523
- position:relative;
23524
- background:white;
23525
- border:1px solid black;
23526
- height:40px;
23527
- overflow:hidden;
23528
- }
23529
-
23530
- .slide-animate {
23531
- padding:10px;
23532
- }
23533
-
23534
- .slide-animate.ng-enter, .slide-animate.ng-leave {
23535
- -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
23536
- transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
23537
-
23538
- position:absolute;
23539
- top:0;
23540
- left:0;
23541
- right:0;
23542
- bottom:0;
23543
- display:block;
23544
- padding:10px;
23545
- }
23546
-
23547
- .slide-animate.ng-enter {
23548
- top:-50px;
23549
- }
23550
- .slide-animate.ng-enter.ng-enter-active {
23551
- top:0;
23552
- }
23553
-
23554
- .slide-animate.ng-leave {
23555
- top:0;
23556
- }
23557
- .slide-animate.ng-leave.ng-leave-active {
23558
- top:50px;
23559
- }
23560
- </file>
23561
- <file name="protractor.js" type="protractor">
23562
- var templateSelect = element(by.model('template'));
23563
- var includeElem = element(by.css('[ng-include]'));
23564
-
23565
- it('should load template1.html', function() {
23566
- expect(includeElem.getText()).toMatch(/Content of template1.html/);
23567
- });
23568
-
23569
- it('should load template2.html', function() {
23570
- if (browser.params.browser == 'firefox') {
23571
- // Firefox can't handle using selects
23572
- // See https://github.com/angular/protractor/issues/480
23573
- return;
23574
- }
23575
- templateSelect.click();
23576
- templateSelect.all(by.css('option')).get(2).click();
23577
- expect(includeElem.getText()).toMatch(/Content of template2.html/);
23578
- });
23579
-
23580
- it('should change to blank', function() {
23581
- if (browser.params.browser == 'firefox') {
23582
- // Firefox can't handle using selects
23583
- return;
23584
- }
23585
- templateSelect.click();
23586
- templateSelect.all(by.css('option')).get(0).click();
23587
- expect(includeElem.isPresent()).toBe(false);
23588
- });
23589
- </file>
23590
- </example>
23591
- */
23592
-
23593
-
23594
-/**
23595
- * @ngdoc event
23596
- * @name ngInclude#$includeContentRequested
23597
- * @eventType emit on the scope ngInclude was declared in
23598
- * @description
23599
- * Emitted every time the ngInclude content is requested.
23600
- *
23601
- * @param {Object} angularEvent Synthetic event object.
23602
- * @param {String} src URL of content to load.
23603
- */
23604
-
23605
-
23606
-/**
23607
- * @ngdoc event
23608
- * @name ngInclude#$includeContentLoaded
23609
- * @eventType emit on the current ngInclude scope
23610
- * @description
23611
- * Emitted every time the ngInclude content is reloaded.
23612
- *
23613
- * @param {Object} angularEvent Synthetic event object.
23614
- * @param {String} src URL of content to load.
23615
- */
23616
-
23617
-
23618
-/**
23619
- * @ngdoc event
23620
- * @name ngInclude#$includeContentError
23621
- * @eventType emit on the scope ngInclude was declared in
23622
- * @description
23623
- * Emitted when a template HTTP request yields an erronous response (status < 200 || status > 299)
23624
- *
23625
- * @param {Object} angularEvent Synthetic event object.
23626
- * @param {String} src URL of content to load.
23627
- */
23628
-var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', '$sce',
23629
- function($templateRequest, $anchorScroll, $animate, $sce) {
23630
- return {
23631
- restrict: 'ECA',
23632
- priority: 400,
23633
- terminal: true,
23634
- transclude: 'element',
23635
- controller: angular.noop,
23636
- compile: function(element, attr) {
23637
- var srcExp = attr.ngInclude || attr.src,
23638
- onloadExp = attr.onload || '',
23639
- autoScrollExp = attr.autoscroll;
23640
-
23641
- return function(scope, $element, $attr, ctrl, $transclude) {
23642
- var changeCounter = 0,
23643
- currentScope,
23644
- previousElement,
23645
- currentElement;
23646
-
23647
- var cleanupLastIncludeContent = function() {
23648
- if (previousElement) {
23649
- previousElement.remove();
23650
- previousElement = null;
23651
- }
23652
- if (currentScope) {
23653
- currentScope.$destroy();
23654
- currentScope = null;
23655
- }
23656
- if (currentElement) {
23657
- $animate.leave(currentElement).then(function() {
23658
- previousElement = null;
23659
- });
23660
- previousElement = currentElement;
23661
- currentElement = null;
23662
- }
23663
- };
23664
-
23665
- scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {
23666
- var afterAnimation = function() {
23667
- if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
23668
- $anchorScroll();
23669
- }
23670
- };
23671
- var thisChangeId = ++changeCounter;
23672
-
23673
- if (src) {
23674
- //set the 2nd param to true to ignore the template request error so that the inner
23675
- //contents and scope can be cleaned up.
23676
- $templateRequest(src, true).then(function(response) {
23677
- if (thisChangeId !== changeCounter) return;
23678
- var newScope = scope.$new();
23679
- ctrl.template = response;
23680
-
23681
- // Note: This will also link all children of ng-include that were contained in the original
23682
- // html. If that content contains controllers, ... they could pollute/change the scope.
23683
- // However, using ng-include on an element with additional content does not make sense...
23684
- // Note: We can't remove them in the cloneAttchFn of $transclude as that
23685
- // function is called before linking the content, which would apply child
23686
- // directives to non existing elements.
23687
- var clone = $transclude(newScope, function(clone) {
23688
- cleanupLastIncludeContent();
23689
- $animate.enter(clone, null, $element).then(afterAnimation);
23690
- });
23691
-
23692
- currentScope = newScope;
23693
- currentElement = clone;
23694
-
23695
- currentScope.$emit('$includeContentLoaded', src);
23696
- scope.$eval(onloadExp);
23697
- }, function() {
23698
- if (thisChangeId === changeCounter) {
23699
- cleanupLastIncludeContent();
23700
- scope.$emit('$includeContentError', src);
23701
- }
23702
- });
23703
- scope.$emit('$includeContentRequested', src);
23704
- } else {
23705
- cleanupLastIncludeContent();
23706
- ctrl.template = null;
23707
- }
23708
- });
23709
- };
23710
- }
23711
- };
23712
-}];
23713
-
23714
-// This directive is called during the $transclude call of the first `ngInclude` directive.
23715
-// It will replace and compile the content of the element with the loaded template.
23716
-// We need this directive so that the element content is already filled when
23717
-// the link function of another directive on the same element as ngInclude
23718
-// is called.
23719
-var ngIncludeFillContentDirective = ['$compile',
23720
- function($compile) {
23721
- return {
23722
- restrict: 'ECA',
23723
- priority: -400,
23724
- require: 'ngInclude',
23725
- link: function(scope, $element, $attr, ctrl) {
23726
- if (/SVG/.test($element[0].toString())) {
23727
- // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not
23728
- // support innerHTML, so detect this here and try to generate the contents
23729
- // specially.
23730
- $element.empty();
23731
- $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope,
23732
- function namespaceAdaptedClone(clone) {
23733
- $element.append(clone);
23734
- }, {futureParentElement: $element});
23735
- return;
23736
- }
23737
-
23738
- $element.html(ctrl.template);
23739
- $compile($element.contents())(scope);
23740
- }
23741
- };
23742
- }];
23743
-
23744
-/**
23745
- * @ngdoc directive
23746
- * @name ngInit
23747
- * @restrict AC
23748
- *
23749
- * @description
23750
- * The `ngInit` directive allows you to evaluate an expression in the
23751
- * current scope.
23752
- *
23753
- * <div class="alert alert-error">
23754
- * The only appropriate use of `ngInit` is for aliasing special properties of
23755
- * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you
23756
- * should use {@link guide/controller controllers} rather than `ngInit`
23757
- * to initialize values on a scope.
23758
- * </div>
23759
- * <div class="alert alert-warning">
23760
- * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make
23761
- * sure you have parenthesis for correct precedence:
23762
- * <pre class="prettyprint">
23763
- * <div ng-init="test1 = (data | orderBy:'name')"></div>
23764
- * </pre>
23765
- * </div>
23766
- *
23767
- * @priority 450
23768
- *
23769
- * @element ANY
23770
- * @param {expression} ngInit {@link guide/expression Expression} to eval.
23771
- *
23772
- * @example
23773
- <example module="initExample">
23774
- <file name="index.html">
23775
- <script>
23776
- angular.module('initExample', [])
23777
- .controller('ExampleController', ['$scope', function($scope) {
23778
- $scope.list = [['a', 'b'], ['c', 'd']];
23779
- }]);
23780
- </script>
23781
- <div ng-controller="ExampleController">
23782
- <div ng-repeat="innerList in list" ng-init="outerIndex = $index">
23783
- <div ng-repeat="value in innerList" ng-init="innerIndex = $index">
23784
- <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>
23785
- </div>
23786
- </div>
23787
- </div>
23788
- </file>
23789
- <file name="protractor.js" type="protractor">
23790
- it('should alias index positions', function() {
23791
- var elements = element.all(by.css('.example-init'));
23792
- expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');
23793
- expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');
23794
- expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');
23795
- expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');
23796
- });
23797
- </file>
23798
- </example>
23799
- */
23800
-var ngInitDirective = ngDirective({
23801
- priority: 450,
23802
- compile: function() {
23803
- return {
23804
- pre: function(scope, element, attrs) {
23805
- scope.$eval(attrs.ngInit);
23806
- }
23807
- };
23808
- }
23809
-});
23810
-
23811
-/**
23812
- * @ngdoc directive
23813
- * @name ngNonBindable
23814
- * @restrict AC
23815
- * @priority 1000
23816
- *
23817
- * @description
23818
- * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current
23819
- * DOM element. This is useful if the element contains what appears to be Angular directives and
23820
- * bindings but which should be ignored by Angular. This could be the case if you have a site that
23821
- * displays snippets of code, for instance.
23822
- *
23823
- * @element ANY
23824
- *
23825
- * @example
23826
- * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,
23827
- * but the one wrapped in `ngNonBindable` is left alone.
23828
- *
23829
- * @example
23830
- <example>
23831
- <file name="index.html">
23832
- <div>Normal: {{1 + 2}}</div>
23833
- <div ng-non-bindable>Ignored: {{1 + 2}}</div>
23834
- </file>
23835
- <file name="protractor.js" type="protractor">
23836
- it('should check ng-non-bindable', function() {
23837
- expect(element(by.binding('1 + 2')).getText()).toContain('3');
23838
- expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/);
23839
- });
23840
- </file>
23841
- </example>
23842
- */
23843
-var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
23844
-
23845
-/**
23846
- * @ngdoc directive
23847
- * @name ngPluralize
23848
- * @restrict EA
23849
- *
23850
- * @description
23851
- * `ngPluralize` is a directive that displays messages according to en-US localization rules.
23852
- * These rules are bundled with angular.js, but can be overridden
23853
- * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive
23854
- * by specifying the mappings between
23855
- * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
23856
- * and the strings to be displayed.
23857
- *
23858
- * # Plural categories and explicit number rules
23859
- * There are two
23860
- * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
23861
- * in Angular's default en-US locale: "one" and "other".
23862
- *
23863
- * While a plural category may match many numbers (for example, in en-US locale, "other" can match
23864
- * any number that is not 1), an explicit number rule can only match one number. For example, the
23865
- * explicit number rule for "3" matches the number 3. There are examples of plural categories
23866
- * and explicit number rules throughout the rest of this documentation.
23867
- *
23868
- * # Configuring ngPluralize
23869
- * You configure ngPluralize by providing 2 attributes: `count` and `when`.
23870
- * You can also provide an optional attribute, `offset`.
23871
- *
23872
- * The value of the `count` attribute can be either a string or an {@link guide/expression
23873
- * Angular expression}; these are evaluated on the current scope for its bound value.
23874
- *
23875
- * The `when` attribute specifies the mappings between plural categories and the actual
23876
- * string to be displayed. The value of the attribute should be a JSON object.
23877
- *
23878
- * The following example shows how to configure ngPluralize:
23879
- *
23880
- * ```html
23881
- * <ng-pluralize count="personCount"
23882
- when="{'0': 'Nobody is viewing.',
23883
- * 'one': '1 person is viewing.',
23884
- * 'other': '{} people are viewing.'}">
23885
- * </ng-pluralize>
23886
- *```
23887
- *
23888
- * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not
23889
- * specify this rule, 0 would be matched to the "other" category and "0 people are viewing"
23890
- * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for
23891
- * other numbers, for example 12, so that instead of showing "12 people are viewing", you can
23892
- * show "a dozen people are viewing".
23893
- *
23894
- * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted
23895
- * into pluralized strings. In the previous example, Angular will replace `{}` with
23896
- * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder
23897
- * for <span ng-non-bindable>{{numberExpression}}</span>.
23898
- *
23899
- * # Configuring ngPluralize with offset
23900
- * The `offset` attribute allows further customization of pluralized text, which can result in
23901
- * a better user experience. For example, instead of the message "4 people are viewing this document",
23902
- * you might display "John, Kate and 2 others are viewing this document".
23903
- * The offset attribute allows you to offset a number by any desired value.
23904
- * Let's take a look at an example:
23905
- *
23906
- * ```html
23907
- * <ng-pluralize count="personCount" offset=2
23908
- * when="{'0': 'Nobody is viewing.',
23909
- * '1': '{{person1}} is viewing.',
23910
- * '2': '{{person1}} and {{person2}} are viewing.',
23911
- * 'one': '{{person1}}, {{person2}} and one other person are viewing.',
23912
- * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
23913
- * </ng-pluralize>
23914
- * ```
23915
- *
23916
- * Notice that we are still using two plural categories(one, other), but we added
23917
- * three explicit number rules 0, 1 and 2.
23918
- * When one person, perhaps John, views the document, "John is viewing" will be shown.
23919
- * When three people view the document, no explicit number rule is found, so
23920
- * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.
23921
- * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing"
23922
- * is shown.
23923
- *
23924
- * Note that when you specify offsets, you must provide explicit number rules for
23925
- * numbers from 0 up to and including the offset. If you use an offset of 3, for example,
23926
- * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for
23927
- * plural categories "one" and "other".
23928
- *
23929
- * @param {string|expression} count The variable to be bound to.
23930
- * @param {string} when The mapping between plural category to its corresponding strings.
23931
- * @param {number=} offset Offset to deduct from the total number.
23932
- *
23933
- * @example
23934
- <example module="pluralizeExample">
23935
- <file name="index.html">
23936
- <script>
23937
- angular.module('pluralizeExample', [])
23938
- .controller('ExampleController', ['$scope', function($scope) {
23939
- $scope.person1 = 'Igor';
23940
- $scope.person2 = 'Misko';
23941
- $scope.personCount = 1;
23942
- }]);
23943
- </script>
23944
- <div ng-controller="ExampleController">
23945
- Person 1:<input type="text" ng-model="person1" value="Igor" /><br/>
23946
- Person 2:<input type="text" ng-model="person2" value="Misko" /><br/>
23947
- Number of People:<input type="text" ng-model="personCount" value="1" /><br/>
23948
-
23949
- <!--- Example with simple pluralization rules for en locale --->
23950
- Without Offset:
23951
- <ng-pluralize count="personCount"
23952
- when="{'0': 'Nobody is viewing.',
23953
- 'one': '1 person is viewing.',
23954
- 'other': '{} people are viewing.'}">
23955
- </ng-pluralize><br>
23956
-
23957
- <!--- Example with offset --->
23958
- With Offset(2):
23959
- <ng-pluralize count="personCount" offset=2
23960
- when="{'0': 'Nobody is viewing.',
23961
- '1': '{{person1}} is viewing.',
23962
- '2': '{{person1}} and {{person2}} are viewing.',
23963
- 'one': '{{person1}}, {{person2}} and one other person are viewing.',
23964
- 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
23965
- </ng-pluralize>
23966
- </div>
23967
- </file>
23968
- <file name="protractor.js" type="protractor">
23969
- it('should show correct pluralized string', function() {
23970
- var withoutOffset = element.all(by.css('ng-pluralize')).get(0);
23971
- var withOffset = element.all(by.css('ng-pluralize')).get(1);
23972
- var countInput = element(by.model('personCount'));
23973
-
23974
- expect(withoutOffset.getText()).toEqual('1 person is viewing.');
23975
- expect(withOffset.getText()).toEqual('Igor is viewing.');
23976
-
23977
- countInput.clear();
23978
- countInput.sendKeys('0');
23979
-
23980
- expect(withoutOffset.getText()).toEqual('Nobody is viewing.');
23981
- expect(withOffset.getText()).toEqual('Nobody is viewing.');
23982
-
23983
- countInput.clear();
23984
- countInput.sendKeys('2');
23985
-
23986
- expect(withoutOffset.getText()).toEqual('2 people are viewing.');
23987
- expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');
23988
-
23989
- countInput.clear();
23990
- countInput.sendKeys('3');
23991
-
23992
- expect(withoutOffset.getText()).toEqual('3 people are viewing.');
23993
- expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');
23994
-
23995
- countInput.clear();
23996
- countInput.sendKeys('4');
23997
-
23998
- expect(withoutOffset.getText()).toEqual('4 people are viewing.');
23999
- expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');
24000
- });
24001
- it('should show data-bound names', function() {
24002
- var withOffset = element.all(by.css('ng-pluralize')).get(1);
24003
- var personCount = element(by.model('personCount'));
24004
- var person1 = element(by.model('person1'));
24005
- var person2 = element(by.model('person2'));
24006
- personCount.clear();
24007
- personCount.sendKeys('4');
24008
- person1.clear();
24009
- person1.sendKeys('Di');
24010
- person2.clear();
24011
- person2.sendKeys('Vojta');
24012
- expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');
24013
- });
24014
- </file>
24015
- </example>
24016
- */
24017
-var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {
24018
- var BRACE = /{}/g,
24019
- IS_WHEN = /^when(Minus)?(.+)$/;
24020
-
24021
- return {
24022
- restrict: 'EA',
24023
- link: function(scope, element, attr) {
24024
- var numberExp = attr.count,
24025
- whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs
24026
- offset = attr.offset || 0,
24027
- whens = scope.$eval(whenExp) || {},
24028
- whensExpFns = {},
24029
- startSymbol = $interpolate.startSymbol(),
24030
- endSymbol = $interpolate.endSymbol(),
24031
- braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol,
24032
- watchRemover = angular.noop,
24033
- lastCount;
24034
-
24035
- forEach(attr, function(expression, attributeName) {
24036
- var tmpMatch = IS_WHEN.exec(attributeName);
24037
- if (tmpMatch) {
24038
- var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]);
24039
- whens[whenKey] = element.attr(attr.$attr[attributeName]);
24040
- }
24041
- });
24042
- forEach(whens, function(expression, key) {
24043
- whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement));
24044
-
24045
- });
24046
-
24047
- scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {
24048
- var count = parseFloat(newVal);
24049
- var countIsNaN = isNaN(count);
24050
-
24051
- if (!countIsNaN && !(count in whens)) {
24052
- // If an explicit number rule such as 1, 2, 3... is defined, just use it.
24053
- // Otherwise, check it against pluralization rules in $locale service.
24054
- count = $locale.pluralCat(count - offset);
24055
- }
24056
-
24057
- // If both `count` and `lastCount` are NaN, we don't need to re-register a watch.
24058
- // In JS `NaN !== NaN`, so we have to exlicitly check.
24059
- if ((count !== lastCount) && !(countIsNaN && isNaN(lastCount))) {
24060
- watchRemover();
24061
- watchRemover = scope.$watch(whensExpFns[count], updateElementText);
24062
- lastCount = count;
24063
- }
24064
- });
24065
-
24066
- function updateElementText(newText) {
24067
- element.text(newText || '');
24068
- }
24069
- }
24070
- };
24071
-}];
24072
-
24073
-/**
24074
- * @ngdoc directive
24075
- * @name ngRepeat
24076
- *
24077
- * @description
24078
- * The `ngRepeat` directive instantiates a template once per item from a collection. Each template
24079
- * instance gets its own scope, where the given loop variable is set to the current collection item,
24080
- * and `$index` is set to the item index or key.
24081
- *
24082
- * Special properties are exposed on the local scope of each template instance, including:
24083
- *
24084
- * | Variable | Type | Details |
24085
- * |-----------|-----------------|-----------------------------------------------------------------------------|
24086
- * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) |
24087
- * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. |
24088
- * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |
24089
- * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. |
24090
- * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). |
24091
- * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). |
24092
- *
24093
- * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.
24094
- * This may be useful when, for instance, nesting ngRepeats.
24095
- *
24096
- * # Special repeat start and end points
24097
- * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
24098
- * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
24099
- * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)
24100
- * up to and including the ending HTML tag where **ng-repeat-end** is placed.
24101
- *
24102
- * The example below makes use of this feature:
24103
- * ```html
24104
- * <header ng-repeat-start="item in items">
24105
- * Header {{ item }}
24106
- * </header>
24107
- * <div class="body">
24108
- * Body {{ item }}
24109
- * </div>
24110
- * <footer ng-repeat-end>
24111
- * Footer {{ item }}
24112
- * </footer>
24113
- * ```
24114
- *
24115
- * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:
24116
- * ```html
24117
- * <header>
24118
- * Header A
24119
- * </header>
24120
- * <div class="body">
24121
- * Body A
24122
- * </div>
24123
- * <footer>
24124
- * Footer A
24125
- * </footer>
24126
- * <header>
24127
- * Header B
24128
- * </header>
24129
- * <div class="body">
24130
- * Body B
24131
- * </div>
24132
- * <footer>
24133
- * Footer B
24134
- * </footer>
24135
- * ```
24136
- *
24137
- * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such
24138
- * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).
24139
- *
24140
- * @animations
24141
- * **.enter** - when a new item is added to the list or when an item is revealed after a filter
24142
- *
24143
- * **.leave** - when an item is removed from the list or when an item is filtered out
24144
- *
24145
- * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered
24146
- *
24147
- * @element ANY
24148
- * @scope
24149
- * @priority 1000
24150
- * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These
24151
- * formats are currently supported:
24152
- *
24153
- * * `variable in expression` – where variable is the user defined loop variable and `expression`
24154
- * is a scope expression giving the collection to enumerate.
24155
- *
24156
- * For example: `album in artist.albums`.
24157
- *
24158
- * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,
24159
- * and `expression` is the scope expression giving the collection to enumerate.
24160
- *
24161
- * For example: `(name, age) in {'adam':10, 'amalie':12}`.
24162
- *
24163
- * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function
24164
- * which can be used to associate the objects in the collection with the DOM elements. If no tracking function
24165
- * is specified the ng-repeat associates elements by identity in the collection. It is an error to have
24166
- * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are
24167
- * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression,
24168
- * before specifying a tracking expression.
24169
- *
24170
- * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements
24171
- * will be associated by item identity in the array.
24172
- *
24173
- * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique
24174
- * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements
24175
- * with the corresponding item in the array by identity. Moving the same object in array would move the DOM
24176
- * element in the same way in the DOM.
24177
- *
24178
- * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this
24179
- * case the object identity does not matter. Two objects are considered equivalent as long as their `id`
24180
- * property is same.
24181
- *
24182
- * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter
24183
- * to items in conjunction with a tracking expression.
24184
- *
24185
- * * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the
24186
- * intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message
24187
- * when a filter is active on the repeater, but the filtered result set is empty.
24188
- *
24189
- * For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after
24190
- * the items have been processed through the filter.
24191
- *
24192
- * @example
24193
- * This example initializes the scope to a list of names and
24194
- * then uses `ngRepeat` to display every person:
24195
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
24196
- <file name="index.html">
24197
- <div ng-init="friends = [
24198
- {name:'John', age:25, gender:'boy'},
24199
- {name:'Jessie', age:30, gender:'girl'},
24200
- {name:'Johanna', age:28, gender:'girl'},
24201
- {name:'Joy', age:15, gender:'girl'},
24202
- {name:'Mary', age:28, gender:'girl'},
24203
- {name:'Peter', age:95, gender:'boy'},
24204
- {name:'Sebastian', age:50, gender:'boy'},
24205
- {name:'Erika', age:27, gender:'girl'},
24206
- {name:'Patrick', age:40, gender:'boy'},
24207
- {name:'Samantha', age:60, gender:'girl'}
24208
- ]">
24209
- I have {{friends.length}} friends. They are:
24210
- <input type="search" ng-model="q" placeholder="filter friends..." />
24211
- <ul class="example-animate-container">
24212
- <li class="animate-repeat" ng-repeat="friend in friends | filter:q as results">
24213
- [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
24214
- </li>
24215
- <li class="animate-repeat" ng-if="results.length == 0">
24216
- <strong>No results found...</strong>
24217
- </li>
24218
- </ul>
24219
- </div>
24220
- </file>
24221
- <file name="animations.css">
24222
- .example-animate-container {
24223
- background:white;
24224
- border:1px solid black;
24225
- list-style:none;
24226
- margin:0;
24227
- padding:0 10px;
24228
- }
24229
-
24230
- .animate-repeat {
24231
- line-height:40px;
24232
- list-style:none;
24233
- box-sizing:border-box;
24234
- }
24235
-
24236
- .animate-repeat.ng-move,
24237
- .animate-repeat.ng-enter,
24238
- .animate-repeat.ng-leave {
24239
- -webkit-transition:all linear 0.5s;
24240
- transition:all linear 0.5s;
24241
- }
24242
-
24243
- .animate-repeat.ng-leave.ng-leave-active,
24244
- .animate-repeat.ng-move,
24245
- .animate-repeat.ng-enter {
24246
- opacity:0;
24247
- max-height:0;
24248
- }
24249
-
24250
- .animate-repeat.ng-leave,
24251
- .animate-repeat.ng-move.ng-move-active,
24252
- .animate-repeat.ng-enter.ng-enter-active {
24253
- opacity:1;
24254
- max-height:40px;
24255
- }
24256
- </file>
24257
- <file name="protractor.js" type="protractor">
24258
- var friends = element.all(by.repeater('friend in friends'));
24259
-
24260
- it('should render initial data set', function() {
24261
- expect(friends.count()).toBe(10);
24262
- expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');
24263
- expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');
24264
- expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');
24265
- expect(element(by.binding('friends.length')).getText())
24266
- .toMatch("I have 10 friends. They are:");
24267
- });
24268
-
24269
- it('should update repeater when filter predicate changes', function() {
24270
- expect(friends.count()).toBe(10);
24271
-
24272
- element(by.model('q')).sendKeys('ma');
24273
-
24274
- expect(friends.count()).toBe(2);
24275
- expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');
24276
- expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');
24277
- });
24278
- </file>
24279
- </example>
24280
- */
24281
-var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
24282
- var NG_REMOVED = '$$NG_REMOVED';
24283
- var ngRepeatMinErr = minErr('ngRepeat');
24284
-
24285
- var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) {
24286
- // TODO(perf): generate setters to shave off ~40ms or 1-1.5%
24287
- scope[valueIdentifier] = value;
24288
- if (keyIdentifier) scope[keyIdentifier] = key;
24289
- scope.$index = index;
24290
- scope.$first = (index === 0);
24291
- scope.$last = (index === (arrayLength - 1));
24292
- scope.$middle = !(scope.$first || scope.$last);
24293
- // jshint bitwise: false
24294
- scope.$odd = !(scope.$even = (index&1) === 0);
24295
- // jshint bitwise: true
24296
- };
24297
-
24298
- var getBlockStart = function(block) {
24299
- return block.clone[0];
24300
- };
24301
-
24302
- var getBlockEnd = function(block) {
24303
- return block.clone[block.clone.length - 1];
24304
- };
24305
-
24306
-
24307
- return {
24308
- restrict: 'A',
24309
- multiElement: true,
24310
- transclude: 'element',
24311
- priority: 1000,
24312
- terminal: true,
24313
- $$tlb: true,
24314
- compile: function ngRepeatCompile($element, $attr) {
24315
- var expression = $attr.ngRepeat;
24316
- var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' ');
24317
-
24318
- var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
24319
-
24320
- if (!match) {
24321
- throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",
24322
- expression);
24323
- }
24324
-
24325
- var lhs = match[1];
24326
- var rhs = match[2];
24327
- var aliasAs = match[3];
24328
- var trackByExp = match[4];
24329
-
24330
- match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);
24331
-
24332
- if (!match) {
24333
- throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",
24334
- lhs);
24335
- }
24336
- var valueIdentifier = match[3] || match[1];
24337
- var keyIdentifier = match[2];
24338
-
24339
- if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||
24340
- /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(aliasAs))) {
24341
- throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",
24342
- aliasAs);
24343
- }
24344
-
24345
- var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn;
24346
- var hashFnLocals = {$id: hashKey};
24347
-
24348
- if (trackByExp) {
24349
- trackByExpGetter = $parse(trackByExp);
24350
- } else {
24351
- trackByIdArrayFn = function(key, value) {
24352
- return hashKey(value);
24353
- };
24354
- trackByIdObjFn = function(key) {
24355
- return key;
24356
- };
24357
- }
24358
-
24359
- return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) {
24360
-
24361
- if (trackByExpGetter) {
24362
- trackByIdExpFn = function(key, value, index) {
24363
- // assign key, value, and $index to the locals so that they can be used in hash functions
24364
- if (keyIdentifier) hashFnLocals[keyIdentifier] = key;
24365
- hashFnLocals[valueIdentifier] = value;
24366
- hashFnLocals.$index = index;
24367
- return trackByExpGetter($scope, hashFnLocals);
24368
- };
24369
- }
24370
-
24371
- // Store a list of elements from previous run. This is a hash where key is the item from the
24372
- // iterator, and the value is objects with following properties.
24373
- // - scope: bound scope
24374
- // - element: previous element.
24375
- // - index: position
24376
- //
24377
- // We are using no-proto object so that we don't need to guard against inherited props via
24378
- // hasOwnProperty.
24379
- var lastBlockMap = createMap();
24380
-
24381
- //watch props
24382
- $scope.$watchCollection(rhs, function ngRepeatAction(collection) {
24383
- var index, length,
24384
- previousNode = $element[0], // node that cloned nodes should be inserted after
24385
- // initialized to the comment node anchor
24386
- nextNode,
24387
- // Same as lastBlockMap but it has the current state. It will become the
24388
- // lastBlockMap on the next iteration.
24389
- nextBlockMap = createMap(),
24390
- collectionLength,
24391
- key, value, // key/value of iteration
24392
- trackById,
24393
- trackByIdFn,
24394
- collectionKeys,
24395
- block, // last object information {scope, element, id}
24396
- nextBlockOrder,
24397
- elementsToRemove;
24398
-
24399
- if (aliasAs) {
24400
- $scope[aliasAs] = collection;
24401
- }
24402
-
24403
- if (isArrayLike(collection)) {
24404
- collectionKeys = collection;
24405
- trackByIdFn = trackByIdExpFn || trackByIdArrayFn;
24406
- } else {
24407
- trackByIdFn = trackByIdExpFn || trackByIdObjFn;
24408
- // if object, extract keys, sort them and use to determine order of iteration over obj props
24409
- collectionKeys = [];
24410
- for (var itemKey in collection) {
24411
- if (collection.hasOwnProperty(itemKey) && itemKey.charAt(0) != '$') {
24412
- collectionKeys.push(itemKey);
24413
- }
24414
- }
24415
- collectionKeys.sort();
24416
- }
24417
-
24418
- collectionLength = collectionKeys.length;
24419
- nextBlockOrder = new Array(collectionLength);
24420
-
24421
- // locate existing items
24422
- for (index = 0; index < collectionLength; index++) {
24423
- key = (collection === collectionKeys) ? index : collectionKeys[index];
24424
- value = collection[key];
24425
- trackById = trackByIdFn(key, value, index);
24426
- if (lastBlockMap[trackById]) {
24427
- // found previously seen block
24428
- block = lastBlockMap[trackById];
24429
- delete lastBlockMap[trackById];
24430
- nextBlockMap[trackById] = block;
24431
- nextBlockOrder[index] = block;
24432
- } else if (nextBlockMap[trackById]) {
24433
- // if collision detected. restore lastBlockMap and throw an error
24434
- forEach(nextBlockOrder, function(block) {
24435
- if (block && block.scope) lastBlockMap[block.id] = block;
24436
- });
24437
- throw ngRepeatMinErr('dupes',
24438
- "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",
24439
- expression, trackById, value);
24440
- } else {
24441
- // new never before seen block
24442
- nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined};
24443
- nextBlockMap[trackById] = true;
24444
- }
24445
- }
24446
-
24447
- // remove leftover items
24448
- for (var blockKey in lastBlockMap) {
24449
- block = lastBlockMap[blockKey];
24450
- elementsToRemove = getBlockNodes(block.clone);
24451
- $animate.leave(elementsToRemove);
24452
- if (elementsToRemove[0].parentNode) {
24453
- // if the element was not removed yet because of pending animation, mark it as deleted
24454
- // so that we can ignore it later
24455
- for (index = 0, length = elementsToRemove.length; index < length; index++) {
24456
- elementsToRemove[index][NG_REMOVED] = true;
24457
- }
24458
- }
24459
- block.scope.$destroy();
24460
- }
24461
-
24462
- // we are not using forEach for perf reasons (trying to avoid #call)
24463
- for (index = 0; index < collectionLength; index++) {
24464
- key = (collection === collectionKeys) ? index : collectionKeys[index];
24465
- value = collection[key];
24466
- block = nextBlockOrder[index];
24467
-
24468
- if (block.scope) {
24469
- // if we have already seen this object, then we need to reuse the
24470
- // associated scope/element
24471
-
24472
- nextNode = previousNode;
24473
-
24474
- // skip nodes that are already pending removal via leave animation
24475
- do {
24476
- nextNode = nextNode.nextSibling;
24477
- } while (nextNode && nextNode[NG_REMOVED]);
24478
-
24479
- if (getBlockStart(block) != nextNode) {
24480
- // existing item which got moved
24481
- $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode));
24482
- }
24483
- previousNode = getBlockEnd(block);
24484
- updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
24485
- } else {
24486
- // new item which we don't know about
24487
- $transclude(function ngRepeatTransclude(clone, scope) {
24488
- block.scope = scope;
24489
- // http://jsperf.com/clone-vs-createcomment
24490
- var endNode = ngRepeatEndComment.cloneNode(false);
24491
- clone[clone.length++] = endNode;
24492
-
24493
- // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper?
24494
- $animate.enter(clone, null, jqLite(previousNode));
24495
- previousNode = endNode;
24496
- // Note: We only need the first/last node of the cloned nodes.
24497
- // However, we need to keep the reference to the jqlite wrapper as it might be changed later
24498
- // by a directive with templateUrl when its template arrives.
24499
- block.clone = clone;
24500
- nextBlockMap[block.id] = block;
24501
- updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
24502
- });
24503
- }
24504
- }
24505
- lastBlockMap = nextBlockMap;
24506
- });
24507
- };
24508
- }
24509
- };
24510
-}];
24511
-
24512
-var NG_HIDE_CLASS = 'ng-hide';
24513
-var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
24514
-/**
24515
- * @ngdoc directive
24516
- * @name ngShow
24517
- *
24518
- * @description
24519
- * The `ngShow` directive shows or hides the given HTML element based on the expression
24520
- * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding
24521
- * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
24522
- * in AngularJS and sets the display style to none (using an !important flag).
24523
- * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
24524
- *
24525
- * ```html
24526
- * <!-- when $scope.myValue is truthy (element is visible) -->
24527
- * <div ng-show="myValue"></div>
24528
- *
24529
- * <!-- when $scope.myValue is falsy (element is hidden) -->
24530
- * <div ng-show="myValue" class="ng-hide"></div>
24531
- * ```
24532
- *
24533
- * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class
24534
- * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed
24535
- * from the element causing the element not to appear hidden.
24536
- *
24537
- * ## Why is !important used?
24538
- *
24539
- * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
24540
- * can be easily overridden by heavier selectors. For example, something as simple
24541
- * as changing the display style on a HTML list item would make hidden elements appear visible.
24542
- * This also becomes a bigger issue when dealing with CSS frameworks.
24543
- *
24544
- * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
24545
- * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
24546
- * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
24547
- *
24548
- * ### Overriding `.ng-hide`
24549
- *
24550
- * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
24551
- * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
24552
- * class in CSS:
24553
- *
24554
- * ```css
24555
- * .ng-hide {
24556
- * /&#42; this is just another form of hiding an element &#42;/
24557
- * display: block!important;
24558
- * position: absolute;
24559
- * top: -9999px;
24560
- * left: -9999px;
24561
- * }
24562
- * ```
24563
- *
24564
- * By default you don't need to override in CSS anything and the animations will work around the display style.
24565
- *
24566
- * ## A note about animations with `ngShow`
24567
- *
24568
- * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
24569
- * is true and false. This system works like the animation system present with ngClass except that
24570
- * you must also include the !important flag to override the display property
24571
- * so that you can perform an animation when the element is hidden during the time of the animation.
24572
- *
24573
- * ```css
24574
- * //
24575
- * //a working example can be found at the bottom of this page
24576
- * //
24577
- * .my-element.ng-hide-add, .my-element.ng-hide-remove {
24578
- * /&#42; this is required as of 1.3x to properly
24579
- * apply all styling in a show/hide animation &#42;/
24580
- * transition: 0s linear all;
24581
- * }
24582
- *
24583
- * .my-element.ng-hide-add-active,
24584
- * .my-element.ng-hide-remove-active {
24585
- * /&#42; the transition is defined in the active class &#42;/
24586
- * transition: 1s linear all;
24587
- * }
24588
- *
24589
- * .my-element.ng-hide-add { ... }
24590
- * .my-element.ng-hide-add.ng-hide-add-active { ... }
24591
- * .my-element.ng-hide-remove { ... }
24592
- * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
24593
- * ```
24594
- *
24595
- * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
24596
- * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
24597
- *
24598
- * @animations
24599
- * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible
24600
- * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden
24601
- *
24602
- * @element ANY
24603
- * @param {expression} ngShow If the {@link guide/expression expression} is truthy
24604
- * then the element is shown or hidden respectively.
24605
- *
24606
- * @example
24607
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
24608
- <file name="index.html">
24609
- Click me: <input type="checkbox" ng-model="checked"><br/>
24610
- <div>
24611
- Show:
24612
- <div class="check-element animate-show" ng-show="checked">
24613
- <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
24614
- </div>
24615
- </div>
24616
- <div>
24617
- Hide:
24618
- <div class="check-element animate-show" ng-hide="checked">
24619
- <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
24620
- </div>
24621
- </div>
24622
- </file>
24623
- <file name="glyphicons.css">
24624
- @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
24625
- </file>
24626
- <file name="animations.css">
24627
- .animate-show {
24628
- line-height: 20px;
24629
- opacity: 1;
24630
- padding: 10px;
24631
- border: 1px solid black;
24632
- background: white;
24633
- }
24634
-
24635
- .animate-show.ng-hide-add.ng-hide-add-active,
24636
- .animate-show.ng-hide-remove.ng-hide-remove-active {
24637
- -webkit-transition: all linear 0.5s;
24638
- transition: all linear 0.5s;
24639
- }
24640
-
24641
- .animate-show.ng-hide {
24642
- line-height: 0;
24643
- opacity: 0;
24644
- padding: 0 10px;
24645
- }
24646
-
24647
- .check-element {
24648
- padding: 10px;
24649
- border: 1px solid black;
24650
- background: white;
24651
- }
24652
- </file>
24653
- <file name="protractor.js" type="protractor">
24654
- var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
24655
- var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
24656
-
24657
- it('should check ng-show / ng-hide', function() {
24658
- expect(thumbsUp.isDisplayed()).toBeFalsy();
24659
- expect(thumbsDown.isDisplayed()).toBeTruthy();
24660
-
24661
- element(by.model('checked')).click();
24662
-
24663
- expect(thumbsUp.isDisplayed()).toBeTruthy();
24664
- expect(thumbsDown.isDisplayed()).toBeFalsy();
24665
- });
24666
- </file>
24667
- </example>
24668
- */
24669
-var ngShowDirective = ['$animate', function($animate) {
24670
- return {
24671
- restrict: 'A',
24672
- multiElement: true,
24673
- link: function(scope, element, attr) {
24674
- scope.$watch(attr.ngShow, function ngShowWatchAction(value) {
24675
- // we're adding a temporary, animation-specific class for ng-hide since this way
24676
- // we can control when the element is actually displayed on screen without having
24677
- // to have a global/greedy CSS selector that breaks when other animations are run.
24678
- // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845
24679
- $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {
24680
- tempClasses: NG_HIDE_IN_PROGRESS_CLASS
24681
- });
24682
- });
24683
- }
24684
- };
24685
-}];
24686
-
24687
-
24688
-/**
24689
- * @ngdoc directive
24690
- * @name ngHide
24691
- *
24692
- * @description
24693
- * The `ngHide` directive shows or hides the given HTML element based on the expression
24694
- * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding
24695
- * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
24696
- * in AngularJS and sets the display style to none (using an !important flag).
24697
- * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
24698
- *
24699
- * ```html
24700
- * <!-- when $scope.myValue is truthy (element is hidden) -->
24701
- * <div ng-hide="myValue" class="ng-hide"></div>
24702
- *
24703
- * <!-- when $scope.myValue is falsy (element is visible) -->
24704
- * <div ng-hide="myValue"></div>
24705
- * ```
24706
- *
24707
- * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class
24708
- * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed
24709
- * from the element causing the element not to appear hidden.
24710
- *
24711
- * ## Why is !important used?
24712
- *
24713
- * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
24714
- * can be easily overridden by heavier selectors. For example, something as simple
24715
- * as changing the display style on a HTML list item would make hidden elements appear visible.
24716
- * This also becomes a bigger issue when dealing with CSS frameworks.
24717
- *
24718
- * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
24719
- * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
24720
- * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
24721
- *
24722
- * ### Overriding `.ng-hide`
24723
- *
24724
- * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
24725
- * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
24726
- * class in CSS:
24727
- *
24728
- * ```css
24729
- * .ng-hide {
24730
- * /&#42; this is just another form of hiding an element &#42;/
24731
- * display: block!important;
24732
- * position: absolute;
24733
- * top: -9999px;
24734
- * left: -9999px;
24735
- * }
24736
- * ```
24737
- *
24738
- * By default you don't need to override in CSS anything and the animations will work around the display style.
24739
- *
24740
- * ## A note about animations with `ngHide`
24741
- *
24742
- * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
24743
- * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`
24744
- * CSS class is added and removed for you instead of your own CSS class.
24745
- *
24746
- * ```css
24747
- * //
24748
- * //a working example can be found at the bottom of this page
24749
- * //
24750
- * .my-element.ng-hide-add, .my-element.ng-hide-remove {
24751
- * transition: 0.5s linear all;
24752
- * }
24753
- *
24754
- * .my-element.ng-hide-add { ... }
24755
- * .my-element.ng-hide-add.ng-hide-add-active { ... }
24756
- * .my-element.ng-hide-remove { ... }
24757
- * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
24758
- * ```
24759
- *
24760
- * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
24761
- * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
24762
- *
24763
- * @animations
24764
- * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden
24765
- * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible
24766
- *
24767
- * @element ANY
24768
- * @param {expression} ngHide If the {@link guide/expression expression} is truthy then
24769
- * the element is shown or hidden respectively.
24770
- *
24771
- * @example
24772
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
24773
- <file name="index.html">
24774
- Click me: <input type="checkbox" ng-model="checked"><br/>
24775
- <div>
24776
- Show:
24777
- <div class="check-element animate-hide" ng-show="checked">
24778
- <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
24779
- </div>
24780
- </div>
24781
- <div>
24782
- Hide:
24783
- <div class="check-element animate-hide" ng-hide="checked">
24784
- <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
24785
- </div>
24786
- </div>
24787
- </file>
24788
- <file name="glyphicons.css">
24789
- @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
24790
- </file>
24791
- <file name="animations.css">
24792
- .animate-hide {
24793
- -webkit-transition: all linear 0.5s;
24794
- transition: all linear 0.5s;
24795
- line-height: 20px;
24796
- opacity: 1;
24797
- padding: 10px;
24798
- border: 1px solid black;
24799
- background: white;
24800
- }
24801
-
24802
- .animate-hide.ng-hide {
24803
- line-height: 0;
24804
- opacity: 0;
24805
- padding: 0 10px;
24806
- }
24807
-
24808
- .check-element {
24809
- padding: 10px;
24810
- border: 1px solid black;
24811
- background: white;
24812
- }
24813
- </file>
24814
- <file name="protractor.js" type="protractor">
24815
- var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
24816
- var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
24817
-
24818
- it('should check ng-show / ng-hide', function() {
24819
- expect(thumbsUp.isDisplayed()).toBeFalsy();
24820
- expect(thumbsDown.isDisplayed()).toBeTruthy();
24821
-
24822
- element(by.model('checked')).click();
24823
-
24824
- expect(thumbsUp.isDisplayed()).toBeTruthy();
24825
- expect(thumbsDown.isDisplayed()).toBeFalsy();
24826
- });
24827
- </file>
24828
- </example>
24829
- */
24830
-var ngHideDirective = ['$animate', function($animate) {
24831
- return {
24832
- restrict: 'A',
24833
- multiElement: true,
24834
- link: function(scope, element, attr) {
24835
- scope.$watch(attr.ngHide, function ngHideWatchAction(value) {
24836
- // The comment inside of the ngShowDirective explains why we add and
24837
- // remove a temporary class for the show/hide animation
24838
- $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, {
24839
- tempClasses: NG_HIDE_IN_PROGRESS_CLASS
24840
- });
24841
- });
24842
- }
24843
- };
24844
-}];
24845
-
24846
-/**
24847
- * @ngdoc directive
24848
- * @name ngStyle
24849
- * @restrict AC
24850
- *
24851
- * @description
24852
- * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.
24853
- *
24854
- * @element ANY
24855
- * @param {expression} ngStyle
24856
- *
24857
- * {@link guide/expression Expression} which evals to an
24858
- * object whose keys are CSS style names and values are corresponding values for those CSS
24859
- * keys.
24860
- *
24861
- * Since some CSS style names are not valid keys for an object, they must be quoted.
24862
- * See the 'background-color' style in the example below.
24863
- *
24864
- * @example
24865
- <example>
24866
- <file name="index.html">
24867
- <input type="button" value="set color" ng-click="myStyle={color:'red'}">
24868
- <input type="button" value="set background" ng-click="myStyle={'background-color':'blue'}">
24869
- <input type="button" value="clear" ng-click="myStyle={}">
24870
- <br/>
24871
- <span ng-style="myStyle">Sample Text</span>
24872
- <pre>myStyle={{myStyle}}</pre>
24873
- </file>
24874
- <file name="style.css">
24875
- span {
24876
- color: black;
24877
- }
24878
- </file>
24879
- <file name="protractor.js" type="protractor">
24880
- var colorSpan = element(by.css('span'));
24881
-
24882
- it('should check ng-style', function() {
24883
- expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
24884
- element(by.css('input[value=\'set color\']')).click();
24885
- expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');
24886
- element(by.css('input[value=clear]')).click();
24887
- expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
24888
- });
24889
- </file>
24890
- </example>
24891
- */
24892
-var ngStyleDirective = ngDirective(function(scope, element, attr) {
24893
- scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {
24894
- if (oldStyles && (newStyles !== oldStyles)) {
24895
- forEach(oldStyles, function(val, style) { element.css(style, '');});
24896
- }
24897
- if (newStyles) element.css(newStyles);
24898
- }, true);
24899
-});
24900
-
24901
-/**
24902
- * @ngdoc directive
24903
- * @name ngSwitch
24904
- * @restrict EA
24905
- *
24906
- * @description
24907
- * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.
24908
- * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location
24909
- * as specified in the template.
24910
- *
24911
- * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it
24912
- * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element
24913
- * matches the value obtained from the evaluated expression. In other words, you define a container element
24914
- * (where you place the directive), place an expression on the **`on="..."` attribute**
24915
- * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place
24916
- * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on
24917
- * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default
24918
- * attribute is displayed.
24919
- *
24920
- * <div class="alert alert-info">
24921
- * Be aware that the attribute values to match against cannot be expressions. They are interpreted
24922
- * as literal string values to match against.
24923
- * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the
24924
- * value of the expression `$scope.someVal`.
24925
- * </div>
24926
-
24927
- * @animations
24928
- * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container
24929
- * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
24930
- *
24931
- * @usage
24932
- *
24933
- * ```
24934
- * <ANY ng-switch="expression">
24935
- * <ANY ng-switch-when="matchValue1">...</ANY>
24936
- * <ANY ng-switch-when="matchValue2">...</ANY>
24937
- * <ANY ng-switch-default>...</ANY>
24938
- * </ANY>
24939
- * ```
24940
- *
24941
- *
24942
- * @scope
24943
- * @priority 1200
24944
- * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.
24945
- * On child elements add:
24946
- *
24947
- * * `ngSwitchWhen`: the case statement to match against. If match then this
24948
- * case will be displayed. If the same match appears multiple times, all the
24949
- * elements will be displayed.
24950
- * * `ngSwitchDefault`: the default case when no other case match. If there
24951
- * are multiple default cases, all of them will be displayed when no other
24952
- * case match.
24953
- *
24954
- *
24955
- * @example
24956
- <example module="switchExample" deps="angular-animate.js" animations="true">
24957
- <file name="index.html">
24958
- <div ng-controller="ExampleController">
24959
- <select ng-model="selection" ng-options="item for item in items">
24960
- </select>
24961
- <tt>selection={{selection}}</tt>
24962
- <hr/>
24963
- <div class="animate-switch-container"
24964
- ng-switch on="selection">
24965
- <div class="animate-switch" ng-switch-when="settings">Settings Div</div>
24966
- <div class="animate-switch" ng-switch-when="home">Home Span</div>
24967
- <div class="animate-switch" ng-switch-default>default</div>
24968
- </div>
24969
- </div>
24970
- </file>
24971
- <file name="script.js">
24972
- angular.module('switchExample', ['ngAnimate'])
24973
- .controller('ExampleController', ['$scope', function($scope) {
24974
- $scope.items = ['settings', 'home', 'other'];
24975
- $scope.selection = $scope.items[0];
24976
- }]);
24977
- </file>
24978
- <file name="animations.css">
24979
- .animate-switch-container {
24980
- position:relative;
24981
- background:white;
24982
- border:1px solid black;
24983
- height:40px;
24984
- overflow:hidden;
24985
- }
24986
-
24987
- .animate-switch {
24988
- padding:10px;
24989
- }
24990
-
24991
- .animate-switch.ng-animate {
24992
- -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
24993
- transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
24994
-
24995
- position:absolute;
24996
- top:0;
24997
- left:0;
24998
- right:0;
24999
- bottom:0;
25000
- }
25001
-
25002
- .animate-switch.ng-leave.ng-leave-active,
25003
- .animate-switch.ng-enter {
25004
- top:-50px;
25005
- }
25006
- .animate-switch.ng-leave,
25007
- .animate-switch.ng-enter.ng-enter-active {
25008
- top:0;
25009
- }
25010
- </file>
25011
- <file name="protractor.js" type="protractor">
25012
- var switchElem = element(by.css('[ng-switch]'));
25013
- var select = element(by.model('selection'));
25014
-
25015
- it('should start in settings', function() {
25016
- expect(switchElem.getText()).toMatch(/Settings Div/);
25017
- });
25018
- it('should change to home', function() {
25019
- select.all(by.css('option')).get(1).click();
25020
- expect(switchElem.getText()).toMatch(/Home Span/);
25021
- });
25022
- it('should select default', function() {
25023
- select.all(by.css('option')).get(2).click();
25024
- expect(switchElem.getText()).toMatch(/default/);
25025
- });
25026
- </file>
25027
- </example>
25028
- */
25029
-var ngSwitchDirective = ['$animate', function($animate) {
25030
- return {
25031
- restrict: 'EA',
25032
- require: 'ngSwitch',
25033
-
25034
- // asks for $scope to fool the BC controller module
25035
- controller: ['$scope', function ngSwitchController() {
25036
- this.cases = {};
25037
- }],
25038
- link: function(scope, element, attr, ngSwitchController) {
25039
- var watchExpr = attr.ngSwitch || attr.on,
25040
- selectedTranscludes = [],
25041
- selectedElements = [],
25042
- previousLeaveAnimations = [],
25043
- selectedScopes = [];
25044
-
25045
- var spliceFactory = function(array, index) {
25046
- return function() { array.splice(index, 1); };
25047
- };
25048
-
25049
- scope.$watch(watchExpr, function ngSwitchWatchAction(value) {
25050
- var i, ii;
25051
- for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) {
25052
- $animate.cancel(previousLeaveAnimations[i]);
25053
- }
25054
- previousLeaveAnimations.length = 0;
25055
-
25056
- for (i = 0, ii = selectedScopes.length; i < ii; ++i) {
25057
- var selected = getBlockNodes(selectedElements[i].clone);
25058
- selectedScopes[i].$destroy();
25059
- var promise = previousLeaveAnimations[i] = $animate.leave(selected);
25060
- promise.then(spliceFactory(previousLeaveAnimations, i));
25061
- }
25062
-
25063
- selectedElements.length = 0;
25064
- selectedScopes.length = 0;
25065
-
25066
- if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {
25067
- forEach(selectedTranscludes, function(selectedTransclude) {
25068
- selectedTransclude.transclude(function(caseElement, selectedScope) {
25069
- selectedScopes.push(selectedScope);
25070
- var anchor = selectedTransclude.element;
25071
- caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: ');
25072
- var block = { clone: caseElement };
25073
-
25074
- selectedElements.push(block);
25075
- $animate.enter(caseElement, anchor.parent(), anchor);
25076
- });
25077
- });
25078
- }
25079
- });
25080
- }
25081
- };
25082
-}];
25083
-
25084
-var ngSwitchWhenDirective = ngDirective({
25085
- transclude: 'element',
25086
- priority: 1200,
25087
- require: '^ngSwitch',
25088
- multiElement: true,
25089
- link: function(scope, element, attrs, ctrl, $transclude) {
25090
- ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
25091
- ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
25092
- }
25093
-});
25094
-
25095
-var ngSwitchDefaultDirective = ngDirective({
25096
- transclude: 'element',
25097
- priority: 1200,
25098
- require: '^ngSwitch',
25099
- multiElement: true,
25100
- link: function(scope, element, attr, ctrl, $transclude) {
25101
- ctrl.cases['?'] = (ctrl.cases['?'] || []);
25102
- ctrl.cases['?'].push({ transclude: $transclude, element: element });
25103
- }
25104
-});
25105
-
25106
-/**
25107
- * @ngdoc directive
25108
- * @name ngTransclude
25109
- * @restrict EAC
25110
- *
25111
- * @description
25112
- * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
25113
- *
25114
- * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
25115
- *
25116
- * @element ANY
25117
- *
25118
- * @example
25119
- <example module="transcludeExample">
25120
- <file name="index.html">
25121
- <script>
25122
- angular.module('transcludeExample', [])
25123
- .directive('pane', function(){
25124
- return {
25125
- restrict: 'E',
25126
- transclude: true,
25127
- scope: { title:'@' },
25128
- template: '<div style="border: 1px solid black;">' +
25129
- '<div style="background-color: gray">{{title}}</div>' +
25130
- '<ng-transclude></ng-transclude>' +
25131
- '</div>'
25132
- };
25133
- })
25134
- .controller('ExampleController', ['$scope', function($scope) {
25135
- $scope.title = 'Lorem Ipsum';
25136
- $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
25137
- }]);
25138
- </script>
25139
- <div ng-controller="ExampleController">
25140
- <input ng-model="title"> <br/>
25141
- <textarea ng-model="text"></textarea> <br/>
25142
- <pane title="{{title}}">{{text}}</pane>
25143
- </div>
25144
- </file>
25145
- <file name="protractor.js" type="protractor">
25146
- it('should have transcluded', function() {
25147
- var titleElement = element(by.model('title'));
25148
- titleElement.clear();
25149
- titleElement.sendKeys('TITLE');
25150
- var textElement = element(by.model('text'));
25151
- textElement.clear();
25152
- textElement.sendKeys('TEXT');
25153
- expect(element(by.binding('title')).getText()).toEqual('TITLE');
25154
- expect(element(by.binding('text')).getText()).toEqual('TEXT');
25155
- });
25156
- </file>
25157
- </example>
25158
- *
25159
- */
25160
-var ngTranscludeDirective = ngDirective({
25161
- restrict: 'EAC',
25162
- link: function($scope, $element, $attrs, controller, $transclude) {
25163
- if (!$transclude) {
25164
- throw minErr('ngTransclude')('orphan',
25165
- 'Illegal use of ngTransclude directive in the template! ' +
25166
- 'No parent directive that requires a transclusion found. ' +
25167
- 'Element: {0}',
25168
- startingTag($element));
25169
- }
25170
-
25171
- $transclude(function(clone) {
25172
- $element.empty();
25173
- $element.append(clone);
25174
- });
25175
- }
25176
-});
25177
-
25178
-/**
25179
- * @ngdoc directive
25180
- * @name script
25181
- * @restrict E
25182
- *
25183
- * @description
25184
- * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the
25185
- * template can be used by {@link ng.directive:ngInclude `ngInclude`},
25186
- * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the
25187
- * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be
25188
- * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.
25189
- *
25190
- * @param {string} type Must be set to `'text/ng-template'`.
25191
- * @param {string} id Cache name of the template.
25192
- *
25193
- * @example
25194
- <example>
25195
- <file name="index.html">
25196
- <script type="text/ng-template" id="/tpl.html">
25197
- Content of the template.
25198
- </script>
25199
-
25200
- <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a>
25201
- <div id="tpl-content" ng-include src="currentTpl"></div>
25202
- </file>
25203
- <file name="protractor.js" type="protractor">
25204
- it('should load template defined inside script tag', function() {
25205
- element(by.css('#tpl-link')).click();
25206
- expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);
25207
- });
25208
- </file>
25209
- </example>
25210
- */
25211
-var scriptDirective = ['$templateCache', function($templateCache) {
25212
- return {
25213
- restrict: 'E',
25214
- terminal: true,
25215
- compile: function(element, attr) {
25216
- if (attr.type == 'text/ng-template') {
25217
- var templateUrl = attr.id,
25218
- text = element[0].text;
25219
-
25220
- $templateCache.put(templateUrl, text);
25221
- }
25222
- }
25223
- };
25224
-}];
25225
-
25226
-var ngOptionsMinErr = minErr('ngOptions');
25227
-/**
25228
- * @ngdoc directive
25229
- * @name select
25230
- * @restrict E
25231
- *
25232
- * @description
25233
- * HTML `SELECT` element with angular data-binding.
25234
- *
25235
- * # `ngOptions`
25236
- *
25237
- * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`
25238
- * elements for the `<select>` element using the array or object obtained by evaluating the
25239
- * `ngOptions` comprehension_expression.
25240
- *
25241
- * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a
25242
- * similar result. However, the `ngOptions` provides some benefits such as reducing memory and
25243
- * increasing speed by not creating a new scope for each repeated instance, as well as providing
25244
- * more flexibility in how the `select`'s model is assigned via `select as`. `ngOptions` should be
25245
- * used when the `select` model needs to be bound to a non-string value. This is because an option
25246
- * element can only be bound to string values at present.
25247
- *
25248
- * When an item in the `<select>` menu is selected, the array element or object property
25249
- * represented by the selected option will be bound to the model identified by the `ngModel`
25250
- * directive.
25251
- *
25252
- * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can
25253
- * be nested into the `<select>` element. This element will then represent the `null` or "not selected"
25254
- * option. See example below for demonstration.
25255
- *
25256
- * <div class="alert alert-warning">
25257
- * **Note:** `ngModel` compares by reference, not value. This is important when binding to an
25258
- * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).
25259
- * </div>
25260
- *
25261
- * ## `select as`
25262
- *
25263
- * Using `select as` will bind the result of the `select as` expression to the model, but
25264
- * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)
25265
- * or property name (for object data sources) of the value within the collection. If a `track by` expression
25266
- * is used, the result of that expression will be set as the value of the `option` and `select` elements.
25267
- *
25268
- * ### `select as` with `track by`
25269
- *
25270
- * Using `select as` together with `track by` is not recommended. Reasoning:
25271
- *
25272
- * - Example: &lt;select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected"&gt;
25273
- * values: [{id: 1, label: 'aLabel', subItem: {name: 'aSubItem'}}, {id: 2, label: 'bLabel', subItem: {name: 'bSubItem'}}],
25274
- * $scope.selected = {name: 'aSubItem'};
25275
- * - track by is always applied to `value`, with the purpose of preserving the selection,
25276
- * (to `item` in this case)
25277
- * - to calculate whether an item is selected we do the following:
25278
- * 1. apply `track by` to the values in the array, e.g.
25279
- * In the example: [1,2]
25280
- * 2. apply `track by` to the already selected value in `ngModel`:
25281
- * In the example: this is not possible, as `track by` refers to `item.id`, but the selected
25282
- * value from `ngModel` is `{name: aSubItem}`.
25283
- *
25284
- * @param {string} ngModel Assignable angular expression to data-bind to.
25285
- * @param {string=} name Property name of the form under which the control is published.
25286
- * @param {string=} required The control is considered valid only if value is entered.
25287
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
25288
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
25289
- * `required` when you want to data-bind to the `required` attribute.
25290
- * @param {comprehension_expression=} ngOptions in one of the following forms:
25291
- *
25292
- * * for array data sources:
25293
- * * `label` **`for`** `value` **`in`** `array`
25294
- * * `select` **`as`** `label` **`for`** `value` **`in`** `array`
25295
- * * `label` **`group by`** `group` **`for`** `value` **`in`** `array`
25296
- * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`
25297
- * * `label` **`for`** `value` **`in`** `array` | orderBy:`orderexpr` **`track by`** `trackexpr`
25298
- * (for including a filter with `track by`)
25299
- * * for object data sources:
25300
- * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
25301
- * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
25302
- * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`
25303
- * * `select` **`as`** `label` **`group by`** `group`
25304
- * **`for` `(`**`key`**`,`** `value`**`) in`** `object`
25305
- *
25306
- * Where:
25307
- *
25308
- * * `array` / `object`: an expression which evaluates to an array / object to iterate over.
25309
- * * `value`: local variable which will refer to each item in the `array` or each property value
25310
- * of `object` during iteration.
25311
- * * `key`: local variable which will refer to a property name in `object` during iteration.
25312
- * * `label`: The result of this expression will be the label for `<option>` element. The
25313
- * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).
25314
- * * `select`: The result of this expression will be bound to the model of the parent `<select>`
25315
- * element. If not specified, `select` expression will default to `value`.
25316
- * * `group`: The result of this expression will be used to group options using the `<optgroup>`
25317
- * DOM element.
25318
- * * `trackexpr`: Used when working with an array of objects. The result of this expression will be
25319
- * used to identify the objects in the array. The `trackexpr` will most likely refer to the
25320
- * `value` variable (e.g. `value.propertyName`). With this the selection is preserved
25321
- * even when the options are recreated (e.g. reloaded from the server).
25322
- *
25323
- * @example
25324
- <example module="selectExample">
25325
- <file name="index.html">
25326
- <script>
25327
- angular.module('selectExample', [])
25328
- .controller('ExampleController', ['$scope', function($scope) {
25329
- $scope.colors = [
25330
- {name:'black', shade:'dark'},
25331
- {name:'white', shade:'light'},
25332
- {name:'red', shade:'dark'},
25333
- {name:'blue', shade:'dark'},
25334
- {name:'yellow', shade:'light'}
25335
- ];
25336
- $scope.myColor = $scope.colors[2]; // red
25337
- }]);
25338
- </script>
25339
- <div ng-controller="ExampleController">
25340
- <ul>
25341
- <li ng-repeat="color in colors">
25342
- Name: <input ng-model="color.name">
25343
- [<a href ng-click="colors.splice($index, 1)">X</a>]
25344
- </li>
25345
- <li>
25346
- [<a href ng-click="colors.push({})">add</a>]
25347
- </li>
25348
- </ul>
25349
- <hr/>
25350
- Color (null not allowed):
25351
- <select ng-model="myColor" ng-options="color.name for color in colors"></select><br>
25352
-
25353
- Color (null allowed):
25354
- <span class="nullable">
25355
- <select ng-model="myColor" ng-options="color.name for color in colors">
25356
- <option value="">-- choose color --</option>
25357
- </select>
25358
- </span><br/>
25359
-
25360
- Color grouped by shade:
25361
- <select ng-model="myColor" ng-options="color.name group by color.shade for color in colors">
25362
- </select><br/>
25363
-
25364
-
25365
- Select <a href ng-click="myColor = { name:'not in list', shade: 'other' }">bogus</a>.<br>
25366
- <hr/>
25367
- Currently selected: {{ {selected_color:myColor} }}
25368
- <div style="border:solid 1px black; height:20px"
25369
- ng-style="{'background-color':myColor.name}">
25370
- </div>
25371
- </div>
25372
- </file>
25373
- <file name="protractor.js" type="protractor">
25374
- it('should check ng-options', function() {
25375
- expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');
25376
- element.all(by.model('myColor')).first().click();
25377
- element.all(by.css('select[ng-model="myColor"] option')).first().click();
25378
- expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');
25379
- element(by.css('.nullable select[ng-model="myColor"]')).click();
25380
- element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click();
25381
- expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');
25382
- });
25383
- </file>
25384
- </example>
25385
- */
25386
-
25387
-var ngOptionsDirective = valueFn({
25388
- restrict: 'A',
25389
- terminal: true
25390
-});
25391
-
25392
-// jshint maxlen: false
25393
-var selectDirective = ['$compile', '$parse', function($compile, $parse) {
25394
- //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888
25395
- var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
25396
- nullModelCtrl = {$setViewValue: noop};
25397
-// jshint maxlen: 100
25398
-
25399
- return {
25400
- restrict: 'E',
25401
- require: ['select', '?ngModel'],
25402
- controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {
25403
- var self = this,
25404
- optionsMap = {},
25405
- ngModelCtrl = nullModelCtrl,
25406
- nullOption,
25407
- unknownOption;
25408
-
25409
-
25410
- self.databound = $attrs.ngModel;
25411
-
25412
-
25413
- self.init = function(ngModelCtrl_, nullOption_, unknownOption_) {
25414
- ngModelCtrl = ngModelCtrl_;
25415
- nullOption = nullOption_;
25416
- unknownOption = unknownOption_;
25417
- };
25418
-
25419
-
25420
- self.addOption = function(value, element) {
25421
- assertNotHasOwnProperty(value, '"option value"');
25422
- optionsMap[value] = true;
25423
-
25424
- if (ngModelCtrl.$viewValue == value) {
25425
- $element.val(value);
25426
- if (unknownOption.parent()) unknownOption.remove();
25427
- }
25428
- // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459
25429
- // Adding an <option selected="selected"> element to a <select required="required"> should
25430
- // automatically select the new element
25431
- if (element && element[0].hasAttribute('selected')) {
25432
- element[0].selected = true;
25433
- }
25434
- };
25435
-
25436
-
25437
- self.removeOption = function(value) {
25438
- if (this.hasOption(value)) {
25439
- delete optionsMap[value];
25440
- if (ngModelCtrl.$viewValue === value) {
25441
- this.renderUnknownOption(value);
25442
- }
25443
- }
25444
- };
25445
-
25446
-
25447
- self.renderUnknownOption = function(val) {
25448
- var unknownVal = '? ' + hashKey(val) + ' ?';
25449
- unknownOption.val(unknownVal);
25450
- $element.prepend(unknownOption);
25451
- $element.val(unknownVal);
25452
- unknownOption.prop('selected', true); // needed for IE
25453
- };
25454
-
25455
-
25456
- self.hasOption = function(value) {
25457
- return optionsMap.hasOwnProperty(value);
25458
- };
25459
-
25460
- $scope.$on('$destroy', function() {
25461
- // disable unknown option so that we don't do work when the whole select is being destroyed
25462
- self.renderUnknownOption = noop;
25463
- });
25464
- }],
25465
-
25466
- link: function(scope, element, attr, ctrls) {
25467
- // if ngModel is not defined, we don't need to do anything
25468
- if (!ctrls[1]) return;
25469
-
25470
- var selectCtrl = ctrls[0],
25471
- ngModelCtrl = ctrls[1],
25472
- multiple = attr.multiple,
25473
- optionsExp = attr.ngOptions,
25474
- nullOption = false, // if false, user will not be able to select it (used by ngOptions)
25475
- emptyOption,
25476
- renderScheduled = false,
25477
- // we can't just jqLite('<option>') since jqLite is not smart enough
25478
- // to create it in <select> and IE barfs otherwise.
25479
- optionTemplate = jqLite(document.createElement('option')),
25480
- optGroupTemplate =jqLite(document.createElement('optgroup')),
25481
- unknownOption = optionTemplate.clone();
25482
-
25483
- // find "null" option
25484
- for (var i = 0, children = element.children(), ii = children.length; i < ii; i++) {
25485
- if (children[i].value === '') {
25486
- emptyOption = nullOption = children.eq(i);
25487
- break;
25488
- }
25489
- }
25490
-
25491
- selectCtrl.init(ngModelCtrl, nullOption, unknownOption);
25492
-
25493
- // required validator
25494
- if (multiple) {
25495
- ngModelCtrl.$isEmpty = function(value) {
25496
- return !value || value.length === 0;
25497
- };
25498
- }
25499
-
25500
- if (optionsExp) setupAsOptions(scope, element, ngModelCtrl);
25501
- else if (multiple) setupAsMultiple(scope, element, ngModelCtrl);
25502
- else setupAsSingle(scope, element, ngModelCtrl, selectCtrl);
25503
-
25504
-
25505
- ////////////////////////////
25506
-
25507
-
25508
-
25509
- function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) {
25510
- ngModelCtrl.$render = function() {
25511
- var viewValue = ngModelCtrl.$viewValue;
25512
-
25513
- if (selectCtrl.hasOption(viewValue)) {
25514
- if (unknownOption.parent()) unknownOption.remove();
25515
- selectElement.val(viewValue);
25516
- if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy
25517
- } else {
25518
- if (isUndefined(viewValue) && emptyOption) {
25519
- selectElement.val('');
25520
- } else {
25521
- selectCtrl.renderUnknownOption(viewValue);
25522
- }
25523
- }
25524
- };
25525
-
25526
- selectElement.on('change', function() {
25527
- scope.$apply(function() {
25528
- if (unknownOption.parent()) unknownOption.remove();
25529
- ngModelCtrl.$setViewValue(selectElement.val());
25530
- });
25531
- });
25532
- }
25533
-
25534
- function setupAsMultiple(scope, selectElement, ctrl) {
25535
- var lastView;
25536
- ctrl.$render = function() {
25537
- var items = new HashMap(ctrl.$viewValue);
25538
- forEach(selectElement.find('option'), function(option) {
25539
- option.selected = isDefined(items.get(option.value));
25540
- });
25541
- };
25542
-
25543
- // we have to do it on each watch since ngModel watches reference, but
25544
- // we need to work of an array, so we need to see if anything was inserted/removed
25545
- scope.$watch(function selectMultipleWatch() {
25546
- if (!equals(lastView, ctrl.$viewValue)) {
25547
- lastView = shallowCopy(ctrl.$viewValue);
25548
- ctrl.$render();
25549
- }
25550
- });
25551
-
25552
- selectElement.on('change', function() {
25553
- scope.$apply(function() {
25554
- var array = [];
25555
- forEach(selectElement.find('option'), function(option) {
25556
- if (option.selected) {
25557
- array.push(option.value);
25558
- }
25559
- });
25560
- ctrl.$setViewValue(array);
25561
- });
25562
- });
25563
- }
25564
-
25565
- function setupAsOptions(scope, selectElement, ctrl) {
25566
- var match;
25567
-
25568
- if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) {
25569
- throw ngOptionsMinErr('iexp',
25570
- "Expected expression in form of " +
25571
- "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" +
25572
- " but got '{0}'. Element: {1}",
25573
- optionsExp, startingTag(selectElement));
25574
- }
25575
-
25576
- var displayFn = $parse(match[2] || match[1]),
25577
- valueName = match[4] || match[6],
25578
- selectAs = / as /.test(match[0]) && match[1],
25579
- selectAsFn = selectAs ? $parse(selectAs) : null,
25580
- keyName = match[5],
25581
- groupByFn = $parse(match[3] || ''),
25582
- valueFn = $parse(match[2] ? match[1] : valueName),
25583
- valuesFn = $parse(match[7]),
25584
- track = match[8],
25585
- trackFn = track ? $parse(match[8]) : null,
25586
- trackKeysCache = {},
25587
- // This is an array of array of existing option groups in DOM.
25588
- // We try to reuse these if possible
25589
- // - optionGroupsCache[0] is the options with no option group
25590
- // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element
25591
- optionGroupsCache = [[{element: selectElement, label:''}]],
25592
- //re-usable object to represent option's locals
25593
- locals = {};
25594
-
25595
- if (nullOption) {
25596
- // compile the element since there might be bindings in it
25597
- $compile(nullOption)(scope);
25598
-
25599
- // remove the class, which is added automatically because we recompile the element and it
25600
- // becomes the compilation root
25601
- nullOption.removeClass('ng-scope');
25602
-
25603
- // we need to remove it before calling selectElement.empty() because otherwise IE will
25604
- // remove the label from the element. wtf?
25605
- nullOption.remove();
25606
- }
25607
-
25608
- // clear contents, we'll add what's needed based on the model
25609
- selectElement.empty();
25610
-
25611
- selectElement.on('change', selectionChanged);
25612
-
25613
- ctrl.$render = render;
25614
-
25615
- scope.$watchCollection(valuesFn, scheduleRendering);
25616
- scope.$watchCollection(getLabels, scheduleRendering);
25617
-
25618
- if (multiple) {
25619
- scope.$watchCollection(function() { return ctrl.$modelValue; }, scheduleRendering);
25620
- }
25621
-
25622
- // ------------------------------------------------------------------ //
25623
-
25624
- function callExpression(exprFn, key, value) {
25625
- locals[valueName] = value;
25626
- if (keyName) locals[keyName] = key;
25627
- return exprFn(scope, locals);
25628
- }
25629
-
25630
- function selectionChanged() {
25631
- scope.$apply(function() {
25632
- var collection = valuesFn(scope) || [];
25633
- var viewValue;
25634
- if (multiple) {
25635
- viewValue = [];
25636
- forEach(selectElement.val(), function(selectedKey) {
25637
- selectedKey = trackFn ? trackKeysCache[selectedKey] : selectedKey;
25638
- viewValue.push(getViewValue(selectedKey, collection[selectedKey]));
25639
- });
25640
- } else {
25641
- var selectedKey = trackFn ? trackKeysCache[selectElement.val()] : selectElement.val();
25642
- viewValue = getViewValue(selectedKey, collection[selectedKey]);
25643
- }
25644
- ctrl.$setViewValue(viewValue);
25645
- render();
25646
- });
25647
- }
25648
-
25649
- function getViewValue(key, value) {
25650
- if (key === '?') {
25651
- return undefined;
25652
- } else if (key === '') {
25653
- return null;
25654
- } else {
25655
- var viewValueFn = selectAsFn ? selectAsFn : valueFn;
25656
- return callExpression(viewValueFn, key, value);
25657
- }
25658
- }
25659
-
25660
- function getLabels() {
25661
- var values = valuesFn(scope);
25662
- var toDisplay;
25663
- if (values && isArray(values)) {
25664
- toDisplay = new Array(values.length);
25665
- for (var i = 0, ii = values.length; i < ii; i++) {
25666
- toDisplay[i] = callExpression(displayFn, i, values[i]);
25667
- }
25668
- return toDisplay;
25669
- } else if (values) {
25670
- // TODO: Add a test for this case
25671
- toDisplay = {};
25672
- for (var prop in values) {
25673
- if (values.hasOwnProperty(prop)) {
25674
- toDisplay[prop] = callExpression(displayFn, prop, values[prop]);
25675
- }
25676
- }
25677
- }
25678
- return toDisplay;
25679
- }
25680
-
25681
- function createIsSelectedFn(viewValue) {
25682
- var selectedSet;
25683
- if (multiple) {
25684
- if (trackFn && isArray(viewValue)) {
25685
-
25686
- selectedSet = new HashMap([]);
25687
- for (var trackIndex = 0; trackIndex < viewValue.length; trackIndex++) {
25688
- // tracking by key
25689
- selectedSet.put(callExpression(trackFn, null, viewValue[trackIndex]), true);
25690
- }
25691
- } else {
25692
- selectedSet = new HashMap(viewValue);
25693
- }
25694
- } else if (trackFn) {
25695
- viewValue = callExpression(trackFn, null, viewValue);
25696
- }
25697
-
25698
- return function isSelected(key, value) {
25699
- var compareValueFn;
25700
- if (trackFn) {
25701
- compareValueFn = trackFn;
25702
- } else if (selectAsFn) {
25703
- compareValueFn = selectAsFn;
25704
- } else {
25705
- compareValueFn = valueFn;
25706
- }
25707
-
25708
- if (multiple) {
25709
- return isDefined(selectedSet.remove(callExpression(compareValueFn, key, value)));
25710
- } else {
25711
- return viewValue === callExpression(compareValueFn, key, value);
25712
- }
25713
- };
25714
- }
25715
-
25716
- function scheduleRendering() {
25717
- if (!renderScheduled) {
25718
- scope.$$postDigest(render);
25719
- renderScheduled = true;
25720
- }
25721
- }
25722
-
25723
- /**
25724
- * A new labelMap is created with each render.
25725
- * This function is called for each existing option with added=false,
25726
- * and each new option with added=true.
25727
- * - Labels that are passed to this method twice,
25728
- * (once with added=true and once with added=false) will end up with a value of 0, and
25729
- * will cause no change to happen to the corresponding option.
25730
- * - Labels that are passed to this method only once with added=false will end up with a
25731
- * value of -1 and will eventually be passed to selectCtrl.removeOption()
25732
- * - Labels that are passed to this method only once with added=true will end up with a
25733
- * value of 1 and will eventually be passed to selectCtrl.addOption()
25734
- */
25735
- function updateLabelMap(labelMap, label, added) {
25736
- labelMap[label] = labelMap[label] || 0;
25737
- labelMap[label] += (added ? 1 : -1);
25738
- }
25739
-
25740
- function render() {
25741
- renderScheduled = false;
25742
-
25743
- // Temporary location for the option groups before we render them
25744
- var optionGroups = {'':[]},
25745
- optionGroupNames = [''],
25746
- optionGroupName,
25747
- optionGroup,
25748
- option,
25749
- existingParent, existingOptions, existingOption,
25750
- viewValue = ctrl.$viewValue,
25751
- values = valuesFn(scope) || [],
25752
- keys = keyName ? sortedKeys(values) : values,
25753
- key,
25754
- value,
25755
- groupLength, length,
25756
- groupIndex, index,
25757
- labelMap = {},
25758
- selected,
25759
- isSelected = createIsSelectedFn(viewValue),
25760
- anySelected = false,
25761
- lastElement,
25762
- element,
25763
- label,
25764
- optionId;
25765
-
25766
- trackKeysCache = {};
25767
-
25768
- // We now build up the list of options we need (we merge later)
25769
- for (index = 0; length = keys.length, index < length; index++) {
25770
- key = index;
25771
- if (keyName) {
25772
- key = keys[index];
25773
- if (key.charAt(0) === '$') continue;
25774
- }
25775
- value = values[key];
25776
-
25777
- optionGroupName = callExpression(groupByFn, key, value) || '';
25778
- if (!(optionGroup = optionGroups[optionGroupName])) {
25779
- optionGroup = optionGroups[optionGroupName] = [];
25780
- optionGroupNames.push(optionGroupName);
25781
- }
25782
-
25783
- selected = isSelected(key, value);
25784
- anySelected = anySelected || selected;
25785
-
25786
- label = callExpression(displayFn, key, value); // what will be seen by the user
25787
-
25788
- // doing displayFn(scope, locals) || '' overwrites zero values
25789
- label = isDefined(label) ? label : '';
25790
- optionId = trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index);
25791
- if (trackFn) {
25792
- trackKeysCache[optionId] = key;
25793
- }
25794
-
25795
- optionGroup.push({
25796
- // either the index into array or key from object
25797
- id: optionId,
25798
- label: label,
25799
- selected: selected // determine if we should be selected
25800
- });
25801
- }
25802
- if (!multiple) {
25803
- if (nullOption || viewValue === null) {
25804
- // insert null option if we have a placeholder, or the model is null
25805
- optionGroups[''].unshift({id:'', label:'', selected:!anySelected});
25806
- } else if (!anySelected) {
25807
- // option could not be found, we have to insert the undefined item
25808
- optionGroups[''].unshift({id:'?', label:'', selected:true});
25809
- }
25810
- }
25811
-
25812
- // Now we need to update the list of DOM nodes to match the optionGroups we computed above
25813
- for (groupIndex = 0, groupLength = optionGroupNames.length;
25814
- groupIndex < groupLength;
25815
- groupIndex++) {
25816
- // current option group name or '' if no group
25817
- optionGroupName = optionGroupNames[groupIndex];
25818
-
25819
- // list of options for that group. (first item has the parent)
25820
- optionGroup = optionGroups[optionGroupName];
25821
-
25822
- if (optionGroupsCache.length <= groupIndex) {
25823
- // we need to grow the optionGroups
25824
- existingParent = {
25825
- element: optGroupTemplate.clone().attr('label', optionGroupName),
25826
- label: optionGroup.label
25827
- };
25828
- existingOptions = [existingParent];
25829
- optionGroupsCache.push(existingOptions);
25830
- selectElement.append(existingParent.element);
25831
- } else {
25832
- existingOptions = optionGroupsCache[groupIndex];
25833
- existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element
25834
-
25835
- // update the OPTGROUP label if not the same.
25836
- if (existingParent.label != optionGroupName) {
25837
- existingParent.element.attr('label', existingParent.label = optionGroupName);
25838
- }
25839
- }
25840
-
25841
- lastElement = null; // start at the beginning
25842
- for (index = 0, length = optionGroup.length; index < length; index++) {
25843
- option = optionGroup[index];
25844
- if ((existingOption = existingOptions[index + 1])) {
25845
- // reuse elements
25846
- lastElement = existingOption.element;
25847
- if (existingOption.label !== option.label) {
25848
- updateLabelMap(labelMap, existingOption.label, false);
25849
- updateLabelMap(labelMap, option.label, true);
25850
- lastElement.text(existingOption.label = option.label);
25851
- lastElement.prop('label', existingOption.label);
25852
- }
25853
- if (existingOption.id !== option.id) {
25854
- lastElement.val(existingOption.id = option.id);
25855
- }
25856
- // lastElement.prop('selected') provided by jQuery has side-effects
25857
- if (lastElement[0].selected !== option.selected) {
25858
- lastElement.prop('selected', (existingOption.selected = option.selected));
25859
- if (msie) {
25860
- // See #7692
25861
- // The selected item wouldn't visually update on IE without this.
25862
- // Tested on Win7: IE9, IE10 and IE11. Future IEs should be tested as well
25863
- lastElement.prop('selected', existingOption.selected);
25864
- }
25865
- }
25866
- } else {
25867
- // grow elements
25868
-
25869
- // if it's a null option
25870
- if (option.id === '' && nullOption) {
25871
- // put back the pre-compiled element
25872
- element = nullOption;
25873
- } else {
25874
- // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but
25875
- // in this version of jQuery on some browser the .text() returns a string
25876
- // rather then the element.
25877
- (element = optionTemplate.clone())
25878
- .val(option.id)
25879
- .prop('selected', option.selected)
25880
- .attr('selected', option.selected)
25881
- .prop('label', option.label)
25882
- .text(option.label);
25883
- }
25884
-
25885
- existingOptions.push(existingOption = {
25886
- element: element,
25887
- label: option.label,
25888
- id: option.id,
25889
- selected: option.selected
25890
- });
25891
- updateLabelMap(labelMap, option.label, true);
25892
- if (lastElement) {
25893
- lastElement.after(element);
25894
- } else {
25895
- existingParent.element.append(element);
25896
- }
25897
- lastElement = element;
25898
- }
25899
- }
25900
- // remove any excessive OPTIONs in a group
25901
- index++; // increment since the existingOptions[0] is parent element not OPTION
25902
- while (existingOptions.length > index) {
25903
- option = existingOptions.pop();
25904
- updateLabelMap(labelMap, option.label, false);
25905
- option.element.remove();
25906
- }
25907
- }
25908
- // remove any excessive OPTGROUPs from select
25909
- while (optionGroupsCache.length > groupIndex) {
25910
- // remove all the labels in the option group
25911
- optionGroup = optionGroupsCache.pop();
25912
- for (index = 1; index < optionGroup.length; ++index) {
25913
- updateLabelMap(labelMap, optionGroup[index].label, false);
25914
- }
25915
- optionGroup[0].element.remove();
25916
- }
25917
- forEach(labelMap, function(count, label) {
25918
- if (count > 0) {
25919
- selectCtrl.addOption(label);
25920
- } else if (count < 0) {
25921
- selectCtrl.removeOption(label);
25922
- }
25923
- });
25924
- }
25925
- }
25926
- }
25927
- };
25928
-}];
25929
-
25930
-var optionDirective = ['$interpolate', function($interpolate) {
25931
- var nullSelectCtrl = {
25932
- addOption: noop,
25933
- removeOption: noop
25934
- };
25935
-
25936
- return {
25937
- restrict: 'E',
25938
- priority: 100,
25939
- compile: function(element, attr) {
25940
- if (isUndefined(attr.value)) {
25941
- var interpolateFn = $interpolate(element.text(), true);
25942
- if (!interpolateFn) {
25943
- attr.$set('value', element.text());
25944
- }
25945
- }
25946
-
25947
- return function(scope, element, attr) {
25948
- var selectCtrlName = '$selectController',
25949
- parent = element.parent(),
25950
- selectCtrl = parent.data(selectCtrlName) ||
25951
- parent.parent().data(selectCtrlName); // in case we are in optgroup
25952
-
25953
- if (!selectCtrl || !selectCtrl.databound) {
25954
- selectCtrl = nullSelectCtrl;
25955
- }
25956
-
25957
- if (interpolateFn) {
25958
- scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) {
25959
- attr.$set('value', newVal);
25960
- if (oldVal !== newVal) {
25961
- selectCtrl.removeOption(oldVal);
25962
- }
25963
- selectCtrl.addOption(newVal, element);
25964
- });
25965
- } else {
25966
- selectCtrl.addOption(attr.value, element);
25967
- }
25968
-
25969
- element.on('$destroy', function() {
25970
- selectCtrl.removeOption(attr.value);
25971
- });
25972
- };
25973
- }
25974
- };
25975
-}];
25976
-
25977
-var styleDirective = valueFn({
25978
- restrict: 'E',
25979
- terminal: false
25980
-});
25981
-
25982
- if (window.angular.bootstrap) {
25983
- //AngularJS is already loaded, so we can return here...
25984
- console.log('WARNING: Tried to load angular more than once.');
25985
- return;
25986
- }
25987
-
25988
- //try to bind to jquery now so that one can write jqLite(document).ready()
25989
- //but we will rebind on bootstrap again.
25990
- bindJQuery();
25991
-
25992
- publishExternalAPI(angular);
25993
-
25994
- jqLite(document).ready(function() {
25995
- angularInit(document, bootstrap);
25996
- });
25997
-
25998
-})(window, document);
25999
-
26000
-!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
securis/src/main/webapp/js/angular/angular.min.js
deleted file mode 100644
....@@ -1,250 +0,0 @@
1
-/*
2
- AngularJS v1.3.6
3
- (c) 2010-2014 Google, Inc. http://angularjs.org
4
- License: MIT
5
-*/
6
-(function(U,X,u){'use strict';function A(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.6/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ra(b){if(null==b||Sa(b))return!1;var a=b.length;return b.nodeType===
7
-na&&a?!0:z(b)||x(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function r(b,a,c){var d,e;if(b)if(B(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(x(b)||Ra(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==r)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Cd(b,a,c){for(var d=Object.keys(b).sort(),e=0;e<d.length;e++)a.call(c,
8
-b[d[e]],d[e]);return d}function kc(b){return function(a,c){b(c,a)}}function Dd(){return++kb}function lc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function G(b){for(var a=b.$$hashKey,c=1,d=arguments.length;c<d;c++){var e=arguments[c];if(e)for(var f=Object.keys(e),g=0,h=f.length;g<h;g++){var k=f[g];b[k]=e[k]}}lc(b,a);return b}function $(b){return parseInt(b,10)}function H(){}function oa(b){return b}function ca(b){return function(){return b}}function C(b){return"undefined"===typeof b}function y(b){return"undefined"!==
9
-typeof b}function O(b){return null!==b&&"object"===typeof b}function z(b){return"string"===typeof b}function Y(b){return"number"===typeof b}function pa(b){return"[object Date]"===Ja.call(b)}function B(b){return"function"===typeof b}function lb(b){return"[object RegExp]"===Ja.call(b)}function Sa(b){return b&&b.window===b}function Ta(b){return b&&b.$evalAsync&&b.$watch}function Ua(b){return"boolean"===typeof b}function mc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Ed(b){var a={};
10
-b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function ua(b){return Q(b.nodeName||b[0]&&b[0].nodeName)}function Va(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return a}function Da(b,a,c,d){if(Sa(b)||Ta(b))throw Wa("cpws");if(a){if(b===a)throw Wa("cpi");c=c||[];d=d||[];if(O(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(x(b))for(var f=a.length=0;f<b.length;f++)e=Da(b[f],null,c,d),O(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);else{var g=a.$$hashKey;x(a)?a.length=
11
-0:r(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=Da(b[f],null,c,d),O(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);lc(a,g)}}else if(a=b)x(b)?a=Da(b,[],c,d):pa(b)?a=new Date(b.getTime()):lb(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):O(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=Da(b,e,c,d));return a}function qa(b,a){if(x(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(O(b))for(c in a=a||{},b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=
12
-b[c];return a||b}function ga(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(x(b)){if(!x(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!ga(b[d],a[d]))return!1;return!0}}else{if(pa(b))return pa(a)?ga(b.getTime(),a.getTime()):!1;if(lb(b)&&lb(a))return b.toString()==a.toString();if(Ta(b)||Ta(a)||Sa(b)||Sa(a)||x(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!B(b[d])){if(!ga(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&
13
-"$"!==d.charAt(0)&&a[d]!==u&&!B(a[d]))return!1;return!0}return!1}function Xa(b,a,c){return b.concat(Ya.call(a,c))}function nc(b,a){var c=2<arguments.length?Ya.call(arguments,2):[];return!B(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Xa(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Fd(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?c=u:Sa(a)?c="$WINDOW":a&&X===a?c="$DOCUMENT":Ta(a)&&
14
-(c="$SCOPE");return c}function Za(b,a){if("undefined"===typeof b)return u;Y(a)||(a=a?2:null);return JSON.stringify(b,Fd,a)}function oc(b){return z(b)?JSON.parse(b):b}function va(b){b=D(b).clone();try{b.empty()}catch(a){}var c=D("<div>").append(b).html();try{return b[0].nodeType===mb?Q(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+Q(b)})}catch(d){return Q(c)}}function pc(b){try{return decodeURIComponent(b)}catch(a){}}function qc(b){var a={},c,d;r((b||"").split("&"),function(b){b&&
15
-(c=b.replace(/\+/g,"%20").split("="),d=pc(c[0]),y(d)&&(b=y(c[1])?pc(c[1]):!0,rc.call(a,d)?x(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Nb(b){var a=[];r(b,function(b,d){x(b)?r(b,function(b){a.push(Ea(d,!0)+(!0===b?"":"="+Ea(b,!0)))}):a.push(Ea(d,!0)+(!0===b?"":"="+Ea(b,!0)))});return a.length?a.join("&"):""}function nb(b){return Ea(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Ea(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,
16
-":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Gd(b,a){var c,d,e=ob.length;b=D(b);for(d=0;d<e;++d)if(c=ob[d]+a,z(c=b.attr(c)))return c;return null}function Hd(b,a){var c,d,e={};r(ob,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});r(ob,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Gd(c,"strict-di"),a(c,d?[d]:[],e))}function sc(b,
17
-a,c){O(c)||(c={});c=G({strictDi:!1},c);var d=function(){b=D(b);if(b.injector()){var d=b[0]===X?"document":va(b);throw Wa("btstrpd",d.replace(/</,"&lt;").replace(/>/,"&gt;"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=Ob(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},
18
-e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;U&&e.test(U.name)&&(c.debugInfoEnabled=!0,U.name=U.name.replace(e,""));if(U&&!f.test(U.name))return d();U.name=U.name.replace(f,"");ha.resumeBootstrap=function(b){r(b,function(b){a.push(b)});d()}}function Id(){U.name="NG_ENABLE_DEBUG_INFO!"+U.name;U.location.reload()}function Jd(b){return ha.element(b).injector().get("$$testability")}function Pb(b,a){a=a||"_";return b.replace(Kd,function(b,d){return(d?a:"")+b.toLowerCase()})}function Ld(){var b;
19
-tc||((ra=U.jQuery)&&ra.fn.on?(D=ra,G(ra.fn,{scope:Ka.scope,isolateScope:Ka.isolateScope,controller:Ka.controller,injector:Ka.injector,inheritedData:Ka.inheritedData}),b=ra.cleanData,ra.cleanData=function(a){var c;if(Qb)Qb=!1;else for(var d=0,e;null!=(e=a[d]);d++)(c=ra._data(e,"events"))&&c.$destroy&&ra(e).triggerHandler("$destroy");b(a)}):D=R,ha.element=D,tc=!0)}function Rb(b,a,c){if(!b)throw Wa("areq",a||"?",c||"required");return b}function pb(b,a,c){c&&x(b)&&(b=b[b.length-1]);Rb(B(b),a,"not a function, got "+
20
-(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function La(b,a){if("hasOwnProperty"===b)throw Wa("badname",a);}function uc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g<f;g++)d=a[g],b&&(b=(e=b)[d]);return!c&&B(b)?nc(e,b):b}function qb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return D(c)}function ia(){return Object.create(null)}function Md(b){function a(a,b,c){return a[b]||(a[b]=c())}var c=A("$injector"),
21
-d=A("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||A;return a(b,"module",function(){var b={};return function(f,g,h){if("hasOwnProperty"===f)throw d("badname","module");g&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return t}}if(!g)throw c("nomod",f);var b=[],d=[],e=[],q=a("$injector","invoke","push",d),t={_invokeQueue:b,_configBlocks:d,_runBlocks:e,requires:g,name:f,provider:a("$provide","provider"),factory:a("$provide",
22
-"factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:q,run:function(a){e.push(a);return this}};h&&q(h);return t})}})}function Nd(b){G(b,{bootstrap:sc,copy:Da,extend:G,equals:ga,element:D,forEach:r,injector:Ob,noop:H,bind:nc,toJson:Za,fromJson:oc,identity:oa,isUndefined:C,
23
-isDefined:y,isString:z,isFunction:B,isObject:O,isNumber:Y,isElement:mc,isArray:x,version:Od,isDate:pa,lowercase:Q,uppercase:rb,callbacks:{counter:0},getTestability:Jd,$$minErr:A,$$csp:$a,reloadWithDebugInfo:Id});ab=Md(U);try{ab("ngLocale")}catch(a){ab("ngLocale",[]).provider("$locale",Pd)}ab("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Qd});a.provider("$compile",vc).directive({a:Rd,input:wc,textarea:wc,form:Sd,script:Td,select:Ud,style:Vd,option:Wd,ngBind:Xd,ngBindHtml:Yd,ngBindTemplate:Zd,
24
-ngClass:$d,ngClassEven:ae,ngClassOdd:be,ngCloak:ce,ngController:de,ngForm:ee,ngHide:fe,ngIf:ge,ngInclude:he,ngInit:ie,ngNonBindable:je,ngPluralize:ke,ngRepeat:le,ngShow:me,ngStyle:ne,ngSwitch:oe,ngSwitchWhen:pe,ngSwitchDefault:qe,ngOptions:re,ngTransclude:se,ngModel:te,ngList:ue,ngChange:ve,pattern:xc,ngPattern:xc,required:yc,ngRequired:yc,minlength:zc,ngMinlength:zc,maxlength:Ac,ngMaxlength:Ac,ngValue:we,ngModelOptions:xe}).directive({ngInclude:ye}).directive(sb).directive(Bc);a.provider({$anchorScroll:ze,
25
-$animate:Ae,$browser:Be,$cacheFactory:Ce,$controller:De,$document:Ee,$exceptionHandler:Fe,$filter:Cc,$interpolate:Ge,$interval:He,$http:Ie,$httpBackend:Je,$location:Ke,$log:Le,$parse:Me,$rootScope:Ne,$q:Oe,$$q:Pe,$sce:Qe,$sceDelegate:Re,$sniffer:Se,$templateCache:Te,$templateRequest:Ue,$$testability:Ve,$timeout:We,$window:Xe,$$rAF:Ye,$$asyncCallback:Ze,$$jqLite:$e})}])}function bb(b){return b.replace(af,function(a,b,d,e){return e?d.toUpperCase():d}).replace(bf,"Moz$1")}function Dc(b){b=b.nodeType;
26
-return b===na||!b||9===b}function Ec(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Sb.test(b)){c=c||e.appendChild(a.createElement("div"));d=(cf.exec(b)||["",""])[1].toLowerCase();d=ja[d]||ja._default;c.innerHTML=d[1]+b.replace(df,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=Xa(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";r(f,function(a){e.appendChild(a)});return e}function R(b){if(b instanceof R)return b;var a;z(b)&&(b=P(b),
27
-a=!0);if(!(this instanceof R)){if(a&&"<"!=b.charAt(0))throw Tb("nosel");return new R(b)}if(a){a=X;var c;b=(c=ef.exec(b))?[a.createElement(c[1])]:(c=Ec(b,a))?c.childNodes:[]}Fc(this,b)}function Ub(b){return b.cloneNode(!0)}function tb(b,a){a||ub(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)ub(c[d])}function Gc(b,a,c,d){if(y(d))throw Tb("offargs");var e=(d=vb(b))&&d.events,f=d&&d.handle;if(f)if(a)r(a.split(" "),function(a){if(y(c)){var d=e[a];Va(d||[],c);if(d&&0<
28
-d.length)return}b.removeEventListener(a,f,!1);delete e[a]});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,f,!1),delete e[a]}function ub(b,a){var c=b.ng339,d=c&&wb[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Gc(b)),delete wb[c],b.ng339=u))}function vb(b,a){var c=b.ng339,c=c&&wb[c];a&&!c&&(b.ng339=c=++ff,c=wb[c]={events:{},data:{},handle:u});return c}function Vb(b,a,c){if(Dc(b)){var d=y(c),e=!d&&a&&!O(a),f=!a;b=(b=vb(b,!e))&&b.data;if(d)b[a]=c;else{if(f)return b;
29
-if(e)return b&&b[a];G(b,a)}}}function xb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function yb(b,a){a&&b.setAttribute&&r(a.split(" "),function(a){b.setAttribute("class",P((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+P(a)+" "," ")))})}function zb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");r(a.split(" "),function(a){a=P(a);-1===c.indexOf(" "+a+" ")&&
30
-(c+=a+" ")});b.setAttribute("class",P(c))}}function Fc(b,a){if(a)if(a.nodeType)b[b.length++]=a;else{var c=a.length;if("number"===typeof c&&a.window!==a){if(c)for(var d=0;d<c;d++)b[b.length++]=a[d]}else b[b.length++]=a}}function Hc(b,a){return Ab(b,"$"+(a||"ngController")+"Controller")}function Ab(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=x(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=D.data(b,a[d]))!==u)return c;b=b.parentNode||11===b.nodeType&&b.host}}function Ic(b){for(tb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}
31
-function Jc(b,a){a||tb(b);var c=b.parentNode;c&&c.removeChild(b)}function gf(b,a){a=a||U;if("complete"===a.document.readyState)a.setTimeout(b);else D(a).on("load",b)}function Kc(b,a){var c=Bb[a.toLowerCase()];return c&&Lc[ua(b)]&&c}function hf(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Mc[a]}function jf(b,a){var c=function(c,e){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=a[e||c.type],g=f?f.length:0;if(g){if(C(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;
32
-c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=qa(f));for(var k=0;k<g;k++)c.isImmediatePropagationStopped()||f[k].call(b,c)}};c.elem=b;return c}function $e(){this.$get=function(){return G(R,{hasClass:function(b,a){b.attr&&(b=b[0]);return xb(b,a)},addClass:function(b,a){b.attr&&(b=b[0]);return zb(b,a)},removeClass:function(b,a){b.attr&&
33
-(b=b[0]);return yb(b,a)}})}}function Ma(b,a){var c=b&&b.$$hashKey;if(c)return"function"===typeof c&&(c=b.$$hashKey()),c;c=typeof b;return c="function"==c||"object"==c&&null!==b?b.$$hashKey=c+":"+(a||Dd)():c+":"+b}function cb(b,a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function kf(b){return(b=b.toString().replace(Nc,"").match(Oc))?"function("+(b[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function Wb(b,a,c){var d;if("function"===typeof b){if(!(d=b.$inject)){d=[];if(b.length){if(a)throw z(c)&&
34
-c||(c=b.name||kf(b)),Fa("strictdi",c);a=b.toString().replace(Nc,"");a=a.match(Oc);r(a[1].split(lf),function(a){a.replace(mf,function(a,b,c){d.push(c)})})}b.$inject=d}}else x(b)?(a=b.length-1,pb(b[a],"fn"),d=b.slice(0,a)):pb(b,"fn",!0);return d}function Ob(b,a){function c(a){return function(b,c){if(O(b))r(b,kc(a));else return a(b,c)}}function d(a,b){La(a,"service");if(B(b)||x(b))b=q.instantiate(b);if(!b.$get)throw Fa("pget",a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=s.invoke(b,
35
-this);if(C(c))throw Fa("undef",a);return c}}function f(a,b,c){return d(a,{$get:!1!==c?e(a,b):b})}function g(a){var b=[],c;r(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=q.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{z(a)?(c=ab(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):B(a)?b.push(q.invoke(a)):x(a)?b.push(q.invoke(a)):pb(a,"module")}catch(e){throw x(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&
36
-(e=e.message+"\n"+e.stack),Fa("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a,e){if(b.hasOwnProperty(a)){if(b[a]===k)throw Fa("cdep",a+" <- "+l.join(" <- "));return b[a]}try{return l.unshift(a),b[a]=k,b[a]=c(a,e)}catch(f){throw b[a]===k&&delete b[a],f;}finally{l.shift()}}function e(b,c,f,g){"string"===typeof f&&(g=f,f=null);var h=[],k=Wb(b,a,g),l,q,s;q=0;for(l=k.length;q<l;q++){s=k[q];if("string"!==typeof s)throw Fa("itkn",s);h.push(f&&f.hasOwnProperty(s)?f[s]:d(s,g))}x(b)&&
37
-(b=b[l]);return b.apply(c,h)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((x(a)?a[a.length-1]:a).prototype);a=e(a,d,b,c);return O(a)||B(a)?a:d},get:d,annotate:Wb,has:function(a){return p.hasOwnProperty(a+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var k={},l=[],m=new cb([],!0),p={$provide:{provider:c(d),factory:c(f),service:c(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:c(function(a,b){return f(a,ca(b),!1)}),constant:c(function(a,b){La(a,
38
-"constant");p[a]=b;t[a]=b}),decorator:function(a,b){var c=q.get(a+"Provider"),d=c.$get;c.$get=function(){var a=s.invoke(d,c);return s.invoke(b,null,{$delegate:a})}}}},q=p.$injector=h(p,function(a,b){ha.isString(b)&&l.push(b);throw Fa("unpr",l.join(" <- "));}),t={},s=t.$injector=h(t,function(a,b){var c=q.get(a+"Provider",b);return s.invoke(c.$get,c,u,a)});r(g(b),function(a){s.invoke(a||H)});return s}function ze(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location",
39
-"$rootScope",function(a,c,d){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ua(a))return b=a,!0});return b}function f(b){if(b){b.scrollIntoView();var c;c=g.yOffset;B(c)?c=c():mc(c)?(c=c[0],c="fixed"!==a.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Y(c)||(c=0);c&&(b=b.getBoundingClientRect().top,a.scrollBy(0,b-c))}else a.scrollTo(0,0)}function g(){var a=c.hash(),b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}
40
-var h=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&""===a||gf(function(){d.$evalAsync(g)})});return g}]}function Ze(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:function(b){return a(b,0,!1)}}]}function nf(b,a,c,d){function e(a){try{a.apply(null,Ya.call(arguments,1))}finally{if(v--,0===v)for(;w.length;)try{w.pop()()}catch(b){c.error(b)}}}function f(a,b){(function Aa(){r(K,function(a){a()});E=b(Aa,a)})()}function g(){h();k()}function h(){J=
41
-b.history.state;J=C(J)?null:J;ga(J,S)&&(J=S);S=J}function k(){if(F!==m.url()||L!==J)F=m.url(),L=J,r(W,function(a){a(m.url(),J)})}function l(a){try{return decodeURIComponent(a)}catch(b){return a}}var m=this,p=a[0],q=b.location,t=b.history,s=b.setTimeout,N=b.clearTimeout,n={};m.isMock=!1;var v=0,w=[];m.$$completeOutstandingRequest=e;m.$$incOutstandingRequestCount=function(){v++};m.notifyWhenNoOutstandingRequests=function(a){r(K,function(a){a()});0===v?a():w.push(a)};var K=[],E;m.addPollFn=function(a){C(E)&&
42
-f(100,s);K.push(a);return a};var J,L,F=q.href,da=a.find("base"),I=null;h();L=J;m.url=function(a,c,e){C(e)&&(e=null);q!==b.location&&(q=b.location);t!==b.history&&(t=b.history);if(a){var f=L===e;if(F===a&&(!d.history||f))return m;var g=F&&Ga(F)===Ga(a);F=a;L=e;!d.history||g&&f?(g||(I=a),c?q.replace(a):g?(c=q,e=a.indexOf("#"),a=-1===e?"":a.substr(e+1),c.hash=a):q.href=a):(t[c?"replaceState":"pushState"](e,"",a),h(),L=J);return m}return I||q.href.replace(/%27/g,"'")};m.state=function(){return J};var W=
43
-[],ba=!1,S=null;m.onUrlChange=function(a){if(!ba){if(d.history)D(b).on("popstate",g);D(b).on("hashchange",g);ba=!0}W.push(a);return a};m.$$checkUrlChange=k;m.baseHref=function(){var a=da.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var aa={},y="",ea=m.baseHref();m.cookies=function(a,b){var d,e,f,g;if(a)b===u?p.cookie=encodeURIComponent(a)+"=;path="+ea+";expires=Thu, 01 Jan 1970 00:00:00 GMT":z(b)&&(d=(p.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+";path="+ea).length+
44
-1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(p.cookie!==y)for(y=p.cookie,d=y.split("; "),aa={},f=0;f<d.length;f++)e=d[f],g=e.indexOf("="),0<g&&(a=l(e.substring(0,g)),aa[a]===u&&(aa[a]=l(e.substring(g+1))));return aa}};m.defer=function(a,b){var c;v++;c=s(function(){delete n[c];e(a)},b||0);n[c]=!0;return c};m.defer.cancel=function(a){return n[a]?(delete n[a],N(a),e(H),!0):!1}}function Be(){this.$get=["$window","$log","$sniffer",
45
-"$document",function(b,a,c,d){return new nf(b,d,a,c)}]}function Ce(){this.$get=function(){function b(b,d){function e(a){a!=p&&(q?q==a&&(q=a.n):q=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw A("$cacheFactory")("iid",b);var g=0,h=G({},d,{id:b}),k={},l=d&&d.capacity||Number.MAX_VALUE,m={},p=null,q=null;return a[b]={put:function(a,b){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}if(!C(b))return a in k||g++,k[a]=b,g>l&&this.remove(q.key),b},get:function(a){if(l<
46
-Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b==p&&(p=b.p);b==q&&(q=b.n);f(b.n,b.p);delete m[a]}delete k[a];g--},removeAll:function(){k={};g=0;m={};p=q=null},destroy:function(){m=h=k=null;delete a[b]},info:function(){return G({},h,{size:g})}}}var a={};b.info=function(){var b={};r(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function Te(){this.$get=["$cacheFactory",function(b){return b("templates")}]}
47
-function vc(b,a){function c(a,b){var c=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,d={};r(a,function(a,e){var f=a.match(c);if(!f)throw ka("iscp",b,e,a);d[e]={mode:f[1][0],collection:"*"===f[2],optional:"?"===f[3],attrName:f[4]||e}});return d}var d={},e=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,f=/(([\w\-]+)(?:\:([^;]+))?;?)/,g=Ed("ngSrc,ngSrcset,src,srcset"),h=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,k=/^(on[a-z]+|formaction)$/;this.directive=function p(a,e){La(a,"directive");z(a)?(Rb(e,"directiveFactory"),d.hasOwnProperty(a)||
48
-(d[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,e){var f=[];r(d[a],function(d,g){try{var h=b.invoke(d);B(h)?h={compile:ca(h)}:!h.compile&&h.link&&(h.compile=ca(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||a;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";O(h.scope)&&(h.$$isolateBindings=c(h.scope,h.name));f.push(h)}catch(k){e(k)}});return f}])),d[a].push(e)):r(a,kc(p));return this};this.aHrefSanitizationWhitelist=function(b){return y(b)?
49
-(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};var l=!0;this.debugInfoEnabled=function(a){return y(a)?(l=a,this):l};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,s,N,n,v,w,K,E,J){function L(a,b){try{a.addClass(b)}catch(c){}}
50
-function F(a,b,c,d,e){a instanceof D||(a=D(a));r(a,function(b,c){b.nodeType==mb&&b.nodeValue.match(/\S+/)&&(a[c]=D(b).wrap("<span></span>").parent()[0])});var f=da(a,b,a,c,d,e);F.$$addScopeClass(a);var g=null;return function(b,c,d){Rb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ua(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?D(U(g,D("<div>").append(a).html())):
51
-c?Ka.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);F.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function da(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,q,s,n,w;if(p)for(w=Array(c.length),q=0;q<h.length;q+=3)f=h[q],w[f]=c[f];else w=c;q=0;for(s=h.length;q<s;)k=w[h[q++]],c=h[q++],f=h[q++],c?(c.scope?(l=a.$new(),F.$$addScopeInfo(D(k),l)):l=a,n=c.transcludeOnThisElement?I(a,c.transclude,e,c.elementTranscludeOnThisElement):!c.templateOnThisElement&&e?e:!e&&b?I(a,
52
-b):null,c(f,l,k,d,n)):f&&f(a,k.childNodes,u,e)}for(var h=[],k,l,q,s,p,n=0;n<a.length;n++){k=new V;l=W(a[n],[],k,0===n?d:u,e);(f=l.length?aa(l,a[n],k,b,c,null,[],[],f):null)&&f.scope&&F.$$addScopeClass(k.$$element);k=f&&f.terminal||!(q=a[n].childNodes)||!q.length?null:da(q,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(n,f,k),s=!0,p=p||f;f=null}return s?g:null}function I(a,b,c,d){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,
53
-{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function W(b,c,g,h,k){var l=g.$attr,q;switch(b.nodeType){case na:ea(c,wa(ua(b)),"E",h,k);for(var s,n,w,N=b.attributes,K=0,t=N&&N.length;K<t;K++){var J=!1,v=!1;s=N[K];q=s.name;s=P(s.value);n=wa(q);if(w=Ha.test(n))q=Pb(n.substr(6),"-");var L=n.replace(/(Start|End)$/,""),E;a:{var F=L;if(d.hasOwnProperty(F)){E=void 0;for(var F=a.get(F+"Directive"),W=0,r=F.length;W<r;W++)if(E=F[W],E.multiElement){E=!0;break a}}E=!1}E&&n===L+"Start"&&
54
-(J=q,v=q.substr(0,q.length-5)+"end",q=q.substr(0,q.length-6));n=wa(q.toLowerCase());l[n]=q;if(w||!g.hasOwnProperty(n))g[n]=s,Kc(b,n)&&(g[n]=!0);R(b,c,s,n,w);ea(c,n,"A",h,k,J,v)}b=b.className;if(z(b)&&""!==b)for(;q=f.exec(b);)n=wa(q[2]),ea(c,n,"C",h,k)&&(g[n]=P(q[3])),b=b.substr(q.index+q[0].length);break;case mb:T(c,b.nodeValue);break;case 8:try{if(q=e.exec(b.nodeValue))n=wa(q[1]),ea(c,n,"M",h,k)&&(g[n]=P(q[2]))}catch(da){}}c.sort(A);return c}function ba(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&
55
-a.hasAttribute(b)){do{if(!a)throw ka("uterdir",b,c);a.nodeType==na&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return D(d)}function S(a,b,c){return function(d,e,f,g,h){e=ba(e[0],b,c);return a(d,e,f,g,h)}}function aa(a,d,e,f,g,k,l,s,p){function w(a,b,c,d){if(a){c&&(a=S(a,c,d));a.require=M.require;a.directiveName=fa;if(I===M||M.$$isolateScope)a=Y(a,{isolateScope:!0});l.push(a)}if(b){c&&(b=S(b,c,d));b.require=M.require;b.directiveName=fa;if(I===
56
-M||M.$$isolateScope)b=Y(b,{isolateScope:!0});s.push(b)}}function K(a,b,c,d){var e,f="data",g=!1,k=c,l;if(z(b)){l=b.match(h);b=b.substring(l[0].length);l[3]&&(l[1]?l[3]=null:l[1]=l[3]);"^"===l[1]?f="inheritedData":"^^"===l[1]&&(f="inheritedData",k=c.parent());"?"===l[2]&&(g=!0);e=null;d&&"data"===f&&(e=d[b])&&(e=e.instance);e=e||k[f]("$"+b+"Controller");if(!e&&!g)throw ka("ctreq",b,a);return e||null}x(b)&&(e=[],r(b,function(b){e.push(K(a,b,c,d))}));return e}function J(a,c,f,g,h){function k(a,b,c){var d;
57
-Ta(a)||(c=b,b=a,a=u);ya&&(d=L);c||(c=ya?W.parent():W);return h(a,b,d,c,Xb)}var p,w,t,v,L,db,W,S;d===f?(S=e,W=e.$$element):(W=D(f),S=new V(W,e));I&&(v=c.$new(!0));h&&(db=k,db.$$boundTransclude=h);E&&(da={},L={},r(E,function(a){var b={$scope:a===I||a.$$isolateScope?v:c,$element:W,$attrs:S,$transclude:db};t=a.controller;"@"==t&&(t=S[a.name]);b=n(t,b,!0,a.controllerAs);L[a.name]=b;ya||W.data("$"+a.name+"Controller",b.instance);da[a.name]=b}));if(I){F.$$addScopeInfo(W,v,!0,!(aa&&(aa===I||aa===I.$$originalDirective)));
58
-F.$$addScopeClass(W,!0);g=da&&da[I.name];var ba=v;g&&g.identifier&&!0===I.bindToController&&(ba=g.instance);r(v.$$isolateBindings=I.$$isolateBindings,function(a,d){var e=a.attrName,f=a.optional,g,h,k,l;switch(a.mode){case "@":S.$observe(e,function(a){ba[d]=a});S.$$observers[e].$$scope=c;S[e]&&(ba[d]=b(S[e])(c));break;case "=":if(f&&!S[e])break;h=N(S[e]);l=h.literal?ga:function(a,b){return a===b||a!==a&&b!==b};k=h.assign||function(){g=ba[d]=h(c);throw ka("nonassign",S[e],I.name);};g=ba[d]=h(c);f=function(a){l(a,
59
-ba[d])||(l(a,g)?k(c,a=ba[d]):ba[d]=a);return g=a};f.$stateful=!0;f=a.collection?c.$watchCollection(S[e],f):c.$watch(N(S[e],f),null,h.literal);v.$on("$destroy",f);break;case "&":h=N(S[e]),ba[d]=function(a){return h(c,a)}}})}da&&(r(da,function(a){a()}),da=null);g=0;for(p=l.length;g<p;g++)w=l[g],Z(w,w.isolateScope?v:c,W,S,w.require&&K(w.directiveName,w.require,W,L),db);var Xb=c;I&&(I.template||null===I.templateUrl)&&(Xb=v);a&&a(Xb,f.childNodes,u,h);for(g=s.length-1;0<=g;g--)w=s[g],Z(w,w.isolateScope?
60
-v:c,W,S,w.require&&K(w.directiveName,w.require,W,L),db)}p=p||{};for(var v=-Number.MAX_VALUE,L,E=p.controllerDirectives,da,I=p.newIsolateScopeDirective,aa=p.templateDirective,ea=p.nonTlbTranscludeDirective,H=!1,G=!1,ya=p.hasElementTranscludeDirective,T=e.$$element=D(d),M,fa,A,Ha=f,Q,xa=0,R=a.length;xa<R;xa++){M=a[xa];var Cb=M.$$start,$=M.$$end;Cb&&(T=ba(d,Cb,$));A=u;if(v>M.priority)break;if(A=M.scope)M.templateUrl||(O(A)?(Aa("new/isolated scope",I||L,M,T),I=M):Aa("new/isolated scope",I,M,T)),L=L||
61
-M;fa=M.name;!M.templateUrl&&M.controller&&(A=M.controller,E=E||{},Aa("'"+fa+"' controller",E[fa],M,T),E[fa]=M);if(A=M.transclude)H=!0,M.$$tlb||(Aa("transclusion",ea,M,T),ea=M),"element"==A?(ya=!0,v=M.priority,A=T,T=e.$$element=D(X.createComment(" "+fa+": "+e[fa]+" ")),d=T[0],Db(g,Ya.call(A,0),d),Ha=F(A,f,v,k&&k.name,{nonTlbTranscludeDirective:ea})):(A=D(Ub(d)).contents(),T.empty(),Ha=F(A,f));if(M.template)if(G=!0,Aa("template",aa,M,T),aa=M,A=B(M.template)?M.template(T,e):M.template,A=Pc(A),M.replace){k=
62
-M;A=Sb.test(A)?Qc(U(M.templateNamespace,P(A))):[];d=A[0];if(1!=A.length||d.nodeType!==na)throw ka("tplrt",fa,"");Db(g,T,d);R={$attr:{}};A=W(d,[],R);var pf=a.splice(xa+1,a.length-(xa+1));I&&y(A);a=a.concat(A).concat(pf);C(e,R);R=a.length}else T.html(A);if(M.templateUrl)G=!0,Aa("template",aa,M,T),aa=M,M.replace&&(k=M),J=of(a.splice(xa,a.length-xa),T,e,g,H&&Ha,l,s,{controllerDirectives:E,newIsolateScopeDirective:I,templateDirective:aa,nonTlbTranscludeDirective:ea}),R=a.length;else if(M.compile)try{Q=
63
-M.compile(T,e,Ha),B(Q)?w(null,Q,Cb,$):Q&&w(Q.pre,Q.post,Cb,$)}catch(ca){c(ca,va(T))}M.terminal&&(J.terminal=!0,v=Math.max(v,M.priority))}J.scope=L&&!0===L.scope;J.transcludeOnThisElement=H;J.elementTranscludeOnThisElement=ya;J.templateOnThisElement=G;J.transclude=Ha;p.hasElementTranscludeDirective=ya;return J}function y(a){for(var b=0,c=a.length;b<c;b++){var d=b,e;e=G(Object.create(a[b]),{$$isolateScope:!0});a[d]=e}}function ea(b,e,f,g,h,k,l){if(e===h)return null;h=null;if(d.hasOwnProperty(e)){var q;
64
-e=a.get(e+"Directive");for(var s=0,n=e.length;s<n;s++)try{if(q=e[s],(g===u||g>q.priority)&&-1!=q.restrict.indexOf(f)){if(k){var w={$$start:k,$$end:l};q=G(Object.create(q),w)}b.push(q);h=q}}catch(N){c(N)}}return h}function C(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(L(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+
65
-b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function of(a,b,c,d,e,f,g,h){var k=[],l,q,p=b[0],n=a.shift(),w=G({},n,{templateUrl:null,transclude:null,replace:null,$$originalDirective:n}),N=B(n.templateUrl)?n.templateUrl(b,c):n.templateUrl,t=n.templateNamespace;b.empty();s(K.getTrustedResourceUrl(N)).then(function(s){var K,v;s=Pc(s);if(n.replace){s=Sb.test(s)?Qc(U(t,P(s))):[];K=s[0];if(1!=s.length||K.nodeType!==na)throw ka("tplrt",n.name,N);s={$attr:{}};
66
-Db(d,b,K);var J=W(K,[],s);O(n.scope)&&y(J);a=J.concat(a);C(c,s)}else K=p,b.html(s);a.unshift(w);l=aa(a,K,c,e,b,n,f,g,h);r(d,function(a,c){a==K&&(d[c]=b[0])});for(q=da(b[0].childNodes,e);k.length;){s=k.shift();v=k.shift();var E=k.shift(),F=k.shift(),J=b[0];if(!s.$$destroyed){if(v!==p){var S=v.className;h.hasElementTranscludeDirective&&n.replace||(J=Ub(K));Db(E,D(v),J);L(D(J),S)}v=l.transcludeOnThisElement?I(s,l.transclude,F):F;l(q,s,J,d,v)}}k=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(k?
67
-k.push(b,c,d,a):(l.transcludeOnThisElement&&(a=I(b,l.transclude,e)),l(q,b,c,d,a)))}}function A(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Aa(a,b,c,d){if(b)throw ka("multidir",b.name,c.name,a,va(d));}function T(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&F.$$addBindingClass(a);return function(a,c){var e=c.parent();b||F.$$addBindingClass(e);F.$$addBindingInfo(e,d.expressions);a.$watch(d,
68
-function(a){c[0].nodeValue=a})}}})}function U(a,b){a=Q(a||"html");switch(a){case "svg":case "math":var c=X.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function xa(a,b){if("srcdoc"==b)return K.HTML;var c=ua(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return K.RESOURCE_URL}function R(a,c,d,e,f){var h=b(d,!0);if(h){if("multiple"===e&&"select"===ua(a))throw ka("selmulti",va(a));c.push({priority:100,compile:function(){return{pre:function(c,
69
-d,l){d=l.$$observers||(l.$$observers={});if(k.test(e))throw ka("nodomevents");l[e]&&(h=b(l[e],!0,xa(a,e),g[e]||f))&&(l[e]=h(c),(d[e]||(d[e]=[])).$$inter=!0,(l.$$observers&&l.$$observers[e].$$scope||c).$watch(h,function(a,b){"class"===e&&a!=b?l.$updateClass(a,b):l.$set(e,a)}))}}}})}}function Db(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=
70
-c);break}f&&f.replaceChild(c,d);a=X.createDocumentFragment();a.appendChild(d);D(c).data(D(d).data());ra?(Qb=!0,ra.cleanData([d])):delete D.cache[d[D.expando]];d=1;for(e=b.length;d<e;d++)f=b[d],D(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function Y(a,b){return G(function(){return a.apply(null,arguments)},a,b)}function Z(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,va(d))}}var V=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr=
71
-{};this.$$element=a};V.prototype={$normalize:wa,$addClass:function(a){a&&0<a.length&&E.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&E.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Rc(a,b);c&&c.length&&E.addClass(this.$$element,c);(c=Rc(b,a))&&c.length&&E.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g=Kc(f,a),h=hf(f,a),f=a;g?(this.$$element.prop(a,b),e=g):h&&(this[h]=b,f=h);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=
72
-e=Pb(a,"-"));g=ua(this.$$element);if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=J(b,"src"===a);else if("img"===g&&"srcset"===a){for(var g="",h=P(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(h)?k:/(,)/,h=h.split(k),k=Math.floor(h.length/2),l=0;l<k;l++)var q=2*l,g=g+J(P(h[q]),!0),g=g+(" "+P(h[q+1]));h=P(h[2*l]).split(/\s/);g+=J(P(h[0]),!0);2===h.length&&(g+=" "+P(h[1]));this[a]=b=g}!1!==d&&(null===b||b===u?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&
73
-r(a[f],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=ia()),e=d[a]||(d[a]=[]);e.push(b);v.$evalAsync(function(){!e.$$inter&&c.hasOwnProperty(a)&&b(c[a])});return function(){Va(e,b)}}};var ya=b.startSymbol(),fa=b.endSymbol(),Pc="{{"==ya||"}}"==fa?oa:function(a){return a.replace(/\{\{/g,ya).replace(/}}/g,fa)},Ha=/^ngAttr[A-Z]/;F.$$addBindingInfo=l?function(a,b){var c=a.data("$binding")||[];x(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:H;
74
-F.$$addBindingClass=l?function(a){L(a,"ng-binding")}:H;F.$$addScopeInfo=l?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:H;F.$$addScopeClass=l?function(a,b){L(a,b?"ng-isolate-scope":"ng-scope")}:H;return F}]}function wa(b){return bb(b.replace(qf,""))}function Rc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),f=0;a:for(;f<d.length;f++){for(var g=d[f],h=0;h<e.length;h++)if(g==e[h])continue a;c+=(0<c.length?" ":"")+g}return c}function Qc(b){b=D(b);var a=b.length;
75
-if(1>=a)return b;for(;a--;)8===b[a].nodeType&&rf.call(b,a,1);return b}function De(){var b={},a=!1,c=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,c){La(a,"controller");O(a)?G(b,a):b[a]=c};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(d,e){function f(a,b,c,d){if(!a||!O(a.$scope))throw A("$controller")("noscp",d,b);a.$scope[b]=c}return function(g,h,k,l){var m,p,q;k=!0===k;l&&z(l)&&(q=l);z(g)&&(l=g.match(c),p=l[1],q=q||l[3],g=b.hasOwnProperty(p)?b[p]:uc(h.$scope,p,
76
-!0)||(a?uc(e,p,!0):u),pb(g,p,!0));if(k)return k=(x(g)?g[g.length-1]:g).prototype,m=Object.create(k),q&&f(h,q,m,p||g.name),G(function(){d.invoke(g,m,h,p);return m},{instance:m,identifier:q});m=d.instantiate(g,h,p);q&&f(h,q,m,p||g.name);return m}}]}function Ee(){this.$get=["$window",function(b){return D(b.document)}]}function Fe(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Yb(b,a){if(z(b)){b=b.replace(sf,"");var c=a("Content-Type");if(c&&0===c.indexOf(Sc)&&
77
-b.trim()||tf.test(b)&&uf.test(b))b=oc(b)}return b}function Tc(b){var a=ia(),c,d,e;if(!b)return a;r(b.split("\n"),function(b){e=b.indexOf(":");c=Q(P(b.substr(0,e)));d=P(b.substr(e+1));c&&(a[c]=a[c]?a[c]+", "+d:d)});return a}function Uc(b){var a=O(b)?b:u;return function(c){a||(a=Tc(b));return c?(c=a[Q(c)],void 0===c&&(c=null),c):a}}function Vc(b,a,c){if(B(c))return c(b,a);r(c,function(c){b=c(b,a)});return b}function Ie(){var b=this.defaults={transformResponse:[Yb],transformRequest:[function(a){return O(a)&&
78
-"[object File]"!==Ja.call(a)&&"[object Blob]"!==Ja.call(a)?Za(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:qa(Zb),put:qa(Zb),patch:qa(Zb)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},a=!1;this.useApplyAsync=function(b){return y(b)?(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,k){function l(a){function c(a){var b=G({},a);b.data=a.data?Vc(a.data,a.headers,d.transformResponse):
79
-a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}var d={method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse},e=function(a){var c=b.headers,d=G({},a.headers),e,f,c=G({},c.common,c[Q(a.method)]);a:for(e in c){a=Q(e);for(f in d)if(Q(f)===a)continue a;d[e]=c[e]}(function(a){var b;r(a,function(c,d){B(c)&&(b=c(),null!=b?a[d]=b:delete a[d])})})(d);return d}(a);if(!ha.isObject(a))throw A("$http")("badreq",a);G(d,a);d.headers=e;d.method=rb(d.method);var f=[function(a){e=
80
-a.headers;var d=Vc(a.data,Uc(e),a.transformRequest);C(d)&&r(e,function(a,b){"content-type"===Q(b)&&delete e[b]});C(a.withCredentials)&&!C(b.withCredentials)&&(a.withCredentials=b.withCredentials);return m(a,d,e).then(c,c)},u],g=h.when(d);for(r(t,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),g=g.then(a,k)}g.success=function(a){g.then(function(b){a(b.data,b.status,
81
-b.headers,d)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,d)});return g};return g}function m(c,f,k){function m(b,c,d,e){function f(){w(c,b,d,e)}F&&(200<=b&&300>b?F.put(I,[b,c,Tc(d),e]):F.remove(I));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function w(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?J.resolve:J.reject)({data:a,status:b,headers:Uc(d),config:c,statusText:e})}function t(a){w(a.data,a.status,qa(a.headers()),a.statusText)}function E(){var a=l.pendingRequests.indexOf(c);
82
--1!==a&&l.pendingRequests.splice(a,1)}var J=h.defer(),L=J.promise,F,r,I=p(c.url,c.params);l.pendingRequests.push(c);L.then(E,E);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(F=O(c.cache)?c.cache:O(b.cache)?b.cache:q);F&&(r=F.get(I),y(r)?r&&B(r.then)?r.then(t,t):x(r)?w(r[1],r[0],qa(r[2]),r[3]):w(r,200,{},"OK"):F.put(I,L));C(r)&&((r=Wc(c.url)?e.cookies()[c.xsrfCookieName||b.xsrfCookieName]:u)&&(k[c.xsrfHeaderName||b.xsrfHeaderName]=r),d(c.method,I,f,m,k,c.timeout,c.withCredentials,
83
-c.responseType));return L}function p(a,b){if(!b)return a;var c=[];Cd(b,function(a,b){null===a||C(a)||(x(a)||(a=[a]),r(a,function(a){O(a)&&(a=pa(a)?a.toISOString():Za(a));c.push(Ea(b)+"="+Ea(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var q=f("$http"),t=[];r(c,function(a){t.unshift(z(a)?k.get(a):k.invoke(a))});l.pendingRequests=[];(function(a){r(arguments,function(a){l[a]=function(b,c){return l(G(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,
84
-function(a){l[a]=function(b,c,d){return l(G(d||{},{method:a,url:b,data:c}))}})})("post","put","patch");l.defaults=b;return l}]}function vf(){return new U.XMLHttpRequest}function Je(){this.$get=["$browser","$window","$document",function(b,a,c){return wf(b,vf,b.defer,a.angular.callbacks,c[0])}]}function wf(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m,!1);f.removeEventListener("error",m,!1);
85
-e.body.removeChild(f);f=null;var g=-1,t="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),t=a.type,g="error"===a.type?404:200);c&&c(g,t)};f.addEventListener("load",m,!1);f.addEventListener("error",m,!1);e.body.appendChild(f);return m}return function(e,h,k,l,m,p,q,t){function s(){v&&v();w&&w.abort()}function N(a,d,e,f,g){E!==u&&c.cancel(E);v=w=null;a(d,e,f,g);b.$$completeOutstandingRequest(H)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==Q(e)){var n="_"+(d.counter++).toString(36);
86
-d[n]=function(a){d[n].data=a;d[n].called=!0};var v=f(h.replace("JSON_CALLBACK","angular.callbacks."+n),n,function(a,b){N(l,a,d[n].data,"",b);d[n]=H})}else{var w=a();w.open(e,h,!0);r(m,function(a,b){y(a)&&w.setRequestHeader(b,a)});w.onload=function(){var a=w.statusText||"",b="response"in w?w.response:w.responseText,c=1223===w.status?204:w.status;0===c&&(c=b?200:"file"==Ba(h).protocol?404:0);N(l,c,b,w.getAllResponseHeaders(),a)};e=function(){N(l,-1,null,null,"")};w.onerror=e;w.onabort=e;q&&(w.withCredentials=
87
-!0);if(t)try{w.responseType=t}catch(K){if("json"!==t)throw K;}w.send(k||null)}if(0<p)var E=c(s,p);else p&&B(p.then)&&p.then(s)}}function Ge(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function f(a){return"\\\\\\"+a}function g(f,g,t,s){function N(c){return c.replace(l,b).replace(m,a)}function n(a){try{var b=a;a=t?e.getTrusted(t,b):e.valueOf(b);var c;if(s&&!y(a))c=
88
-a;else if(null==a)c="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=Za(a)}c=a}return c}catch(g){c=$b("interr",f,g.toString()),d(c)}}s=!!s;for(var v,w,K=0,E=[],J=[],L=f.length,F=[],r=[];K<L;)if(-1!=(v=f.indexOf(b,K))&&-1!=(w=f.indexOf(a,v+h)))K!==v&&F.push(N(f.substring(K,v))),K=f.substring(v+h,w),E.push(K),J.push(c(K,n)),K=w+k,r.push(F.length),F.push("");else{K!==L&&F.push(N(f.substring(K)));break}if(t&&1<F.length)throw $b("noconcat",f);if(!g||E.length){var I=function(a){for(var b=
89
-0,c=E.length;b<c;b++){if(s&&C(a[b]))return;F[r[b]]=a[b]}return F.join("")};return G(function(a){var b=0,c=E.length,e=Array(c);try{for(;b<c;b++)e[b]=J[b](a);return I(e)}catch(g){a=$b("interr",f,g.toString()),d(a)}},{exp:f,expressions:E,$$watchDelegate:function(a,b,c){var d;return a.$watchGroup(J,function(c,e){var f=I(c);B(b)&&b.call(this,f,c!==e?d:f,a);d=f},c)}})}}var h=b.length,k=a.length,l=new RegExp(b.replace(/./g,f),"g"),m=new RegExp(a.replace(/./g,f),"g");g.startSymbol=function(){return b};g.endSymbol=
90
-function(){return a};return g}]}function He(){this.$get=["$rootScope","$window","$q","$$q",function(b,a,c,d){function e(e,h,k,l){var m=a.setInterval,p=a.clearInterval,q=0,t=y(l)&&!l,s=(t?d:c).defer(),N=s.promise;k=y(k)?k:0;N.then(null,null,e);N.$$intervalId=m(function(){s.notify(q++);0<k&&q>=k&&(s.resolve(q),p(N.$$intervalId),delete f[N.$$intervalId]);t||b.$apply()},h);f[N.$$intervalId]=s;return N}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),
91
-delete f[b.$$intervalId],!0):!1};return e}]}function Pd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
92
-DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function ac(b){b=b.split("/");for(var a=b.length;a--;)b[a]=nb(b[a]);return b.join("/")}function Xc(b,a){var c=Ba(b);a.$$protocol=
93
-c.protocol;a.$$host=c.hostname;a.$$port=$(c.port)||xf[c.protocol]||null}function Yc(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Ba(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=qc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function za(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ga(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Zc(b){return b.replace(/(#.+)|#$/,
94
-"$1")}function bc(b){return b.substr(0,Ga(b).lastIndexOf("/")+1)}function cc(b,a){this.$$html5=!0;a=a||"";var c=bc(b);Xc(b,this);this.$$parse=function(a){var b=za(c,a);if(!z(b))throw Eb("ipthprfx",a,c);Yc(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Nb(this.$$search),b=this.$$hash?"#"+nb(this.$$hash):"";this.$$url=ac(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),
95
-!0;var f,g;(f=za(b,d))!==u?(g=f,g=(f=za(a,f))!==u?c+(za("/",f)||f):b+g):(f=za(c,d))!==u?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function dc(b,a){var c=bc(b);Xc(b,this);this.$$parse=function(d){d=za(b,d)||za(c,d);var e;"#"===d.charAt(0)?(e=za(a,d),C(e)&&(e=d)):e=this.$$html5?d:"";Yc(e,this);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Nb(this.$$search),e=this.$$hash?
96
-"#"+nb(this.$$hash):"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ga(b)==Ga(a)?(this.$$parse(a),!0):!1}}function $c(b,a){this.$$html5=!0;dc.apply(this,arguments);var c=bc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ga(d)?f=d:(g=za(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c=Nb(this.$$search),e=this.$$hash?"#"+nb(this.$$hash):
97
-"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Fb(b){return function(){return this[b]}}function ad(b,a){return function(c){if(C(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Ke(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return Ua(b)?(a.enabled=b,this):O(b)?(Ua(b.enabled)&&(a.enabled=b.enabled),Ua(b.requireBase)&&(a.requireBase=b.requireBase),Ua(b.rewriteLinks)&&
98
-(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function h(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,l;l=d.baseHref();var m=d.url(),p;if(a.enabled){if(!l&&a.requireBase)throw Eb("nobase");p=m.substring(0,m.indexOf("/",m.indexOf("//")+2))+(l||"/");l=e.history?cc:$c}else p=Ga(m),
99
-l=dc;k=new l(p,"#"+b);k.$$parseLinkUrl(m,m);k.$$state=d.state();var q=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&2!=b.which){for(var e=D(b.target);"a"!==ua(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href"),h=e.attr("href")||e.attr("xlink:href");O(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=Ba(g.animVal).href);q.test(g)||!g||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(g,h)||(b.preventDefault(),k.absUrl()!=
100
-d.url()&&(c.$apply(),U.angular["ff-684208-preventDefault"]=!0))}});k.absUrl()!=m&&d.url(k.absUrl(),!0);var t=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,g(d,!1,e)):(t=!1,h(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a=Zc(d.url()),b=Zc(k.absUrl()),f=d.state(),l=k.$$replace,q=a!==b||k.$$html5&&e.history&&f!==k.$$state;
101
-if(t||q)t=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(q&&g(b,l,f===k.$$state?null:k.$$state),h(a,f)))});k.$$replace=!1});return k}]}function Le(){var b=!0,a=this;this.debugEnabled=function(a){return y(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&
102
-(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||H;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];r(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function sa(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===
103
-b||"__proto__"===b)throw la("isecfld",a);return b}function ta(b,a){if(b){if(b.constructor===b)throw la("isecfn",a);if(b.window===b)throw la("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw la("isecdom",a);if(b===Object)throw la("isecobj",a);}return b}function ec(b){return b.constant}function Na(b,a,c,d){ta(b,d);a=a.split(".");for(var e,f=0;1<a.length;f++){e=sa(a.shift(),d);var g=ta(b[e],d);g||(g={},b[e]=g);b=g}e=sa(a.shift(),d);ta(b[e],d);return b[e]=c}function Oa(b){return"constructor"==
104
-b}function bd(b,a,c,d,e,f,g){sa(b,f);sa(a,f);sa(c,f);sa(d,f);sa(e,f);var h=function(a){return ta(a,f)},k=g||Oa(b)?h:oa,l=g||Oa(a)?h:oa,m=g||Oa(c)?h:oa,p=g||Oa(d)?h:oa,q=g||Oa(e)?h:oa;return function(f,g){var h=g&&g.hasOwnProperty(b)?g:f;if(null==h)return h;h=k(h[b]);if(!a)return h;if(null==h)return u;h=l(h[a]);if(!c)return h;if(null==h)return u;h=m(h[c]);if(!d)return h;if(null==h)return u;h=p(h[d]);return e?null==h?u:h=q(h[e]):h}}function yf(b,a){return function(c,d){return b(c,d,ta,a)}}function cd(b,
105
-a,c){var d=a.expensiveChecks,e=d?zf:Af,f=e[b];if(f)return f;var g=b.split("."),h=g.length;if(a.csp)f=6>h?bd(g[0],g[1],g[2],g[3],g[4],c,d):function(a,b){var e=0,f;do f=bd(g[e++],g[e++],g[e++],g[e++],g[e++],c,d)(a,b),b=u,a=f;while(e<h);return f};else{var k="";d&&(k+="s = eso(s, fe);\nl = eso(l, fe);\n");var l=d;r(g,function(a,b){sa(a,c);var e=(b?"s":'((l&&l.hasOwnProperty("'+a+'"))?l:s)')+"."+a;if(d||Oa(a))e="eso("+e+", fe)",l=!0;k+="if(s == null) return undefined;\ns="+e+";\n"});k+="return s;";a=new Function("s",
106
-"l","eso","fe",k);a.toString=ca(k);l&&(a=yf(a,c));f=a}f.sharedGetter=!0;f.assign=function(a,c){return Na(a,b,c,b)};return e[b]=f}function fc(b){return B(b.valueOf)?b.valueOf():Bf.call(b)}function Me(){var b=ia(),a=ia();this.$get=["$filter","$sniffer",function(c,d){function e(a){var b=a;a.sharedGetter&&(b=function(b,c){return a(b,c)},b.literal=a.literal,b.constant=a.constant,b.assign=a.assign);return b}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];e.constant||(e.inputs?f(e.inputs,b):-1===
107
-b.indexOf(e)&&b.push(e))}return b}function g(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function h(a,b,c,d){var e=d.$$inputs||(d.$$inputs=f(d.inputs,[])),h;if(1===e.length){var k=g,e=e[0];return a.$watch(function(a){var b=e(a);g(b,k)||(h=d(a),k=b&&fc(b));return h},b,c)}for(var l=[],q=0,p=e.length;q<p;q++)l[q]=g;return a.$watch(function(a){for(var b=!1,c=0,f=e.length;c<f;c++){var k=e[c](a);if(b||(b=!g(k,l[c])))l[c]=k&&fc(k)}b&&(h=d(a));
108
-return h},b,c)}function k(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;B(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function l(a,b,c,d){function e(a){var b=!0;r(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;B(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function m(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){B(b)&&
109
-b.apply(this,arguments);e()},c)}function p(a,b){if(!b)return a;var c=a.$$watchDelegate,c=c!==l&&c!==k?function(c,d){var e=a(c,d);return b(e,c,d)}:function(c,d){var e=a(c,d),f=b(e,c,d);return y(e)?f:e};a.$$watchDelegate&&a.$$watchDelegate!==h?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=h,c.inputs=[a]);return c}var q={csp:d.csp,expensiveChecks:!1},t={csp:d.csp,expensiveChecks:!0};return function(d,f,g){var v,w,K;switch(typeof d){case "string":K=d=d.trim();var E=g?a:b;v=E[K];
110
-v||(":"===d.charAt(0)&&":"===d.charAt(1)&&(w=!0,d=d.substring(2)),g=g?t:q,v=new gc(g),v=(new eb(v,c,g)).parse(d),v.constant?v.$$watchDelegate=m:w?(v=e(v),v.$$watchDelegate=v.literal?l:k):v.inputs&&(v.$$watchDelegate=h),E[K]=v);return p(v,f);case "function":return p(d,f);default:return p(H,f)}}}]}function Oe(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return dd(function(a){b.$evalAsync(a)},a)}]}function Pe(){this.$get=["$browser","$exceptionHandler",function(b,a){return dd(function(a){b.defer(a)},
111
-a)}]}function dd(b,a){function c(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function d(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,b(function(){var b,d,e;e=c.pending;c.processScheduled=!1;c.pending=u;for(var f=0,g=e.length;f<g;++f){d=e[f][0];b=e[f][c.status];try{B(b)?d.resolve(b(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),
112
-a(h)}}}))}function g(){this.promise=new d;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=A("$q",TypeError);d.prototype={then:function(a,b,c){var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return l(b,!0,a)},function(b){return l(b,!1,a)},b)}};
113
-g.prototype={resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(b){var d,e;e=c(this,this.$$resolve,this.$$reject);try{if(O(b)||B(b))d=b&&b.then;B(d)?(this.promise.$$state.status=-1,d.call(b,e[0],e[1],this.notify)):(this.promise.$$state.value=b,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),a(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=
114
-a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;f<g;f++){e=d[f][0];b=d[f][3];try{e.notify(B(b)?b(c):c)}catch(h){a(h)}}})}};var k=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},l=function(a,b,c){var d=null;try{B(c)&&(d=c())}catch(e){return k(e,!1)}return d&&B(d.then)?d.then(function(){return k(a,b)},function(a){return k(a,!1)}):
115
-k(a,b)},m=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},p=function t(a){if(!B(a))throw h("norslvr",a);if(!(this instanceof t))return new t(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};p.defer=function(){return new g};p.reject=function(a){var b=new g;b.reject(a);return b.promise};p.when=m;p.all=function(a){var b=new g,c=0,d=x(a)?[]:{};r(a,function(a,e){c++;m(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||
116
-b.reject(a)})});0===c&&b.resolve(d);return b.promise};return p}function Ye(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.mozCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,f=e?function(a){var b=c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};f.supported=e;return f}]}function Ne(){var b=10,
117
-a=A("$rootScope"),c=null,d=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(e,f,g,h){function k(){this.$id=++kb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings=null}function l(b){if(s.$$phase)throw a("inprog",s.$$phase);s.$$phase=b}function m(a,
118
-b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function p(){}function q(){for(;v.length;)try{v.shift()()}catch(a){f(a)}d=null}function t(){null===d&&(d=h.defer(function(){s.$apply(q)}))}k.prototype={constructor:k,$new:function(a,b){function c(){d.$$destroyed=!0}var d;b=b||this;a?(d=new k,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=function(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners=
119
-{};this.$$listenerCount={};this.$id=++kb;this.$$ChildScope=null},this.$$ChildScope.prototype=this),d=new this.$$ChildScope);d.$parent=b;d.$$prevSibling=b.$$childTail;b.$$childHead?(b.$$childTail.$$nextSibling=d,b.$$childTail=d):b.$$childHead=b.$$childTail=d;(a||b!=this)&&d.$on("$destroy",c);return d},$watch:function(a,b,d){var e=g(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,d,e);var f=this.$$watchers,h={fn:b,last:p,get:e,exp:a,eq:!!d};c=null;B(b)||(h.fn=H);f||(f=this.$$watchers=[]);f.unshift(h);
120
-return function(){Va(f,h);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});r(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,
121
-b){function c(a){e=a;var b,d,g,h;if(!C(e)){if(O(e))if(Ra(e))for(f!==p&&(f=p,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==m&&(f=m={},t=0,l++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>a)for(b in l++,f)e.hasOwnProperty(b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,q=g(a,c),p=[],m=
122
-{},n=!0,t=0;return this.$watch(q,function(){n?(n=!1,b(e,e,d)):b(e,h,d);if(k)if(O(e))if(Ra(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)rc.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var e,g,k,m,t,v,r=b,I,u=[],y,S;l("$digest");h.$$checkUrlChange();this===s&&null!==d&&(h.defer.cancel(d),q());c=null;do{v=!1;for(I=this;N.length;){try{S=N.shift(),S.scope.$eval(S.expression)}catch(A){f(A)}c=null}a:do{if(m=I.$$watchers)for(t=m.length;t--;)try{if(e=m[t])if((g=
123
-e.get(I))!==(k=e.last)&&!(e.eq?ga(g,k):"number"===typeof g&&"number"===typeof k&&isNaN(g)&&isNaN(k)))v=!0,c=e,e.last=e.eq?Da(g,null):g,e.fn(g,k===p?g:k,I),5>r&&(y=4-r,u[y]||(u[y]=[]),u[y].push({msg:B(e.exp)?"fn: "+(e.exp.name||e.exp.toString()):e.exp,newVal:g,oldVal:k}));else if(e===c){v=!1;break a}}catch(D){f(D)}if(!(m=I.$$childHead||I!==this&&I.$$nextSibling))for(;I!==this&&!(m=I.$$nextSibling);)I=I.$parent}while(I=m);if((v||N.length)&&!r--)throw s.$$phase=null,a("infdig",b,u);}while(v||N.length);
124
-for(s.$$phase=null;n.length;)try{n.shift()()}catch(ea){f(ea)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;if(this!==s){for(var b in this.$$listenerCount)m(this,this.$$listenerCount[b],b);a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);
125
-this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=H;this.$on=this.$watch=this.$watchGroup=function(){return H};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){s.$$phase||N.length||h.defer(function(){N.length&&s.$digest()});N.push({scope:this,expression:a})},$$postDigest:function(a){n.push(a)},$apply:function(a){try{return l("$apply"),
126
-this.$eval(a)}catch(b){f(b)}finally{s.$$phase=null;try{s.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&v.push(b);t()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,m(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,
127
-stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=Xa([h],arguments,1),l,q;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(q=d.length;l<q;l++)if(d[l])try{d[l].apply(null,k)}catch(m){f(m)}else d.splice(l,1),l--,q--;if(g)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;
128
-for(var g=Xa([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var s=new k,N=s.$$asyncQueue=[],n=s.$$postDigestQueue=[],v=s.$$applyAsyncQueue=[];return s}]}function Qd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;
129
-this.aHrefSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,f;f=Ba(c).href;return""===f||f.match(e)?c:"unsafe:"+f}}}function Cf(b){if("self"===b)return b;if(z(b)){if(-1<b.indexOf("***"))throw Ca("iwcard",b);b=ed(b).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(lb(b))return new RegExp("^"+b.source+"$");throw Ca("imatcher");}function fd(b){var a=
130
-[];y(b)&&r(b,function(b){a.push(Cf(b))});return a}function Re(){this.SCE_CONTEXTS=ma;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=fd(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=fd(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?Wc(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};
131
-b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Ca("unsafe");};c.has("$sanitize")&&(f=c.get("$sanitize"));var g=e(),h={};h[ma.HTML]=e(g);h[ma.CSS]=e(g);h[ma.URL]=e(g);h[ma.JS]=e(g);h[ma.RESOURCE_URL]=e(h[ma.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ca("icontext",a,b);if(null===b||b===u||""===b)return b;if("string"!==typeof b)throw Ca("itype",a);return new c(b)},getTrusted:function(c,e){if(null===
132
-e||e===u||""===e)return e;var g=h.hasOwnProperty(c)?h[c]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(c===ma.RESOURCE_URL){var g=Ba(e.toString()),p,q,t=!1;p=0;for(q=b.length;p<q;p++)if(d(b[p],g)){t=!0;break}if(t)for(p=0,q=a.length;p<q;p++)if(d(a[p],g)){t=!1;break}if(t)return e;throw Ca("insecurl",e.toString());}if(c===ma.HTML)return f(e);throw Ca("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Qe(){var b=!0;this.enabled=function(a){arguments.length&&
133
-(b=!!a);return b};this.$get=["$parse","$sceDelegate",function(a,c){if(b&&8>Pa)throw Ca("iequirks");var d=qa(ma);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=d.getTrusted=function(a,b){return b},d.valueOf=oa);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;r(ma,function(a,b){var c=Q(b);d[bb("parse_as_"+c)]=function(b){return e(a,
134
-b)};d[bb("get_trusted_"+c)]=function(b){return f(a,b)};d[bb("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function Se(){this.$get=["$window","$document",function(b,a){var c={},d=$((/android (\d+)/.exec(Q((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,k=f.body&&f.body.style,l=!1,m=!1;if(k){for(var p in k)if(l=h.exec(p)){g=l[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in k&&"webkit");
135
-l=!!("transition"in k||g+"Transition"in k);m=!!("animation"in k||g+"Animation"in k);!d||l&&m||(l=z(f.body.style.webkitTransition),m=z(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"===a&&11>=Pa)return!1;if(C(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:$a(),vendorPrefix:g,transitions:l,animations:m,android:d}}]}function Ue(){this.$get=["$templateCache","$http","$q",function(b,a,c){function d(e,f){d.totalPendingRequests++;
136
-var g=a.defaults&&a.defaults.transformResponse;x(g)?g=g.filter(function(a){return a!==Yb}):g===Yb&&(g=null);return a.get(e,{cache:b,transformResponse:g}).then(function(a){d.totalPendingRequests--;return a.data},function(a){d.totalPendingRequests--;if(!f)throw ka("tpload",e);return c.reject(a)})}d.totalPendingRequests=0;return d}]}function Ve(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var d=
137
-ha.element(a).data("$binding");d&&r(d,function(d){c?(new RegExp("(^|\\s)"+ed(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,c){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function We(){this.$get=
138
-["$rootScope","$browser","$q","$$q","$exceptionHandler",function(b,a,c,d,e){function f(f,k,l){var m=y(l)&&!l,p=(m?d:c).defer(),q=p.promise;k=a.defer(function(){try{p.resolve(f())}catch(a){p.reject(a),e(a)}finally{delete g[q.$$timeoutId]}m||b.$apply()},k);q.$$timeoutId=k;g[k]=p;return q}var g={};f.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return f}]}function Ba(b){Pa&&(Z.setAttribute("href",b),b=Z.href);
139
-Z.setAttribute("href",b);return{href:Z.href,protocol:Z.protocol?Z.protocol.replace(/:$/,""):"",host:Z.host,search:Z.search?Z.search.replace(/^\?/,""):"",hash:Z.hash?Z.hash.replace(/^#/,""):"",hostname:Z.hostname,port:Z.port,pathname:"/"===Z.pathname.charAt(0)?Z.pathname:"/"+Z.pathname}}function Wc(b){b=z(b)?Ba(b):b;return b.protocol===gd.protocol&&b.host===gd.host}function Xe(){this.$get=ca(U)}function Cc(b){function a(c,d){if(O(c)){var e={};r(c,function(b,c){e[c]=a(c,b)});return e}return b.factory(c+
140
-"Filter",d)}this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];a("currency",hd);a("date",id);a("filter",Df);a("json",Ef);a("limitTo",Ff);a("lowercase",Gf);a("number",jd);a("orderBy",kd);a("uppercase",Hf)}function Df(){return function(b,a,c){if(!x(b))return b;var d;switch(typeof a){case "function":break;case "boolean":case "number":case "string":d=!0;case "object":a=If(a,c,d);break;default:return b}return b.filter(a)}}function If(b,a,c){!0===a?a=ga:B(a)||
141
-(a=function(a,b){if(O(a)||O(b))return!1;a=Q(""+a);b=Q(""+b);return-1!==a.indexOf(b)});return function(d){return fb(d,b,a,c)}}function fb(b,a,c,d){var e=typeof b,f=typeof a;if("string"===f&&"!"===a.charAt(0))return!fb(b,a.substring(1),c,d);if("array"===e)return b.some(function(b){return fb(b,a,c,d)});switch(e){case "object":var g;if(d){for(g in b)if("$"!==g.charAt(0)&&fb(b[g],a,c))return!0;return!1}if("object"===f){for(g in a)if(e=a[g],!B(e)&&(f="$"===g,!fb(f?b:b[g],e,c,f)))return!1;return!0}return c(b,
142
-a);case "function":return!1;default:return c(b,a)}}function hd(b){var a=b.NUMBER_FORMATS;return function(b,d,e){C(d)&&(d=a.CURRENCY_SYM);C(e)&&(e=a.PATTERNS[1].maxFrac);return null==b?b:ld(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,e).replace(/\u00A4/g,d)}}function jd(b){var a=b.NUMBER_FORMATS;return function(b,d){return null==b?b:ld(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function ld(b,a,c,d,e){if(!isFinite(b)||O(b))return"";var f=0>b;b=Math.abs(b);var g=b+"",h="",k=[],l=!1;if(-1!==g.indexOf("e")){var m=
143
-g.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?b=0:(h=g,l=!0)}if(l)0<e&&1>b&&(h=b.toFixed(e),b=parseFloat(h));else{g=(g.split(md)[1]||"").length;C(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(md),l=g[0],g=g[1]||"",p=0,q=a.lgSize,t=a.gSize;if(l.length>=q+t)for(p=l.length-q,m=0;m<p;m++)0===(p-m)%t&&0!==m&&(h+=c),h+=l.charAt(m);for(m=p;m<l.length;m++)0===(l.length-m)%q&&0!==m&&(h+=c),h+=l.charAt(m);for(;g.length<
144
-e;)g+="0";e&&"0"!==e&&(h+=d+g.substr(0,e))}0===b&&(f=!1);k.push(f?a.negPre:a.posPre,h,f?a.negSuf:a.posSuf);return k.join("")}function Gb(b,a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function V(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Gb(e,a,d)}}function Hb(b,a){return function(c,d){var e=c["get"+b](),f=rb(a?"SHORT"+b:b);return d[f][e]}}function nd(b){var a=(new Date(b,0,1)).getDay();
145
-return new Date(b,0,(4>=a?5:12)-a)}function od(b){return function(a){var c=nd(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Gb(a,b)}}function id(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=$(b[9]+b[10]),g=$(b[9]+b[11]));h.call(a,$(b[1]),$(b[2])-1,$(b[3]));f=$(b[4]||0)-f;g=$(b[5]||0)-g;h=$(b[6]||0);b=Math.round(1E3*parseFloat("0."+
146
-(b[7]||0)));k.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e,f){var g="",h=[],k,l;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;z(c)&&(c=Jf.test(c)?$(c):a(c));Y(c)&&(c=new Date(c));if(!pa(c))return c;for(;e;)(l=Kf.exec(e))?(h=Xa(h,l,1),e=h.pop()):(h.push(e),e=null);f&&"UTC"===f&&(c=new Date(c.getTime()),c.setMinutes(c.getMinutes()+c.getTimezoneOffset()));r(h,function(a){k=Lf[a];g+=k?k(c,b.DATETIME_FORMATS):
147
-a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ef(){return function(b,a){C(a)&&(a=2);return Za(b,a)}}function Ff(){return function(b,a){Y(b)&&(b=b.toString());if(!x(b)&&!z(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):$(a);if(z(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0<a?(d=0,e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);return c}}function kd(b){return function(a,c,d){function e(a,b){return b?
148
-function(b,c){return a(c,b)}:a}function f(a,b){var c=typeof a,d=typeof b;return c===d&&"object"===c&&(c=typeof(a.valueOf?a=a.valueOf():a),d=typeof(b.valueOf?b=b.valueOf():b),c===d&&"object"===c&&(c=typeof(a.toString?a=a.toString():a),d=typeof(b.toString?b=b.toString():b),c===d&&a===b||"object"===c))?0:c===d?("string"===c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!Ra(a))return a;c=x(c)?c:[c];0===c.length&&(c=["+"]);c=c.map(function(a){var c=!1,d=a||oa;if(z(a)){if("+"==a.charAt(0)||
149
-"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);if(""===a)return e(function(a,b){return f(a,b)},c);d=b(a);if(d.constant){var l=d();return e(function(a,b){return f(a[l],b[l])},c)}}return e(function(a,b){return f(d(a),d(b))},c)});return Ya.call(a).sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function Ia(b){B(b)&&(b={link:b});b.restrict=b.restrict||"AC";return ca(b)}function pd(b,a,c,d,e){var f=this,g=[],h=f.$$parentForm=b.parent().controller("form")||
150
-Ib;f.$error={};f.$$success={};f.$pending=u;f.$name=e(a.name||a.ngForm||"")(c);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;h.$addControl(f);f.$rollbackViewValue=function(){r(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){r(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){La(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&
151
-f[a.$name]===a&&delete f[a.$name];r(f.$pending,function(b,c){f.$setValidity(c,null,a)});r(f.$error,function(b,c){f.$setValidity(c,null,a)});Va(g,a)};qd({ctrl:this,$element:b,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Va(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Qa);d.addClass(b,Jb);f.$dirty=!0;f.$pristine=!1;h.$setDirty()};f.$setPristine=function(){d.setClass(b,Qa,Jb+" ng-submitted");
152
-f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;r(g,function(a){a.$setPristine()})};f.$setUntouched=function(){r(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){d.addClass(b,"ng-submitted");f.$submitted=!0;h.$setSubmitted()}}function hc(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function gb(b,a,c,d,e,f){var g=Q(a[0].type);if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0});a.on("compositionend",function(){h=!1;k()})}var k=function(b){l&&(f.defer.cancel(l),
153
-l=null);if(!h){var e=a.val();b=b&&b.type;"password"===g||c.ngTrim&&"false"===c.ngTrim||(e=P(e));(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,b)}};if(e.hasEvent("input"))a.on("input",k);else{var l,m=function(a,b,c){l||(l=f.defer(function(){l=null;b&&b.value===c||k(a)}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",m)}a.on("change",k);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?
154
-"":d.$viewValue)}}function Kb(b,a){return function(c,d){var e,f;if(pa(c))return c;if(z(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(Mf.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(b,c){c<a.length&&(f[a[c]]=+b)}),new Date(f.yyyy,f.MM-1,f.dd,
155
-f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function hb(b,a,c,d){return function(e,f,g,h,k,l,m){function p(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function q(a){return y(a)?pa(a)?a:c(a):u}rd(e,f,g,h);gb(e,f,g,h,k,l);var t=h&&h.$options&&h.$options.timezone,s;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,s),"UTC"===t&&b.setMinutes(b.getMinutes()-b.getTimezoneOffset()),b):u});h.$formatters.push(function(a){if(a&&!pa(a))throw Lb("datefmt",a);if(p(a)){if((s=
156
-a)&&"UTC"===t){var b=6E4*s.getTimezoneOffset();s=new Date(s.getTime()+b)}return m("date")(a,d,t)}s=null;return""});if(y(g.min)||g.ngMin){var r;h.$validators.min=function(a){return!p(a)||C(r)||c(a)>=r};g.$observe("min",function(a){r=q(a);h.$validate()})}if(y(g.max)||g.ngMax){var n;h.$validators.max=function(a){return!p(a)||C(n)||c(a)<=n};g.$observe("max",function(a){n=q(a);h.$validate()})}}}function rd(b,a,c,d){(d.$$hasNativeValidators=O(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||
157
-{};return c.badInput&&!c.typeMismatch?u:b})}function sd(b,a,c,d,e){if(y(d)){b=b(d);if(!b.constant)throw A("ngModel")("constexpr",c,d);return b(a)}return e}function qd(b){function a(a,b){b&&!f[a]?(l.addClass(e,a),f[a]=!0):!b&&f[a]&&(l.removeClass(e,a),f[a]=!1)}function c(b,c){b=b?"-"+Pb(b,"-"):"";a(ib+b,!0===c);a(td+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=b.unset,k=b.parentForm,l=b.$animate;f[td]=!(f[ib]=e.hasClass(ib));d.$setValidity=function(b,e,f){e===u?(d.$pending||(d.$pending={}),g(d.$pending,
158
-b,f)):(d.$pending&&h(d.$pending,b,f),ud(d.$pending)&&(d.$pending=u));Ua(e)?e?(h(d.$error,b,f),g(d.$$success,b,f)):(g(d.$error,b,f),h(d.$$success,b,f)):(h(d.$error,b,f),h(d.$$success,b,f));d.$pending?(a(vd,!0),d.$valid=d.$invalid=u,c("",null)):(a(vd,!1),d.$valid=ud(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?u:d.$error[b]?!1:d.$$success[b]?!0:null;c(b,e);k.$setValidity(b,e,d)}}function ud(b){if(b)for(var a in b)return!1;return!0}function ic(b,a){b="ngClass"+b;return["$animate",
159
-function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){if(!x(a)){if(z(a))return a.split(" ");if(O(a)){var b=[];r(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(f,g,h){function k(a,b){var c=g.data("$classCounts")||{},d=[];r(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function l(b){if(!0===
160
-a||f.$index%2===a){var l=e(b||[]);if(!m){var t=k(l,1);h.$addClass(t)}else if(!ga(b,m)){var s=e(m),t=d(l,s),l=d(s,l),t=k(t,1),l=k(l,-1);t&&t.length&&c.addClass(g,t);l&&l.length&&c.removeClass(g,l)}}m=qa(b)}var m;f.$watch(h[b],l,!0);h.$observe("class",function(a){l(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var l=e(f.$eval(h[b]));g===a?(g=k(l,1),h.$addClass(g)):(g=k(l,-1),h.$removeClass(g))}})}}}]}var Nf=/^\/(.+)\/([a-z]*)$/,Q=function(b){return z(b)?b.toLowerCase():
161
-b},rc=Object.prototype.hasOwnProperty,rb=function(b){return z(b)?b.toUpperCase():b},Pa,D,ra,Ya=[].slice,rf=[].splice,Of=[].push,Ja=Object.prototype.toString,Wa=A("ng"),ha=U.angular||(U.angular={}),ab,kb=0;Pa=X.documentMode;H.$inject=[];oa.$inject=[];var x=Array.isArray,P=function(b){return z(b)?b.trim():b},ed=function(b){return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},$a=function(){if(y($a.isActive_))return $a.isActive_;var b=!(!X.querySelector("[ng-csp]")&&!X.querySelector("[data-ng-csp]"));
162
-if(!b)try{new Function("")}catch(a){b=!0}return $a.isActive_=b},ob=["ng-","data-ng-","ng:","x-ng-"],Kd=/[A-Z]/g,tc=!1,Qb,na=1,mb=3,Od={full:"1.3.6",major:1,minor:3,dot:6,codeName:"robofunky-danceblaster"};R.expando="ng339";var wb=R.cache={},ff=1;R._data=function(b){return this.cache[b[this.expando]]||{}};var af=/([\:\-\_]+(.))/g,bf=/^moz([A-Z])/,Pf={mouseleave:"mouseout",mouseenter:"mouseover"},Tb=A("jqLite"),ef=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Sb=/<|&#?\w+;/,cf=/<([\w:]+)/,df=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
163
-ja={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ja.optgroup=ja.option;ja.tbody=ja.tfoot=ja.colgroup=ja.caption=ja.thead;ja.th=ja.td;var Ka=R.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),R(U).on("load",a))},
164
-toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?D(this[b]):D(this[this.length+b])},length:0,push:Of,sort:[].sort,splice:[].splice},Bb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){Bb[Q(b)]=b});var Lc={};r("input select option textarea button form details".split(" "),function(b){Lc[b]=!0});var Mc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};
165
-r({data:Vb,removeData:ub},function(b,a){R[a]=b});r({data:Vb,inheritedData:Ab,scope:function(b){return D.data(b,"$scope")||Ab(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return D.data(b,"$isolateScope")||D.data(b,"$isolateScopeNoTemplate")},controller:Hc,injector:function(b){return Ab(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:xb,css:function(b,a,c){a=bb(a);if(y(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=Q(a);if(Bb[d])if(y(c))c?
166
-(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||H).specified?d:u;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?u:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(C(b)){var d=a.nodeType;return d===na||d===mb?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(C(a)){if(b.multiple&&"select"===ua(b)){var c=[];r(b.options,function(a){a.selected&&
167
-c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(C(a))return b.innerHTML;tb(b,!0);b.innerHTML=a},empty:Ic},function(b,a){R.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Ic&&(2==b.length&&b!==xb&&b!==Hc?a:d)===u){if(O(a)){for(e=0;e<g;e++)if(b===Vb)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;g=e===u?Math.min(g,1):g;for(f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<g;e++)b(this[e],a,d);return this}});
168
-r({removeData:ub,on:function a(c,d,e,f){if(y(f))throw Tb("onargs");if(Dc(c)){var g=vb(c,!0);f=g.events;var h=g.handle;h||(h=g.handle=jf(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],k=g.length;k--;){d=g[k];var l=f[d];l||(f[d]=[],"mouseenter"===d||"mouseleave"===d?a(c,Pf[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,h,!1),l=f[d]);l.push(e)}}},off:Gc,one:function(a,c,d){a=D(a);a.on(c,function f(){a.off(c,d);a.off(c,f)});a.on(c,
169
-d)},replaceWith:function(a,c){var d,e=a.parentNode;tb(a);r(new R(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];r(a.childNodes,function(a){a.nodeType===na&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===na||11===d){c=new R(c);for(var d=0,e=c.length;d<e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===na){var d=a.firstChild;r(new R(c),function(c){a.insertBefore(c,
170
-d)})}},wrap:function(a,c){c=D(c).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:Jc,detach:function(a){Jc(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new R(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,d.nextSibling);d=h}},addClass:zb,removeClass:yb,toggleClass:function(a,c,d){c&&r(c.split(" "),function(c){var f=d;C(f)&&(f=!xb(a,c));(f?zb:yb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},
171
-find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c):[]},clone:Ub,triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=vb(a);if(h=(h=h&&h.events)&&h[g])e={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:H,type:g,target:a},c.type&&(e=G(e,
172
-c)),c=qa(h),f=d?[e].concat(d):[e],r(c,function(c){e.isImmediatePropagationStopped()||c.apply(a,f)})}},function(a,c){R.prototype[c]=function(c,e,f){for(var g,h=0,k=this.length;h<k;h++)C(g)?(g=a(this[h],c,e,f),y(g)&&(g=D(g))):Fc(g,a(this[h],c,e,f));return y(g)?g:this};R.prototype.bind=R.prototype.on;R.prototype.unbind=R.prototype.off});cb.prototype={put:function(a,c){this[Ma(a,this.nextUid)]=c},get:function(a){return this[Ma(a,this.nextUid)]},remove:function(a){var c=this[a=Ma(a,this.nextUid)];delete this[a];
173
-return c}};var Oc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,lf=/,/,mf=/^\s*(_?)(\S+?)\1\s*$/,Nc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Fa=A("$injector");Ob.$$annotate=Wb;var Qf=A("$animate"),Ae=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Qf("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};
174
-this.$get=["$$q","$$asyncCallback","$rootScope",function(a,d,e){function f(d){var f,g=a.defer();g.promise.$$cancelFn=function(){f&&f()};e.$$postDigest(function(){f=d(function(){g.resolve()})});return g.promise}function g(a,c){var d=[],e=[],f=ia();r((a.attr("class")||"").split(/\s+/),function(a){f[a]=!0});r(c,function(a,c){var g=f[c];!1===a&&g?e.push(c):!0!==a||g||d.push(c)});return 0<d.length+e.length&&[d.length?d:null,e.length?e:null]}function h(a,c,d){for(var e=0,f=c.length;e<f;++e)a[c[e]]=d}function k(){m||
175
-(m=a.defer(),d(function(){m.resolve();m=null}));return m.promise}function l(a,c){if(ha.isObject(c)){var d=G(c.from||{},c.to||{});a.css(d)}}var m;return{animate:function(a,c,d){l(a,{from:c,to:d});return k()},enter:function(a,c,d,e){l(a,e);d?d.after(a):c.prepend(a);return k()},leave:function(a,c){a.remove();return k()},move:function(a,c,d,e){return this.enter(a,c,d,e)},addClass:function(a,c,d){return this.setClass(a,c,[],d)},$$addClassImmediately:function(a,c,d){a=D(a);c=z(c)?c:x(c)?c.join(" "):"";
176
-r(a,function(a){zb(a,c)});l(a,d);return k()},removeClass:function(a,c,d){return this.setClass(a,[],c,d)},$$removeClassImmediately:function(a,c,d){a=D(a);c=z(c)?c:x(c)?c.join(" "):"";r(a,function(a){yb(a,c)});l(a,d);return k()},setClass:function(a,c,d,e){var k=this,l=!1;a=D(a);var m=a.data("$$animateClasses");m?e&&m.options&&(m.options=ha.extend(m.options||{},e)):(m={classes:{},options:e},l=!0);e=m.classes;c=x(c)?c:c.split(" ");d=x(d)?d:d.split(" ");h(e,c,!0);h(e,d,!1);l&&(m.promise=f(function(c){var d=
177
-a.data("$$animateClasses");a.removeData("$$animateClasses");if(d){var e=g(a,d.classes);e&&k.$$setClassImmediately(a,e[0],e[1],d.options)}c()}),a.data("$$animateClasses",m));return m.promise},$$setClassImmediately:function(a,c,d,e){c&&this.$$addClassImmediately(a,c);d&&this.$$removeClassImmediately(a,d);l(a,e);return k()},enabled:H,cancel:H}}]}],ka=A("$compile");vc.$inject=["$provide","$$sanitizeUriProvider"];var qf=/^((?:x|data)[\:\-_])/i,Sc="application/json",Zb={"Content-Type":Sc+";charset=utf-8"},
178
-tf=/^\s*(\[|\{[^\{])/,uf=/[\}\]]\s*$/,sf=/^\)\]\}',?\n/,$b=A("$interpolate"),Rf=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,xf={http:80,https:443,ftp:21},Eb=A("$location"),Sf={$$html5:!1,$$replace:!1,absUrl:Fb("$$absUrl"),url:function(a){if(C(a))return this.$$url;var c=Rf.exec(a);(c[1]||""===a)&&this.path(decodeURIComponent(c[1]));(c[2]||c[1]||""===a)&&this.search(c[3]||"");this.hash(c[5]||"");return this},protocol:Fb("$$protocol"),host:Fb("$$host"),port:Fb("$$port"),path:ad("$$path",function(a){a=null!==a?
179
-a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(z(a)||Y(a))a=a.toString(),this.$$search=qc(a);else if(O(a))a=Da(a,{}),r(a,function(c,e){null==c&&delete a[e]}),this.$$search=a;else throw Eb("isrcharg");break;default:C(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:ad("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};
180
-r([$c,dc,cc],function(a){a.prototype=Object.create(Sf);a.prototype.state=function(c){if(!arguments.length)return this.$$state;if(a!==cc||!this.$$html5)throw Eb("nostate");this.$$state=C(c)?null:c;return this}});var la=A("$parse"),Tf=Function.prototype.call,Uf=Function.prototype.apply,Vf=Function.prototype.bind,Mb=ia();r({"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:function(){}},function(a,c){a.constant=a.literal=a.sharedGetter=!0;Mb[c]=a});Mb["this"]=
181
-function(a){return a};Mb["this"].sharedGetter=!0;var jb=G(ia(),{"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return y(d)?y(e)?d+e:d:y(e)?e:u},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(y(d)?d:0)-(y(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,
182
-c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"!":function(a,c,d){return!d(a,c)},"=":!0,"|":!0}),Wf={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=
183
-[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var c=a+this.peek(),d=c+this.peek(2),e=jb[c],f=jb[d];jb[a]||e||f?(a=f?d:e?c:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=
184
-a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,c){return-1!==c.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===
185
-a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=Q(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||
186
-e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:c,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(!this.isIdent(c)&&!this.isNumber(c))break;this.index++}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,f=!1;this.index<this.text.length;){var g=
187
-this.text.charAt(this.index),e=e+g;if(f)"u"===g?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d+=Wf[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,constant:!0,value:d});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var eb=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};eb.ZERO=G(function(){return 0},
188
-{sharedGetter:!0,constant:!0});eb.prototype={constructor:eb,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.peek().identifier?a=this.identifier():this.peek().constant?a=
189
-this.constant():this.throwError("not a primary expression",this.peek());for(var c,d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw la("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw la("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,
190
-e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var g=a.text;if(g===c||g===d||g===e||g===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){if(0===this.tokens.length)throw la("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},unaryFn:function(a,c){var d=jb[a];return G(function(a,f){return d(a,
191
-f,c)},{constant:c.constant,inputs:[c]})},binaryFn:function(a,c,d,e){var f=jb[c];return G(function(c,e){return f(c,e,a,d)},{constant:a.constant&&d.constant,inputs:!e&&[a,d]})},identifier:function(){for(var a=this.consume().text;this.peek(".")&&this.peekAhead(1).identifier&&!this.peekAhead(2,"(");)a+=this.consume().text+this.consume().text;return Mb[a]||cd(a,this.options,this.text)},constant:function(){var a=this.consume().value;return G(function(){return a},{constant:!0,literal:!0})},statements:function(){for(var a=
192
-[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,f=0,g=a.length;f<g;f++)e=a[f](c,d);return e}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},filter:function(a){var c=this.$filter(this.consume().text),d,e;if(this.peek(":"))for(d=[],e=[];this.expect(":");)d.push(this.expression());var f=[a].concat(d||[]);return G(function(f,h){var k=a(f,h);if(e){e[0]=
193
-k;for(k=d.length;k--;)e[k+1]=d[k](f,h);return c.apply(u,e)}return c(k)},{constant:!c.$stateful&&f.every(ec),inputs:!c.$stateful&&f})},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),G(function(d,f){return a.assign(d,c(d,f),f)},{inputs:[a,c]})):a},ternary:function(){var a=this.logicalOR(),c;if(this.expect("?")&&
194
-(c=this.assignment(),this.consume(":"))){var d=this.assignment();return G(function(e,f){return a(e,f)?c(e,f):d(e,f)},{constant:a.constant&&c.constant&&d.constant})}return a},logicalOR:function(){for(var a=this.logicalAND(),c;c=this.expect("||");)a=this.binaryFn(a,c.text,this.logicalAND(),!0);return a},logicalAND:function(){for(var a=this.equality(),c;c=this.expect("&&");)a=this.binaryFn(a,c.text,this.equality(),!0);return a},equality:function(){for(var a=this.relational(),c;c=this.expect("==","!=",
195
-"===","!==");)a=this.binaryFn(a,c.text,this.relational());return a},relational:function(){for(var a=this.additive(),c;c=this.expect("<",">","<=",">=");)a=this.binaryFn(a,c.text,this.additive());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.text,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.text,this.unary());return a},unary:function(){var a;return this.expect("+")?
196
-this.primary():(a=this.expect("-"))?this.binaryFn(eb.ZERO,a.text,this.unary()):(a=this.expect("!"))?this.unaryFn(a.text,this.unary()):this.primary()},fieldAccess:function(a){var c=this.text,d=this.consume().text,e=cd(d,this.options,c);return G(function(c,d,h){return e(h||a(c,d))},{assign:function(e,g,h){(h=a(e,h))||a.assign(e,h={});return Na(h,d,g,c)}})},objectIndex:function(a){var c=this.text,d=this.expression();this.consume("]");return G(function(e,f){var g=a(e,f),h=d(e,f);sa(h,c);return g?ta(g[h],
197
-c):u},{assign:function(e,f,g){var h=sa(d(e,g),c);(g=ta(a(e,g),c))||a.assign(e,g={});return g[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this.text,f=d.length?[]:null;return function(g,h){var k=c?c(g,h):y(c)?u:g,l=a(g,h,k)||H;if(f)for(var m=d.length;m--;)f[m]=ta(d[m](g,h),e);ta(k,e);if(l){if(l.constructor===l)throw la("isecfn",e);if(l===Tf||l===Uf||l===Vf)throw la("isecff",e);}k=l.apply?l.apply(k,
198
-f):l(f[0],f[1],f[2],f[3],f[4]);return ta(k,e)}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return G(function(c,d){for(var e=[],f=0,g=a.length;f<g;f++)e.push(a[f](c,d));return e},{literal:!0,constant:a.every(ec),inputs:a})},object:function(){var a=[],c=[];if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.consume();d.constant?a.push(d.value):d.identifier?a.push(d.text):
199
-this.throwError("invalid key",d);this.consume(":");c.push(this.expression())}while(this.expect(","))}this.consume("}");return G(function(d,f){for(var g={},h=0,k=c.length;h<k;h++)g[a[h]]=c[h](d,f);return g},{literal:!0,constant:c.every(ec),inputs:c})}};var Af=ia(),zf=ia(),Bf=Object.prototype.valueOf,Ca=A("$sce"),ma={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ka=A("$compile"),Z=X.createElement("a"),gd=Ba(U.location.href);Cc.$inject=["$provide"];hd.$inject=["$locale"];jd.$inject=
200
-["$locale"];var md=".",Lf={yyyy:V("FullYear",4),yy:V("FullYear",2,0,!0),y:V("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:V("Month",2,1),M:V("Month",1,1),dd:V("Date",2),d:V("Date",1),HH:V("Hours",2),H:V("Hours",1),hh:V("Hours",2,-12),h:V("Hours",1,-12),mm:V("Minutes",2),m:V("Minutes",1),ss:V("Seconds",2),s:V("Seconds",1),sss:V("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=
201
-a?"+":"")+(Gb(Math[0<a?"floor":"ceil"](a/60),2)+Gb(Math.abs(a%60),2))},ww:od(2),w:od(1)},Kf=/((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,Jf=/^\-?\d+$/;id.$inject=["$locale"];var Gf=ca(Q),Hf=ca(rb);kd.$inject=["$parse"];var Rd=ca({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===Ja.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}),sb=
202
-{};r(Bb,function(a,c){if("multiple"!=a){var d=wa("ng-"+c);sb[d]=function(){return{restrict:"A",priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});r(Mc,function(a,c){sb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(Nf))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});r(["src","srcset","href"],function(a){var c=wa("ng-"+a);sb[c]=function(){return{priority:99,
203
-link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===Ja.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",g=null);f.$observe(c,function(c){c?(f.$set(h,c),Pa&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Ib={$addControl:H,$$renameControl:function(a,c){a.$name=c},$removeControl:H,$setValidity:H,$setDirty:H,$setPristine:H,$setSubmitted:H};pd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var wd=function(a){return["$timeout",function(c){return{name:"form",
204
-restrict:a?"EAC":"E",controller:pd,compile:function(a){a.addClass(Qa).addClass(ib);return{pre:function(a,d,g,h){if(!("action"in g)){var k=function(c){a.$apply(function(){h.$commitViewValue();h.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",k,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",k,!1)},0,!1)})}var l=h.$$parentForm,m=h.$name;m&&(Na(a,m,h,m),g.$observe(g.name?"name":"ngForm",function(c){m!==c&&(Na(a,m,u,m),m=c,Na(a,m,h,m),l.$$renameControl(h,
205
-m))}));d.on("$destroy",function(){l.$removeControl(h);m&&Na(a,m,u,m);G(h,Ib)})}}}}}]},Sd=wd(),ee=wd(!0),Mf=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,Xf=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Yf=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Zf=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,xd=/^(\d{4})-(\d{2})-(\d{2})$/,yd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,
206
-jc=/^(\d{4})-W(\d\d)$/,zd=/^(\d{4})-(\d\d)$/,Ad=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,$f=/(\s+|^)default(\s+|$)/,Lb=new A("ngModel"),Bd={text:function(a,c,d,e,f,g){gb(a,c,d,e,f,g);hc(e)},date:hb("date",xd,Kb(xd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":hb("datetimelocal",yd,Kb(yd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:hb("time",Ad,Kb(Ad,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:hb("week",jc,function(a,c){if(pa(a))return a;if(z(a)){jc.lastIndex=0;var d=
207
-jc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,k=0,l=nd(e),f=7*(f-1);c&&(d=c.getHours(),g=c.getMinutes(),h=c.getSeconds(),k=c.getMilliseconds());return new Date(e,0,l.getDate()+f,d,g,h,k)}}return NaN},"yyyy-Www"),month:hb("month",zd,Kb(zd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){rd(a,c,d,e);gb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:Zf.test(a)?parseFloat(a):u});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!Y(a))throw Lb("numfmt",
208
-a);a=a.toString()}return a});if(d.min||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||C(h)||a>=h};d.$observe("min",function(a){y(a)&&!Y(a)&&(a=parseFloat(a,10));h=Y(a)&&!isNaN(a)?a:u;e.$validate()})}if(d.max||d.ngMax){var k;e.$validators.max=function(a){return e.$isEmpty(a)||C(k)||a<=k};d.$observe("max",function(a){y(a)&&!Y(a)&&(a=parseFloat(a,10));k=Y(a)&&!isNaN(a)?a:u;e.$validate()})}},url:function(a,c,d,e,f,g){gb(a,c,d,e,f,g);hc(e);e.$$parserName="url";e.$validators.url=function(a,
209
-c){var d=a||c;return e.$isEmpty(d)||Xf.test(d)}},email:function(a,c,d,e,f,g){gb(a,c,d,e,f,g);hc(e);e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||Yf.test(d)}},radio:function(a,c,d,e){C(d.name)&&c.attr("name",++kb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,k){var l=sd(k,a,"ngTrueValue",d.ngTrueValue,!0),
210
-m=sd(k,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ga(a,l)});e.$parsers.push(function(a){return a?l:m})},hidden:H,button:H,submit:H,reset:H,file:H},wc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,k){k[0]&&(Bd[Q(h.type)]||Bd.text)(f,g,h,k[0],
211
-c,a,d,e)}}}}],ib="ng-valid",td="ng-invalid",Qa="ng-pristine",Jb="ng-dirty",vd="ng-pending",ag=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,k,l,m){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=u;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=
212
-!1;this.$error={};this.$$success={};this.$pending=u;this.$name=m(d.name||"",!1)(a);var p=f(d.ngModel),q=p.assign,t=p,s=q,N=null,n=this;this.$$setOptions=function(a){if((n.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");t=function(a){var d=p(a);B(d)&&(d=c(a));return d};s=function(a,c){B(p(a))?g(a,{$$$p:n.$modelValue}):q(a,n.$modelValue)}}else if(!p.assign)throw Lb("nonassign",d.ngModel,va(e));};this.$render=H;this.$isEmpty=function(a){return C(a)||""===a||null===a||a!==
213
-a};var v=e.inheritedData("$formController")||Ib,w=0;qd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:v,$animate:g});this.$setPristine=function(){n.$dirty=!1;n.$pristine=!0;g.removeClass(e,Jb);g.addClass(e,Qa)};this.$setDirty=function(){n.$dirty=!0;n.$pristine=!1;g.removeClass(e,Qa);g.addClass(e,Jb);v.$setDirty()};this.$setUntouched=function(){n.$touched=!1;n.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched=function(){n.$touched=
214
-!0;n.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(N);n.$viewValue=n.$$lastCommittedViewValue;n.$render()};this.$validate=function(){if(!Y(n.$modelValue)||!isNaN(n.$modelValue)){var a=n.$$rawModelValue,c=n.$valid,d=n.$modelValue,e=n.$options&&n.$options.allowInvalid;n.$$runValidators(n.$error[n.$$parserName||"parse"]?!1:u,a,n.$$lastCommittedViewValue,function(f){e||c===f||(n.$modelValue=f?a:u,n.$modelValue!==d&&n.$$writeModelToScope())})}};this.$$runValidators=
215
-function(a,c,d,e){function f(){var a=!0;r(n.$validators,function(e,f){var g=e(c,d);a=a&&g;h(f,g)});return a?!0:(r(n.$asyncValidators,function(a,c){h(c,null)}),!1)}function g(){var a=[],e=!0;r(n.$asyncValidators,function(f,g){var k=f(c,d);if(!k||!B(k.then))throw Lb("$asyncValidators",k);h(g,u);a.push(k.then(function(){h(g,!0)},function(a){e=!1;h(g,!1)}))});a.length?l.all(a).then(function(){k(e)},H):k(!0)}function h(a,c){m===w&&n.$setValidity(a,c)}function k(a){m===w&&e(a)}w++;var m=w;(function(a){var c=
216
-n.$$parserName||"parse";if(a===u)h(c,null);else if(h(c,a),!a)return r(n.$validators,function(a,c){h(c,null)}),r(n.$asyncValidators,function(a,c){h(c,null)}),!1;return!0})(a)?f()?g():k(!1):k(!1)};this.$commitViewValue=function(){var a=n.$viewValue;h.cancel(N);if(n.$$lastCommittedViewValue!==a||""===a&&n.$$hasNativeValidators)n.$$lastCommittedViewValue=a,n.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=n.$$lastCommittedViewValue,d=C(c)?u:!0;if(d)for(var e=
217
-0;e<n.$parsers.length;e++)if(c=n.$parsers[e](c),C(c)){d=!1;break}Y(n.$modelValue)&&isNaN(n.$modelValue)&&(n.$modelValue=t(a));var f=n.$modelValue,g=n.$options&&n.$options.allowInvalid;n.$$rawModelValue=c;g&&(n.$modelValue=c,n.$modelValue!==f&&n.$$writeModelToScope());n.$$runValidators(d,c,n.$$lastCommittedViewValue,function(a){g||(n.$modelValue=a?c:u,n.$modelValue!==f&&n.$$writeModelToScope())})};this.$$writeModelToScope=function(){s(a,n.$modelValue);r(n.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};
218
-this.$setViewValue=function(a,c){n.$viewValue=a;n.$options&&!n.$options.updateOnDefault||n.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=n.$options;e&&y(e.debounce)&&(e=e.debounce,Y(e)?d=e:Y(e[c])?d=e[c]:Y(e["default"])&&(d=e["default"]));h.cancel(N);d?N=h(function(){n.$commitViewValue()},d):k.$$phase?n.$commitViewValue():a.$apply(function(){n.$commitViewValue()})};a.$watch(function(){var c=t(a);if(c!==n.$modelValue){n.$modelValue=n.$$rawModelValue=c;for(var d=
219
-n.$formatters,e=d.length,f=c;e--;)f=d[e](f);n.$viewValue!==f&&(n.$viewValue=n.$$lastCommittedViewValue=f,n.$render(),n.$$runValidators(u,c,f,H))}return c})}],te=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:ag,priority:1,compile:function(c){c.addClass(Qa).addClass("ng-untouched").addClass(ib);return{pre:function(a,c,f,g){var h=g[0],k=g[1]||Ib;h.$$setOptions(g[2]&&g[2].$options);k.$addControl(h);f.$observe("name",function(a){h.$name!==a&&k.$$renameControl(h,
220
-a)});a.$on("$destroy",function(){k.$removeControl(h)})},post:function(c,e,f,g){var h=g[0];if(h.$options&&h.$options.updateOn)e.on(h.$options.updateOn,function(a){h.$$debounceViewValueCommit(a&&a.type)});e.on("blur",function(e){h.$touched||(a.$$phase?c.$evalAsync(h.$setTouched):c.$apply(h.$setTouched))})}}}}}],ve=ca({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),yc=function(){return{restrict:"A",require:"?ngModel",link:function(a,
221
-c,d,e){e&&(d.required=!0,e.$validators.required=function(a,c){return!d.required||!e.$isEmpty(c)},d.$observe("required",function(){e.$validate()}))}}},xc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f,g=d.ngPattern||d.pattern;d.$observe("pattern",function(a){z(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw A("ngPattern")("noregexp",g,a,va(c));f=a||u;e.$validate()});e.$validators.pattern=function(a){return e.$isEmpty(a)||C(f)||f.test(a)}}}}},Ac=function(){return{restrict:"A",
222
-require:"?ngModel",link:function(a,c,d,e){if(e){var f=-1;d.$observe("maxlength",function(a){a=$(a);f=isNaN(a)?-1:a;e.$validate()});e.$validators.maxlength=function(a,c){return 0>f||e.$isEmpty(a)||c.length<=f}}}}},zc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=$(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}},ue=function(){return{restrict:"A",priority:100,require:"ngModel",
223
-link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?P(f):f;e.$parsers.push(function(a){if(!C(a)){var c=[];a&&r(a.split(h),function(a){a&&c.push(g?P(a):a)});return c}});e.$formatters.push(function(a){return x(a)?a.join(f):u});e.$isEmpty=function(a){return!a||!a.length}}}},bg=/^(true|false|\d+)$/,we=function(){return{restrict:"A",priority:100,compile:function(a,c){return bg.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,
224
-function(a){f.$set("value",a)})}}}},xe=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d=this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn!==u?(this.$options.updateOnDefault=!1,this.$options.updateOn=P(this.$options.updateOn.replace($f,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Xd=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,
225
-f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===u?"":a})}}}}],Zd=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate));c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===u?"":a})}}}}],Yd=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});
226
-d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],$d=ic("",!0),be=ic("Odd",0),ae=ic("Even",1),ce=Ia({compile:function(a,c){c.$set("ngCloak",u);a.removeClass("ng-cloak")}}),de=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Bc={},cg={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
227
-function(a){var c=wa("ng-"+a);Bc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h=d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};cg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ge=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,k,l;c.$watch(e.ngIf,function(c){c?k||g(function(c,f){k=f;c[c.length++]=X.createComment(" end ngIf: "+
228
-e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=qb(h.clone),a.leave(l).then(function(){l=null}),h=null))})}}}],he=["$templateRequest","$anchorScroll","$animate","$sce",function(a,c,d,e){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ha.noop,compile:function(f,g){var h=g.ngInclude||g.src,k=g.onload||"",l=g.autoscroll;return function(f,g,q,r,s){var u=0,n,v,w,K=function(){v&&(v.remove(),v=null);n&&(n.$destroy(),
229
-n=null);w&&(d.leave(w).then(function(){v=null}),v=w,w=null)};f.$watch(e.parseAsResourceUrl(h),function(e){var h=function(){!y(l)||l&&!f.$eval(l)||c()},q=++u;e?(a(e,!0).then(function(a){if(q===u){var c=f.$new();r.template=a;a=s(c,function(a){K();d.enter(a,null,g).then(h)});n=c;w=a;n.$emit("$includeContentLoaded",e);f.$eval(k)}},function(){q===u&&(K(),f.$emit("$includeContentError",e))}),f.$emit("$includeContentRequested",e)):(K(),r.template=null)})}}}}],ye=["$compile",function(a){return{restrict:"ECA",
230
-priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Ec(f.template,X).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],ie=Ia({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),je=Ia({terminal:!0,priority:1E3}),ke=["$locale","$interpolate",function(a,c){var d=/{}/g,e=/^when(Minus)?(.+)$/;return{restrict:"EA",link:function(f,g,h){function k(a){g.text(a||"")}var l=
231
-h.count,m=h.$attr.when&&g.attr(h.$attr.when),p=h.offset||0,q=f.$eval(m)||{},t={},m=c.startSymbol(),s=c.endSymbol(),u=m+l+"-"+p+s,n=ha.noop,v;r(h,function(a,c){var d=e.exec(c);d&&(d=(d[1]?"-":"")+Q(d[2]),q[d]=g.attr(h.$attr[c]))});r(q,function(a,e){t[e]=c(a.replace(d,u))});f.$watch(l,function(c){c=parseFloat(c);var d=isNaN(c);d||c in q||(c=a.pluralCat(c-p));c===v||d&&isNaN(v)||(n(),n=f.$watch(t[c],k),v=c)})}}}],le=["$parse","$animate",function(a,c){var d=A("ngRepeat"),e=function(a,c,d,e,l,m,p){a[d]=
232
-e;l&&(a[l]=m);a.$index=c;a.$first=0===c;a.$last=c===p-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(c&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,k=X.createComment(" end ngRepeat: "+h+" "),l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw d("iexp",h);var m=l[1],p=l[2],q=l[3],t=l[4],l=m.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);
233
-if(!l)throw d("iidexp",m);var s=l[3]||l[1],y=l[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(q)))throw d("badident",q);var n,v,w,A,E={$id:Ma};t?n=a(t):(w=function(a,c){return Ma(c)},A=function(a){return a});return function(a,f,g,l,m){n&&(v=function(c,d,e){y&&(E[y]=c);E[s]=d;E.$index=e;return n(a,E)});var t=ia();a.$watchCollection(p,function(g){var l,n,p=f[0],F,E=ia(),C,H,G,T,B,x,z;q&&(a[q]=g);if(Ra(g))B=g,n=v||
234
-w;else{n=v||A;B=[];for(z in g)g.hasOwnProperty(z)&&"$"!=z.charAt(0)&&B.push(z);B.sort()}C=B.length;z=Array(C);for(l=0;l<C;l++)if(H=g===B?l:B[l],G=g[H],T=n(H,G,l),t[T])x=t[T],delete t[T],E[T]=x,z[l]=x;else{if(E[T])throw r(z,function(a){a&&a.scope&&(t[a.id]=a)}),d("dupes",h,T,G);z[l]={id:T,scope:u,clone:u};E[T]=!0}for(F in t){x=t[F];T=qb(x.clone);c.leave(T);if(T[0].parentNode)for(l=0,n=T.length;l<n;l++)T[l].$$NG_REMOVED=!0;x.scope.$destroy()}for(l=0;l<C;l++)if(H=g===B?l:B[l],G=g[H],x=z[l],x.scope){F=
235
-p;do F=F.nextSibling;while(F&&F.$$NG_REMOVED);x.clone[0]!=F&&c.move(qb(x.clone),null,D(p));p=x.clone[x.clone.length-1];e(x.scope,l,s,G,y,H,C)}else m(function(a,d){x.scope=d;var f=k.cloneNode(!1);a[a.length++]=f;c.enter(a,null,D(p));p=f;x.clone=a;E[x.id]=x;e(x.scope,l,s,G,y,H,C)});t=E})}}}}],me=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngShow,function(c){a[c?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],fe=["$animate",
236
-function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],ne=Ia(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&r(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),oe=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,f){var g=[],h=[],k=[],l=[],m=function(a,c){return function(){a.splice(c,
237
-1)}};c.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=k.length;d<e;++d)a.cancel(k[d]);d=k.length=0;for(e=l.length;d<e;++d){var s=qb(h[d].clone);l[d].$destroy();(k[d]=a.leave(s)).then(m(k,d))}h.length=0;l.length=0;(g=f.cases["!"+c]||f.cases["?"])&&r(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=X.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],pe=Ia({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,
238
-link:function(a,c,d,e,f){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),qe=Ia({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:f,element:c})}}),se=Ia({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw A("ngTransclude")("orphan",va(c));f(function(a){c.empty();c.append(a)})}}),Td=["$templateCache",function(a){return{restrict:"E",
239
-terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],dg=A("ngOptions"),re=ca({restrict:"A",terminal:!0}),Ud=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,e={$setViewValue:H};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,
240
-c,d){var k=this,l={},m=e,p;k.databound=d.ngModel;k.init=function(a,c,d){m=a;p=d};k.addOption=function(c,d){La(c,'"option value"');l[c]=!0;m.$viewValue==c&&(a.val(c),p.parent()&&p.remove());d&&d[0].hasAttribute("selected")&&(d[0].selected=!0)};k.removeOption=function(a){this.hasOption(a)&&(delete l[a],m.$viewValue===a&&this.renderUnknownOption(a))};k.renderUnknownOption=function(c){c="? "+Ma(c)+" ?";p.val(c);a.prepend(p);a.val(c);p.prop("selected",!0)};k.hasOption=function(a){return l.hasOwnProperty(a)};
241
-c.$on("$destroy",function(){k.renderUnknownOption=H})}],link:function(e,g,h,k){function l(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(E.parent()&&E.remove(),c.val(a),""===a&&n.prop("selected",!0)):C(a)&&n?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){E.parent()&&E.remove();d.$setViewValue(c.val())})})}function m(a,c,d){var e;d.$render=function(){var a=new cb(d.$viewValue);r(c.find("option"),function(c){c.selected=y(a.get(c.value))})};a.$watch(function(){ga(e,
242
-d.$viewValue)||(e=qa(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a=[];r(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function p(e,f,g){function h(a,c,d){U[B]=d;G&&(U[G]=c);return a(e,U)}function k(a){var c;if(t)if(L&&x(a)){c=new cb([]);for(var d=0;d<a.length;d++)c.put(h(L,null,a[d]),!0)}else c=new cb(a);else L&&(a=h(L,null,a));return function(d,e){var f;f=L?L:C?C:z;return t?y(c.remove(h(f,d,e))):a===h(f,d,e)}}function l(){v||(e.$$postDigest(n),
243
-v=!0)}function m(a,c,d){a[c]=a[c]||0;a[c]+=d?1:-1}function n(){v=!1;var a={"":[]},c=[""],d,l,p,s,u;p=g.$viewValue;s=O(e)||[];var C=G?Object.keys(s).sort():s,x,B,D,z,S={};u=k(p);var P=!1,V,X;Q={};for(z=0;D=C.length,z<D;z++){x=z;if(G&&(x=C[z],"$"===x.charAt(0)))continue;B=s[x];d=h(J,x,B)||"";(l=a[d])||(l=a[d]=[],c.push(d));d=u(x,B);P=P||d;B=h(E,x,B);B=y(B)?B:"";X=L?L(e,U):G?C[z]:z;L&&(Q[X]=x);l.push({id:X,label:B,selected:d})}t||(A||null===p?a[""].unshift({id:"",label:"",selected:!P}):P||a[""].unshift({id:"?",
244
-label:"",selected:!0}));x=0;for(C=c.length;x<C;x++){d=c[x];l=a[d];R.length<=x?(p={element:H.clone().attr("label",d),label:l.label},s=[p],R.push(s),f.append(p.element)):(s=R[x],p=s[0],p.label!=d&&p.element.attr("label",p.label=d));P=null;z=0;for(D=l.length;z<D;z++)d=l[z],(u=s[z+1])?(P=u.element,u.label!==d.label&&(m(S,u.label,!1),m(S,d.label,!0),P.text(u.label=d.label),P.prop("label",u.label)),u.id!==d.id&&P.val(u.id=d.id),P[0].selected!==d.selected&&(P.prop("selected",u.selected=d.selected),Pa&&P.prop("selected",
245
-u.selected))):(""===d.id&&A?V=A:(V=w.clone()).val(d.id).prop("selected",d.selected).attr("selected",d.selected).prop("label",d.label).text(d.label),s.push(u={element:V,label:d.label,id:d.id,selected:d.selected}),m(S,d.label,!0),P?P.after(V):p.element.append(V),P=V);for(z++;s.length>z;)d=s.pop(),m(S,d.label,!1),d.element.remove()}for(;R.length>x;){l=R.pop();for(z=1;z<l.length;++z)m(S,l[z].label,!1);l[0].element.remove()}r(S,function(a,c){0<a?q.addOption(c):0>a&&q.removeOption(c)})}var p;if(!(p=s.match(d)))throw dg("iexp",
246
-s,va(f));var E=c(p[2]||p[1]),B=p[4]||p[6],D=/ as /.test(p[0])&&p[1],C=D?c(D):null,G=p[5],J=c(p[3]||""),z=c(p[2]?p[1]:B),O=c(p[7]),L=p[8]?c(p[8]):null,Q={},R=[[{element:f,label:""}]],U={};A&&(a(A)(e),A.removeClass("ng-scope"),A.remove());f.empty();f.on("change",function(){e.$apply(function(){var a=O(e)||[],c;if(t)c=[],r(f.val(),function(d){d=L?Q[d]:d;c.push("?"===d?u:""===d?null:h(C?C:z,d,a[d]))});else{var d=L?Q[f.val()]:f.val();c="?"===d?u:""===d?null:h(C?C:z,d,a[d])}g.$setViewValue(c);n()})});g.$render=
247
-n;e.$watchCollection(O,l);e.$watchCollection(function(){var a=O(e),c;if(a&&x(a)){c=Array(a.length);for(var d=0,f=a.length;d<f;d++)c[d]=h(E,d,a[d])}else if(a)for(d in c={},a)a.hasOwnProperty(d)&&(c[d]=h(E,d,a[d]));return c},l);t&&e.$watchCollection(function(){return g.$modelValue},l)}if(k[1]){var q=k[0];k=k[1];var t=h.multiple,s=h.ngOptions,A=!1,n,v=!1,w=D(X.createElement("option")),H=D(X.createElement("optgroup")),E=w.clone();h=0;for(var B=g.children(),G=B.length;h<G;h++)if(""===B[h].value){n=A=B.eq(h);
248
-break}q.init(k,A,E);t&&(k.$isEmpty=function(a){return!a||0===a.length});s?p(e,g,k):t?m(e,g,k):l(e,g,k,q)}}}}],Wd=["$interpolate",function(a){var c={addOption:H,removeOption:H};return{restrict:"E",priority:100,compile:function(d,e){if(C(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a,d,e){var l=d.parent(),m=l.data("$selectController")||l.parent().data("$selectController");m&&m.databound||(m=c);f?a.$watch(f,function(a,c){e.$set("value",a);c!==a&&m.removeOption(c);m.addOption(a,
249
-d)}):m.addOption(e.value,d);d.on("$destroy",function(){m.removeOption(e.value)})}}}}],Vd=ca({restrict:"E",terminal:!1});U.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(Ld(),Nd(ha),D(X).ready(function(){Hd(X,sc)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
250
-//# sourceMappingURL=angular.min.js.map
securis/src/main/webapp/js/angular/angular.min.js.map
deleted file mode 100644
....@@ -1,8 +0,0 @@
1
-{
2
-"version":3,
3
-"file":"angular.min.js",
4
-"lineCount":249,
5
-"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAmBC,CAAnB,CAA8B,CAgCvCC,QAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,SAAAA,EAAAA,CAAAA,IAAAA,EAAAA,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,sCAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAAA,OAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,GAAAA,CAAAA,GAAAA,EAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,EAAAA,GAAAA,KAAAA,EAAAA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,UAAAA,EAAAA,MAAAA,EAAAA,CAAAA,CAAAA,SAAAA,EAAAA,QAAAA,CAAAA,aAAAA,CAAAA,EAAAA,CAAAA,CAAAA,WAAAA,EAAAA,MAAAA,EAAAA,CAAAA,WAAAA,CAAAA,QAAAA,EAAAA,MAAAA,EAAAA,CAAAA,IAAAA,UAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CA2NAC,QAASA,GAAW,CAACC,CAAD,CAAM,CACxB,GAAW,IAAX,EAAIA,CAAJ,EAAmBC,EAAA,CAASD,CAAT,CAAnB,CACE,MAAO,CAAA,CAGT,KAAIE,EAASF,CAAAE,OAEb,OAAIF,EAAAG,SAAJ;AAAqBC,EAArB,EAA0CF,CAA1C,CACS,CAAA,CADT,CAIOG,CAAA,CAASL,CAAT,CAJP,EAIwBM,CAAA,CAAQN,CAAR,CAJxB,EAImD,CAJnD,GAIwCE,CAJxC,EAKyB,QALzB,GAKO,MAAOA,EALd,EAK8C,CAL9C,CAKqCA,CALrC,EAKoDA,CALpD,CAK6D,CAL7D,GAKmEF,EAZ3C,CAkD1BO,QAASA,EAAO,CAACP,CAAD,CAAMQ,CAAN,CAAgBC,CAAhB,CAAyB,CAAA,IACnCC,CADmC,CAC9BR,CACT,IAAIF,CAAJ,CACE,GAAIW,CAAA,CAAWX,CAAX,CAAJ,CACE,IAAKU,CAAL,GAAYV,EAAZ,CAGa,WAAX,EAAIU,CAAJ,EAAiC,QAAjC,EAA0BA,CAA1B,EAAoD,MAApD,EAA6CA,CAA7C,EAAgEV,CAAAY,eAAhE,EAAsF,CAAAZ,CAAAY,eAAA,CAAmBF,CAAnB,CAAtF,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBT,CAAA,CAAIU,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCV,CAAtC,CALN,KAQO,IAAIM,CAAA,CAAQN,CAAR,CAAJ,EAAoBD,EAAA,CAAYC,CAAZ,CAApB,CAAsC,CAC3C,IAAIc,EAA6B,QAA7BA,GAAc,MAAOd,EACpBU,EAAA,CAAM,CAAX,KAAcR,CAAd,CAAuBF,CAAAE,OAAvB,CAAmCQ,CAAnC,CAAyCR,CAAzC,CAAiDQ,CAAA,EAAjD,CACE,CAAII,CAAJ,EAAmBJ,CAAnB,GAA0BV,EAA1B,GACEQ,CAAAK,KAAA,CAAcJ,CAAd,CAAuBT,CAAA,CAAIU,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCV,CAAtC,CAJuC,CAAtC,IAOA,IAAIA,CAAAO,QAAJ,EAAmBP,CAAAO,QAAnB,GAAmCA,CAAnC,CACHP,CAAAO,QAAA,CAAYC,CAAZ,CAAsBC,CAAtB,CAA+BT,CAA/B,CADG,KAGL,KAAKU,CAAL,GAAYV,EAAZ,CACMA,CAAAY,eAAA,CAAmBF,CAAnB,CAAJ,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBT,CAAA,CAAIU,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCV,CAAtC,CAKR,OAAOA,EA5BgC,CAmCzCe,QAASA,GAAa,CAACf,CAAD,CAAMQ,CAAN,CAAgBC,CAAhB,CAAyB,CAE7C,IADA,IAAIO,EAJGC,MAAAD,KAAA,CAIehB,CAJf,CAAAkB,KAAA,EAIP,CACSC,EAAI,CAAb,CAAgBA,CAAhB,CAAoBH,CAAAd,OAApB,CAAiCiB,CAAA,EAAjC,CACEX,CAAAK,KAAA,CAAcJ,CAAd;AAAuBT,CAAA,CAAIgB,CAAA,CAAKG,CAAL,CAAJ,CAAvB,CAAqCH,CAAA,CAAKG,CAAL,CAArC,CAEF,OAAOH,EALsC,CAc/CI,QAASA,GAAa,CAACC,CAAD,CAAa,CACjC,MAAO,SAAQ,CAACC,CAAD,CAAQZ,CAAR,CAAa,CAAEW,CAAA,CAAWX,CAAX,CAAgBY,CAAhB,CAAF,CADK,CAcnCC,QAASA,GAAO,EAAG,CACjB,MAAO,EAAEC,EADQ,CAUnBC,QAASA,GAAU,CAACzB,CAAD,CAAM0B,CAAN,CAAS,CACtBA,CAAJ,CACE1B,CAAA2B,UADF,CACkBD,CADlB,CAIE,OAAO1B,CAAA2B,UALiB,CAyB5BC,QAASA,EAAM,CAACC,CAAD,CAAM,CAGnB,IAFA,IAAIH,EAAIG,CAAAF,UAAR,CAESR,EAAI,CAFb,CAEgBW,EAAKC,SAAA7B,OAArB,CAAuCiB,CAAvC,CAA2CW,CAA3C,CAA+CX,CAAA,EAA/C,CAAoD,CAClD,IAAInB,EAAM+B,SAAA,CAAUZ,CAAV,CACV,IAAInB,CAAJ,CAEE,IADA,IAAIgB,EAAOC,MAAAD,KAAA,CAAYhB,CAAZ,CAAX,CACSgC,EAAI,CADb,CACgBC,EAAKjB,CAAAd,OAArB,CAAkC8B,CAAlC,CAAsCC,CAAtC,CAA0CD,CAAA,EAA1C,CAA+C,CAC7C,IAAItB,EAAMM,CAAA,CAAKgB,CAAL,CACVH,EAAA,CAAInB,CAAJ,CAAA,CAAWV,CAAA,CAAIU,CAAJ,CAFkC,CAJC,CAWpDe,EAAA,CAAWI,CAAX,CAAgBH,CAAhB,CACA,OAAOG,EAfY,CAkBrBK,QAASA,EAAG,CAACC,CAAD,CAAM,CAChB,MAAOC,SAAA,CAASD,CAAT,CAAc,EAAd,CADS,CAyBlBE,QAASA,EAAI,EAAG,EAoBhBC,QAASA,GAAQ,CAACC,CAAD,CAAI,CAAC,MAAOA,EAAR,CAIrBC,QAASA,GAAO,CAAClB,CAAD,CAAQ,CAAC,MAAO,SAAQ,EAAG,CAAC,MAAOA,EAAR,CAAnB,CAcxBmB,QAASA,EAAW,CAACnB,CAAD,CAAQ,CAAC,MAAwB,WAAxB,GAAO,MAAOA,EAAf,CAe5BoB,QAASA,EAAS,CAACpB,CAAD,CAAQ,CAAC,MAAwB,WAAxB;AAAO,MAAOA,EAAf,CAgB1BqB,QAASA,EAAQ,CAACrB,CAAD,CAAQ,CAEvB,MAAiB,KAAjB,GAAOA,CAAP,EAA0C,QAA1C,GAAyB,MAAOA,EAFT,CAkBzBjB,QAASA,EAAQ,CAACiB,CAAD,CAAQ,CAAC,MAAwB,QAAxB,GAAO,MAAOA,EAAf,CAezBsB,QAASA,EAAQ,CAACtB,CAAD,CAAQ,CAAC,MAAwB,QAAxB,GAAO,MAAOA,EAAf,CAezBuB,QAASA,GAAM,CAACvB,CAAD,CAAQ,CACrB,MAAgC,eAAhC,GAAOwB,EAAAjC,KAAA,CAAcS,CAAd,CADc,CA+BvBX,QAASA,EAAU,CAACW,CAAD,CAAQ,CAAC,MAAwB,UAAxB,GAAO,MAAOA,EAAf,CAU3ByB,QAASA,GAAQ,CAACzB,CAAD,CAAQ,CACvB,MAAgC,iBAAhC,GAAOwB,EAAAjC,KAAA,CAAcS,CAAd,CADgB,CAYzBrB,QAASA,GAAQ,CAACD,CAAD,CAAM,CACrB,MAAOA,EAAP,EAAcA,CAAAL,OAAd,GAA6BK,CADR,CAKvBgD,QAASA,GAAO,CAAChD,CAAD,CAAM,CACpB,MAAOA,EAAP,EAAcA,CAAAiD,WAAd,EAAgCjD,CAAAkD,OADZ,CAetBC,QAASA,GAAS,CAAC7B,CAAD,CAAQ,CACxB,MAAwB,SAAxB,GAAO,MAAOA,EADU,CAmC1B8B,QAASA,GAAS,CAACC,CAAD,CAAO,CACvB,MAAO,EAAGA,CAAAA,CAAH,EACJ,EAAAA,CAAAC,SAAA,EACGD,CAAAE,KADH,EACgBF,CAAAG,KADhB,EAC6BH,CAAAI,KAD7B,CADI,CADgB,CAUzBC,QAASA,GAAO,CAACvB,CAAD,CAAM,CAAA,IAChBnC,EAAM,EAAI2D;CAAAA,CAAQxB,CAAAyB,MAAA,CAAU,GAAV,CAAtB,KAAsCzC,CACtC,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBwC,CAAAzD,OAAhB,CAA8BiB,CAAA,EAA9B,CACEnB,CAAA,CAAK2D,CAAA,CAAMxC,CAAN,CAAL,CAAA,CAAkB,CAAA,CACpB,OAAOnB,EAJa,CAQtB6D,QAASA,GAAS,CAACC,CAAD,CAAU,CAC1B,MAAOC,EAAA,CAAUD,CAAAR,SAAV,EAA+BQ,CAAA,CAAQ,CAAR,CAA/B,EAA6CA,CAAA,CAAQ,CAAR,CAAAR,SAA7C,CADmB,CAQ5BU,QAASA,GAAW,CAACC,CAAD,CAAQ3C,CAAR,CAAe,CACjC,IAAI4C,EAAQD,CAAAE,QAAA,CAAc7C,CAAd,CACC,EAAb,EAAI4C,CAAJ,EACED,CAAAG,OAAA,CAAaF,CAAb,CAAoB,CAApB,CACF,OAAO5C,EAJ0B,CAiEnC+C,QAASA,GAAI,CAACC,CAAD,CAASC,CAAT,CAAsBC,CAAtB,CAAmCC,CAAnC,CAA8C,CACzD,GAAIxE,EAAA,CAASqE,CAAT,CAAJ,EAAwBtB,EAAA,CAAQsB,CAAR,CAAxB,CACE,KAAMI,GAAA,CAAS,MAAT,CAAN,CAIF,GAAKH,CAAL,CAeO,CACL,GAAID,CAAJ,GAAeC,CAAf,CAA4B,KAAMG,GAAA,CAAS,KAAT,CAAN,CAG5BF,CAAA,CAAcA,CAAd,EAA6B,EAC7BC,EAAA,CAAYA,CAAZ,EAAyB,EAEzB,IAAI9B,CAAA,CAAS2B,CAAT,CAAJ,CAAsB,CACpB,IAAIJ,EAAQM,CAAAL,QAAA,CAAoBG,CAApB,CACZ,IAAe,EAAf,GAAIJ,CAAJ,CAAkB,MAAOO,EAAA,CAAUP,CAAV,CAEzBM,EAAAG,KAAA,CAAiBL,CAAjB,CACAG,EAAAE,KAAA,CAAeJ,CAAf,CALoB,CAStB,GAAIjE,CAAA,CAAQgE,CAAR,CAAJ,CAEE,IAAS,IAAAnD,EADToD,CAAArE,OACSiB,CADY,CACrB,CAAgBA,CAAhB,CAAoBmD,CAAApE,OAApB,CAAmCiB,CAAA,EAAnC,CACEyD,CAKA,CALSP,EAAA,CAAKC,CAAA,CAAOnD,CAAP,CAAL,CAAgB,IAAhB,CAAsBqD,CAAtB,CAAmCC,CAAnC,CAKT,CAJI9B,CAAA,CAAS2B,CAAA,CAAOnD,CAAP,CAAT,CAIJ,GAHEqD,CAAAG,KAAA,CAAiBL,CAAA,CAAOnD,CAAP,CAAjB,CACA,CAAAsD,CAAAE,KAAA,CAAeC,CAAf,CAEF,EAAAL,CAAAI,KAAA,CAAiBC,CAAjB,CARJ,KAUO,CACL,IAAIlD,EAAI6C,CAAA5C,UACJrB,EAAA,CAAQiE,CAAR,CAAJ,CACEA,CAAArE,OADF;AACuB,CADvB,CAGEK,CAAA,CAAQgE,CAAR,CAAqB,QAAQ,CAACjD,CAAD,CAAQZ,CAAR,CAAa,CACxC,OAAO6D,CAAA,CAAY7D,CAAZ,CADiC,CAA1C,CAIF,KAASA,CAAT,GAAgB4D,EAAhB,CACMA,CAAA1D,eAAA,CAAsBF,CAAtB,CAAJ,GACEkE,CAKA,CALSP,EAAA,CAAKC,CAAA,CAAO5D,CAAP,CAAL,CAAkB,IAAlB,CAAwB8D,CAAxB,CAAqCC,CAArC,CAKT,CAJI9B,CAAA,CAAS2B,CAAA,CAAO5D,CAAP,CAAT,CAIJ,GAHE8D,CAAAG,KAAA,CAAiBL,CAAA,CAAO5D,CAAP,CAAjB,CACA,CAAA+D,CAAAE,KAAA,CAAeC,CAAf,CAEF,EAAAL,CAAA,CAAY7D,CAAZ,CAAA,CAAmBkE,CANrB,CASFnD,GAAA,CAAW8C,CAAX,CAAuB7C,CAAvB,CAnBK,CA1BF,CAfP,IAEE,IADA6C,CACA,CADcD,CACd,CACMhE,CAAA,CAAQgE,CAAR,CAAJ,CACEC,CADF,CACgBF,EAAA,CAAKC,CAAL,CAAa,EAAb,CAAiBE,CAAjB,CAA8BC,CAA9B,CADhB,CAEW5B,EAAA,CAAOyB,CAAP,CAAJ,CACLC,CADK,CACS,IAAIM,IAAJ,CAASP,CAAAQ,QAAA,EAAT,CADT,CAEI/B,EAAA,CAASuB,CAAT,CAAJ,EACLC,CACA,CADc,IAAIQ,MAAJ,CAAWT,CAAAA,OAAX,CAA0BA,CAAAxB,SAAA,EAAAkC,MAAA,CAAwB,SAAxB,CAAA,CAAmC,CAAnC,CAA1B,CACd,CAAAT,CAAAU,UAAA,CAAwBX,CAAAW,UAFnB,EAGItC,CAAA,CAAS2B,CAAT,CAHJ,GAIDY,CACJ,CADkBjE,MAAAkE,OAAA,CAAclE,MAAAmE,eAAA,CAAsBd,CAAtB,CAAd,CAClB,CAAAC,CAAA,CAAcF,EAAA,CAAKC,CAAL,CAAaY,CAAb,CAA0BV,CAA1B,CAAuCC,CAAvC,CALT,CAyDX,OAAOF,EAtEkD,CA8E3Dc,QAASA,GAAW,CAACC,CAAD,CAAMzD,CAAN,CAAW,CAC7B,GAAIvB,CAAA,CAAQgF,CAAR,CAAJ,CAAkB,CAChBzD,CAAA,CAAMA,CAAN,EAAa,EAEb,KAHgB,IAGPV,EAAI,CAHG,CAGAW,EAAKwD,CAAApF,OAArB,CAAiCiB,CAAjC,CAAqCW,CAArC,CAAyCX,CAAA,EAAzC,CACEU,CAAA,CAAIV,CAAJ,CAAA,CAASmE,CAAA,CAAInE,CAAJ,CAJK,CAAlB,IAMO,IAAIwB,CAAA,CAAS2C,CAAT,CAAJ,CAGL,IAAS5E,CAAT,GAFAmB,EAEgByD,CAFVzD,CAEUyD,EAFH,EAEGA,CAAAA,CAAhB,CACE,GAAwB,GAAxB,GAAM5E,CAAA6E,OAAA,CAAW,CAAX,CAAN,EAAiD,GAAjD,GAA+B7E,CAAA6E,OAAA,CAAW,CAAX,CAA/B,CACE1D,CAAA,CAAInB,CAAJ,CAAA;AAAW4E,CAAA,CAAI5E,CAAJ,CAKjB,OAAOmB,EAAP,EAAcyD,CAjBe,CAkD/BE,QAASA,GAAM,CAACC,CAAD,CAAKC,CAAL,CAAS,CACtB,GAAID,CAAJ,GAAWC,CAAX,CAAe,MAAO,CAAA,CACtB,IAAW,IAAX,GAAID,CAAJ,EAA0B,IAA1B,GAAmBC,CAAnB,CAAgC,MAAO,CAAA,CACvC,IAAID,CAAJ,GAAWA,CAAX,EAAiBC,CAAjB,GAAwBA,CAAxB,CAA4B,MAAO,CAAA,CAHb,KAIlBC,EAAK,MAAOF,EAJM,CAIsB/E,CAC5C,IAAIiF,CAAJ,EADyBC,MAAOF,EAChC,EACY,QADZ,EACMC,CADN,CAEI,GAAIrF,CAAA,CAAQmF,CAAR,CAAJ,CAAiB,CACf,GAAK,CAAAnF,CAAA,CAAQoF,CAAR,CAAL,CAAkB,MAAO,CAAA,CACzB,KAAKxF,CAAL,CAAcuF,CAAAvF,OAAd,GAA4BwF,CAAAxF,OAA5B,CAAuC,CACrC,IAAKQ,CAAL,CAAW,CAAX,CAAcA,CAAd,CAAoBR,CAApB,CAA4BQ,CAAA,EAA5B,CACE,GAAK,CAAA8E,EAAA,CAAOC,CAAA,CAAG/E,CAAH,CAAP,CAAgBgF,CAAA,CAAGhF,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CAExC,OAAO,CAAA,CAJ8B,CAFxB,CAAjB,IAQO,CAAA,GAAImC,EAAA,CAAO4C,CAAP,CAAJ,CACL,MAAK5C,GAAA,CAAO6C,CAAP,CAAL,CACOF,EAAA,CAAOC,CAAAX,QAAA,EAAP,CAAqBY,CAAAZ,QAAA,EAArB,CADP,CAAwB,CAAA,CAEnB,IAAI/B,EAAA,CAAS0C,CAAT,CAAJ,EAAoB1C,EAAA,CAAS2C,CAAT,CAApB,CACL,MAAOD,EAAA3C,SAAA,EAAP,EAAwB4C,CAAA5C,SAAA,EAExB,IAAIE,EAAA,CAAQyC,CAAR,CAAJ,EAAmBzC,EAAA,CAAQ0C,CAAR,CAAnB,EAAkCzF,EAAA,CAASwF,CAAT,CAAlC,EAAkDxF,EAAA,CAASyF,CAAT,CAAlD,EAAkEpF,CAAA,CAAQoF,CAAR,CAAlE,CAA+E,MAAO,CAAA,CACtFG,EAAA,CAAS,EACT,KAAKnF,CAAL,GAAY+E,EAAZ,CACE,GAAsB,GAAtB,GAAI/E,CAAA6E,OAAA,CAAW,CAAX,CAAJ,EAA6B,CAAA5E,CAAA,CAAW8E,CAAA,CAAG/E,CAAH,CAAX,CAA7B,CAAA,CACA,GAAK,CAAA8E,EAAA,CAAOC,CAAA,CAAG/E,CAAH,CAAP,CAAgBgF,CAAA,CAAGhF,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CACtCmF,EAAA,CAAOnF,CAAP,CAAA,CAAc,CAAA,CAFd,CAIF,IAAKA,CAAL,GAAYgF,EAAZ,CACE,GAAK,CAAAG,CAAAjF,eAAA,CAAsBF,CAAtB,CAAL;AACsB,GADtB,GACIA,CAAA6E,OAAA,CAAW,CAAX,CADJ,EAEIG,CAAA,CAAGhF,CAAH,CAFJ,GAEgBb,CAFhB,EAGK,CAAAc,CAAA,CAAW+E,CAAA,CAAGhF,CAAH,CAAX,CAHL,CAG0B,MAAO,CAAA,CAEnC,OAAO,CAAA,CAnBF,CAuBX,MAAO,CAAA,CAtCe,CA8DxBoF,QAASA,GAAM,CAACC,CAAD,CAASC,CAAT,CAAiB9B,CAAjB,CAAwB,CACrC,MAAO6B,EAAAD,OAAA,CAAcG,EAAApF,KAAA,CAAWmF,CAAX,CAAmB9B,CAAnB,CAAd,CAD8B,CA4BvCgC,QAASA,GAAI,CAACC,CAAD,CAAOC,CAAP,CAAW,CACtB,IAAIC,EAA+B,CAAnB,CAAAtE,SAAA7B,OAAA,CAxBT+F,EAAApF,KAAA,CAwB0CkB,SAxB1C,CAwBqDuE,CAxBrD,CAwBS,CAAiD,EACjE,OAAI,CAAA3F,CAAA,CAAWyF,CAAX,CAAJ,EAAwBA,CAAxB,WAAsCrB,OAAtC,CAcSqB,CAdT,CACSC,CAAAnG,OAAA,CACH,QAAQ,EAAG,CACT,MAAO6B,UAAA7B,OAAA,CACHkG,CAAAG,MAAA,CAASJ,CAAT,CAAeL,EAAA,CAAOO,CAAP,CAAkBtE,SAAlB,CAA6B,CAA7B,CAAf,CADG,CAEHqE,CAAAG,MAAA,CAASJ,CAAT,CAAeE,CAAf,CAHK,CADR,CAMH,QAAQ,EAAG,CACT,MAAOtE,UAAA7B,OAAA,CACHkG,CAAAG,MAAA,CAASJ,CAAT,CAAepE,SAAf,CADG,CAEHqE,CAAAvF,KAAA,CAAQsF,CAAR,CAHK,CATK,CAqBxBK,QAASA,GAAc,CAAC9F,CAAD,CAAMY,CAAN,CAAa,CAClC,IAAImF,EAAMnF,CAES,SAAnB,GAAI,MAAOZ,EAAX,EAAiD,GAAjD,GAA+BA,CAAA6E,OAAA,CAAW,CAAX,CAA/B,EAA0E,GAA1E,GAAwD7E,CAAA6E,OAAA,CAAW,CAAX,CAAxD,CACEkB,CADF,CACQ5G,CADR,CAEWI,EAAA,CAASqB,CAAT,CAAJ,CACLmF,CADK,CACC,SADD,CAEInF,CAAJ,EAAc1B,CAAd,GAA2B0B,CAA3B,CACLmF,CADK,CACC,WADD,CAEIzD,EAAA,CAAQ1B,CAAR,CAFJ;CAGLmF,CAHK,CAGC,QAHD,CAMP,OAAOA,EAb2B,CAgCpCC,QAASA,GAAM,CAAC1G,CAAD,CAAM2G,CAAN,CAAc,CAC3B,GAAmB,WAAnB,GAAI,MAAO3G,EAAX,CAAgC,MAAOH,EAClC+C,EAAA,CAAS+D,CAAT,CAAL,GACEA,CADF,CACWA,CAAA,CAAS,CAAT,CAAa,IADxB,CAGA,OAAOC,KAAAC,UAAA,CAAe7G,CAAf,CAAoBwG,EAApB,CAAoCG,CAApC,CALoB,CAqB7BG,QAASA,GAAQ,CAACC,CAAD,CAAO,CACtB,MAAO1G,EAAA,CAAS0G,CAAT,CAAA,CACDH,IAAAI,MAAA,CAAWD,CAAX,CADC,CAEDA,CAHgB,CAUxBE,QAASA,GAAW,CAACnD,CAAD,CAAU,CAC5BA,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CAAAqD,MAAA,EACV,IAAI,CAGFrD,CAAAsD,MAAA,EAHE,CAIF,MAAOC,CAAP,CAAU,EACZ,IAAIC,EAAWJ,CAAA,CAAO,OAAP,CAAAK,OAAA,CAAuBzD,CAAvB,CAAA0D,KAAA,EACf,IAAI,CACF,MAAO1D,EAAA,CAAQ,CAAR,CAAA3D,SAAA,GAAwBsH,EAAxB,CAAyC1D,CAAA,CAAUuD,CAAV,CAAzC,CACHA,CAAAtC,MAAA,CACQ,YADR,CAAA,CACsB,CADtB,CAAA0C,QAAA,CAEU,aAFV,CAEyB,QAAQ,CAAC1C,CAAD,CAAQ1B,CAAR,CAAkB,CAAE,MAAO,GAAP,CAAaS,CAAA,CAAUT,CAAV,CAAf,CAFnD,CAFF,CAKF,MAAO+D,CAAP,CAAU,CACV,MAAOtD,EAAA,CAAUuD,CAAV,CADG,CAbgB,CA8B9BK,QAASA,GAAqB,CAACrG,CAAD,CAAQ,CACpC,GAAI,CACF,MAAOsG,mBAAA,CAAmBtG,CAAnB,CADL,CAEF,MAAO+F,CAAP,CAAU,EAHwB,CAatCQ,QAASA,GAAa,CAAYC,CAAZ,CAAsB,CAAA,IACtC9H,EAAM,EADgC,CAC5B+H,CAD4B,CACjBrH,CACzBH,EAAA,CAAQqD,CAACkE,CAADlE,EAAa,EAAbA,OAAA,CAAuB,GAAvB,CAAR,CAAqC,QAAQ,CAACkE,CAAD,CAAW,CAClDA,CAAJ;CACEC,CAEA,CAFYD,CAAAJ,QAAA,CAAiB,KAAjB,CAAuB,KAAvB,CAAA9D,MAAA,CAAoC,GAApC,CAEZ,CADAlD,CACA,CADMiH,EAAA,CAAsBI,CAAA,CAAU,CAAV,CAAtB,CACN,CAAIrF,CAAA,CAAUhC,CAAV,CAAJ,GACM+F,CACJ,CADU/D,CAAA,CAAUqF,CAAA,CAAU,CAAV,CAAV,CAAA,CAA0BJ,EAAA,CAAsBI,CAAA,CAAU,CAAV,CAAtB,CAA1B,CAAgE,CAAA,CAC1E,CAAKnH,EAAAC,KAAA,CAAoBb,CAApB,CAAyBU,CAAzB,CAAL,CAEWJ,CAAA,CAAQN,CAAA,CAAIU,CAAJ,CAAR,CAAJ,CACLV,CAAA,CAAIU,CAAJ,CAAAiE,KAAA,CAAc8B,CAAd,CADK,CAGLzG,CAAA,CAAIU,CAAJ,CAHK,CAGM,CAACV,CAAA,CAAIU,CAAJ,CAAD,CAAU+F,CAAV,CALb,CACEzG,CAAA,CAAIU,CAAJ,CADF,CACa+F,CAHf,CAHF,CADsD,CAAxD,CAgBA,OAAOzG,EAlBmC,CAqB5CgI,QAASA,GAAU,CAAChI,CAAD,CAAM,CACvB,IAAIiI,EAAQ,EACZ1H,EAAA,CAAQP,CAAR,CAAa,QAAQ,CAACsB,CAAD,CAAQZ,CAAR,CAAa,CAC5BJ,CAAA,CAAQgB,CAAR,CAAJ,CACEf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAAC4G,CAAD,CAAa,CAClCD,CAAAtD,KAAA,CAAWwD,EAAA,CAAezH,CAAf,CAAoB,CAAA,CAApB,CAAX,EAC2B,CAAA,CAAf,GAAAwH,CAAA,CAAsB,EAAtB,CAA2B,GAA3B,CAAiCC,EAAA,CAAeD,CAAf,CAA2B,CAAA,CAA3B,CAD7C,EADkC,CAApC,CADF,CAMAD,CAAAtD,KAAA,CAAWwD,EAAA,CAAezH,CAAf,CAAoB,CAAA,CAApB,CAAX,EACsB,CAAA,CAAV,GAAAY,CAAA,CAAiB,EAAjB,CAAsB,GAAtB,CAA4B6G,EAAA,CAAe7G,CAAf,CAAsB,CAAA,CAAtB,CADxC,EAPgC,CAAlC,CAWA,OAAO2G,EAAA/H,OAAA,CAAe+H,CAAAG,KAAA,CAAW,GAAX,CAAf,CAAiC,EAbjB,CA4BzBC,QAASA,GAAgB,CAAC5B,CAAD,CAAM,CAC7B,MAAO0B,GAAA,CAAe1B,CAAf,CAAoB,CAAA,CAApB,CAAAiB,QAAA,CACY,OADZ,CACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ,CAEqB,GAFrB,CAAAA,QAAA,CAGY,OAHZ,CAGqB,GAHrB,CADsB,CAmB/BS,QAASA,GAAc,CAAC1B,CAAD,CAAM6B,CAAN,CAAuB,CAC5C,MAAOC,mBAAA,CAAmB9B,CAAnB,CAAAiB,QAAA,CACY,OADZ,CACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ;AAEqB,GAFrB,CAAAA,QAAA,CAGY,MAHZ,CAGoB,GAHpB,CAAAA,QAAA,CAIY,OAJZ,CAIqB,GAJrB,CAAAA,QAAA,CAKY,OALZ,CAKqB,GALrB,CAAAA,QAAA,CAMY,MANZ,CAMqBY,CAAA,CAAkB,KAAlB,CAA0B,GAN/C,CADqC,CAY9CE,QAASA,GAAc,CAAC1E,CAAD,CAAU2E,CAAV,CAAkB,CAAA,IACnCjF,CADmC,CAC7BrC,CAD6B,CAC1BW,EAAK4G,EAAAxI,OAClB4D,EAAA,CAAUoD,CAAA,CAAOpD,CAAP,CACV,KAAK3C,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBW,CAAhB,CAAoB,EAAEX,CAAtB,CAEE,GADAqC,CACI,CADGkF,EAAA,CAAevH,CAAf,CACH,CADuBsH,CACvB,CAAApI,CAAA,CAASmD,CAAT,CAAgBM,CAAAN,KAAA,CAAaA,CAAb,CAAhB,CAAJ,CACE,MAAOA,EAGX,OAAO,KATgC,CA2IzCmF,QAASA,GAAW,CAAC7E,CAAD,CAAU8E,CAAV,CAAqB,CAAA,IACnCC,CADmC,CAEnCC,CAFmC,CAGnCC,EAAS,EAGbxI,EAAA,CAAQmI,EAAR,CAAwB,QAAQ,CAACM,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KAEfJ,EAAAA,CAAL,EAAmB/E,CAAAoF,aAAnB,EAA2CpF,CAAAoF,aAAA,CAAqBD,CAArB,CAA3C,GACEJ,CACA,CADa/E,CACb,CAAAgF,CAAA,CAAShF,CAAAqF,aAAA,CAAqBF,CAArB,CAFX,CAHuC,CAAzC,CAQA1I,EAAA,CAAQmI,EAAR,CAAwB,QAAQ,CAACM,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KACpB,KAAIG,CAECP,EAAAA,CAAL,GAAoBO,CAApB,CAAgCtF,CAAAuF,cAAA,CAAsB,GAAtB,CAA4BJ,CAAAvB,QAAA,CAAa,GAAb,CAAkB,KAAlB,CAA5B,CAAuD,GAAvD,CAAhC,IACEmB,CACA,CADaO,CACb,CAAAN,CAAA,CAASM,CAAAD,aAAA,CAAuBF,CAAvB,CAFX,CAJuC,CAAzC,CASIJ,EAAJ,GACEE,CAAAO,SACA,CAD8D,IAC9D,GADkBd,EAAA,CAAeK,CAAf,CAA2B,WAA3B,CAClB,CAAAD,CAAA,CAAUC,CAAV,CAAsBC,CAAA,CAAS,CAACA,CAAD,CAAT,CAAoB,EAA1C,CAA8CC,CAA9C,CAFF,CAvBuC,CA+EzCH,QAASA,GAAS,CAAC9E,CAAD;AAAUyF,CAAV,CAAmBR,CAAnB,CAA2B,CACtCpG,CAAA,CAASoG,CAAT,CAAL,GAAuBA,CAAvB,CAAgC,EAAhC,CAIAA,EAAA,CAASnH,CAAA,CAHW4H,CAClBF,SAAU,CAAA,CADQE,CAGX,CAAsBT,CAAtB,CACT,KAAIU,EAAcA,QAAQ,EAAG,CAC3B3F,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CAEV,IAAIA,CAAA4F,SAAA,EAAJ,CAAwB,CACtB,IAAIC,EAAO7F,CAAA,CAAQ,CAAR,CAAD,GAAgBlE,CAAhB,CAA4B,UAA5B,CAAyCqH,EAAA,CAAYnD,CAAZ,CAEnD,MAAMY,GAAA,CACF,SADE,CAGFiF,CAAAjC,QAAA,CAAY,GAAZ,CAAgB,MAAhB,CAAAA,QAAA,CAAgC,GAAhC,CAAoC,MAApC,CAHE,CAAN,CAHsB,CASxB6B,CAAA,CAAUA,CAAV,EAAqB,EACrBA,EAAAK,QAAA,CAAgB,CAAC,UAAD,CAAa,QAAQ,CAACC,CAAD,CAAW,CAC9CA,CAAAvI,MAAA,CAAe,cAAf,CAA+BwC,CAA/B,CAD8C,CAAhC,CAAhB,CAIIiF,EAAAe,iBAAJ,EAEEP,CAAA5E,KAAA,CAAa,CAAC,kBAAD,CAAqB,QAAQ,CAACoF,CAAD,CAAmB,CAC3DA,CAAAD,iBAAA,CAAkC,CAAA,CAAlC,CAD2D,CAAhD,CAAb,CAKFP,EAAAK,QAAA,CAAgB,IAAhB,CACIF,EAAAA,CAAWM,EAAA,CAAeT,CAAf,CAAwBR,CAAAO,SAAxB,CACfI,EAAAO,OAAA,CAAgB,CAAC,YAAD,CAAe,cAAf,CAA+B,UAA/B,CAA2C,WAA3C,CACbC,QAAuB,CAACC,CAAD,CAAQrG,CAAR,CAAiBsG,CAAjB,CAA0BV,CAA1B,CAAoC,CAC1DS,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtBvG,CAAAwG,KAAA,CAAa,WAAb,CAA0BZ,CAA1B,CACAU,EAAA,CAAQtG,CAAR,CAAA,CAAiBqG,CAAjB,CAFsB,CAAxB,CAD0D,CAD9C,CAAhB,CAQA,OAAOT,EAlCoB,CAA7B;AAqCIa,EAAuB,wBArC3B,CAsCIC,EAAqB,sBAErB7K,EAAJ,EAAc4K,CAAAE,KAAA,CAA0B9K,CAAAsJ,KAA1B,CAAd,GACEF,CAAAe,iBACA,CAD0B,CAAA,CAC1B,CAAAnK,CAAAsJ,KAAA,CAActJ,CAAAsJ,KAAAvB,QAAA,CAAoB6C,CAApB,CAA0C,EAA1C,CAFhB,CAKA,IAAI5K,CAAJ,EAAe,CAAA6K,CAAAC,KAAA,CAAwB9K,CAAAsJ,KAAxB,CAAf,CACE,MAAOQ,EAAA,EAGT9J,EAAAsJ,KAAA,CAActJ,CAAAsJ,KAAAvB,QAAA,CAAoB8C,CAApB,CAAwC,EAAxC,CACdE,GAAAC,gBAAA,CAA0BC,QAAQ,CAACC,CAAD,CAAe,CAC/CtK,CAAA,CAAQsK,CAAR,CAAsB,QAAQ,CAAC/B,CAAD,CAAS,CACrCS,CAAA5E,KAAA,CAAamE,CAAb,CADqC,CAAvC,CAGAW,EAAA,EAJ+C,CAxDN,CA0E7CqB,QAASA,GAAmB,EAAG,CAC7BnL,CAAAsJ,KAAA,CAAc,uBAAd,CAAwCtJ,CAAAsJ,KACxCtJ,EAAAoL,SAAAC,OAAA,EAF6B,CAa/BC,QAASA,GAAc,CAACC,CAAD,CAAc,CACnC,MAAOR,GAAA5G,QAAA,CAAgBoH,CAAhB,CAAAxB,SAAA,EAAAyB,IAAA,CAA4C,eAA5C,CAD4B,CAKrCC,QAASA,GAAU,CAACnC,CAAD,CAAOoC,CAAP,CAAkB,CACnCA,CAAA,CAAYA,CAAZ,EAAyB,GACzB,OAAOpC,EAAAvB,QAAA,CAAa4D,EAAb,CAAgC,QAAQ,CAACC,CAAD,CAASC,CAAT,CAAc,CAC3D,OAAQA,CAAA,CAAMH,CAAN,CAAkB,EAA1B,EAAgCE,CAAAE,YAAA,EAD2B,CAAtD,CAF4B,CASrCC,QAASA,GAAU,EAAG,CACpB,IAAIC,CAEAC;EAAJ,GAUA,CALAC,EAKA,CALSlM,CAAAkM,OAKT,GAAcA,EAAAzF,GAAA0F,GAAd,EACE5E,CAaA,CAbS2E,EAaT,CAZAjK,CAAA,CAAOiK,EAAAzF,GAAP,CAAkB,CAChB+D,MAAO4B,EAAA5B,MADS,CAEhB6B,aAAcD,EAAAC,aAFE,CAGhBC,WAAYF,EAAAE,WAHI,CAIhBvC,SAAUqC,EAAArC,SAJM,CAKhBwC,cAAeH,EAAAG,cALC,CAAlB,CAYA,CADAP,CACA,CADoBE,EAAAM,UACpB,CAAAN,EAAAM,UAAA,CAAmBC,QAAQ,CAACC,CAAD,CAAQ,CACjC,IAAIC,CACJ,IAAKC,EAAL,CAQEA,EAAA,CAAmC,CAAA,CARrC,KACE,KADqC,IAC5BpL,EAAI,CADwB,CACrBqL,CAAhB,CAA2C,IAA3C,GAAuBA,CAAvB,CAA8BH,CAAA,CAAMlL,CAAN,CAA9B,EAAiDA,CAAA,EAAjD,CAEE,CADAmL,CACA,CADST,EAAAY,MAAA,CAAaD,CAAb,CAAmB,QAAnB,CACT,GAAcF,CAAAI,SAAd,EACEb,EAAA,CAAOW,CAAP,CAAAG,eAAA,CAA4B,UAA5B,CAMNhB,EAAA,CAAkBU,CAAlB,CAZiC,CAdrC,EA6BEnF,CA7BF,CA6BW0F,CAMX,CAHAlC,EAAA5G,QAGA,CAHkBoD,CAGlB,CAAA0E,EAAA,CAAkB,CAAA,CA7ClB,CAHoB,CAsDtBiB,QAASA,GAAS,CAACC,CAAD,CAAM7D,CAAN,CAAY8D,CAAZ,CAAoB,CACpC,GAAKD,CAAAA,CAAL,CACE,KAAMpI,GAAA,CAAS,MAAT,CAA2CuE,CAA3C,EAAmD,GAAnD,CAA0D8D,CAA1D,EAAoE,UAApE,CAAN,CAEF,MAAOD,EAJ6B,CAOtCE,QAASA,GAAW,CAACF,CAAD,CAAM7D,CAAN,CAAYgE,CAAZ,CAAmC,CACjDA,CAAJ,EAA6B3M,CAAA,CAAQwM,CAAR,CAA7B,GACIA,CADJ,CACUA,CAAA,CAAIA,CAAA5M,OAAJ,CAAiB,CAAjB,CADV,CAIA2M,GAAA,CAAUlM,CAAA,CAAWmM,CAAX,CAAV,CAA2B7D,CAA3B,CAAiC,sBAAjC;CACK6D,CAAA,EAAsB,QAAtB,GAAO,MAAOA,EAAd,CAAiCA,CAAAI,YAAAjE,KAAjC,EAAyD,QAAzD,CAAoE,MAAO6D,EADhF,EAEA,OAAOA,EAP8C,CAevDK,QAASA,GAAuB,CAAClE,CAAD,CAAOxI,CAAP,CAAgB,CAC9C,GAAa,gBAAb,GAAIwI,CAAJ,CACE,KAAMvE,GAAA,CAAS,SAAT,CAA8DjE,CAA9D,CAAN,CAF4C,CAchD2M,QAASA,GAAM,CAACpN,CAAD,CAAMqN,CAAN,CAAYC,CAAZ,CAA2B,CACxC,GAAKD,CAAAA,CAAL,CAAW,MAAOrN,EACdgB,EAAAA,CAAOqM,CAAAzJ,MAAA,CAAW,GAAX,CAKX,KAJA,IAAIlD,CAAJ,CACI6M,EAAevN,CADnB,CAEIwN,EAAMxM,CAAAd,OAFV,CAISiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBqM,CAApB,CAAyBrM,CAAA,EAAzB,CACET,CACA,CADMM,CAAA,CAAKG,CAAL,CACN,CAAInB,CAAJ,GACEA,CADF,CACQ,CAACuN,CAAD,CAAgBvN,CAAhB,EAAqBU,CAArB,CADR,CAIF,OAAK4M,CAAAA,CAAL,EAAsB3M,CAAA,CAAWX,CAAX,CAAtB,CACSkG,EAAA,CAAKqH,CAAL,CAAmBvN,CAAnB,CADT,CAGOA,CAhBiC,CAwB1CyN,QAASA,GAAa,CAACC,CAAD,CAAQ,CAG5B,IAAIrK,EAAOqK,CAAA,CAAM,CAAN,CACPC,EAAAA,CAAUD,CAAA,CAAMA,CAAAxN,OAAN,CAAqB,CAArB,CACd,KAAI0N,EAAa,CAACvK,CAAD,CAEjB,GAAG,CACDA,CAAA,CAAOA,CAAAwK,YACP,IAAKxK,CAAAA,CAAL,CAAW,KACXuK,EAAAjJ,KAAA,CAAgBtB,CAAhB,CAHC,CAAH,MAISA,CAJT,GAIkBsK,CAJlB,CAMA,OAAOzG,EAAA,CAAO0G,CAAP,CAbqB,CA4B9BE,QAASA,GAAS,EAAG,CACnB,MAAO7M,OAAAkE,OAAA,CAAc,IAAd,CADY,CAmBrB4I,QAASA,GAAiB,CAACpO,CAAD,CAAS,CAKjCqO,QAASA,EAAM,CAAChO,CAAD,CAAMiJ,CAAN,CAAYgF,CAAZ,CAAqB,CAClC,MAAOjO,EAAA,CAAIiJ,CAAJ,CAAP,GAAqBjJ,CAAA,CAAIiJ,CAAJ,CAArB,CAAiCgF,CAAA,EAAjC,CADkC,CAHpC,IAAIC,EAAkBpO,CAAA,CAAO,WAAP,CAAtB;AACI4E,EAAW5E,CAAA,CAAO,IAAP,CAMX4K,EAAAA,CAAUsD,CAAA,CAAOrO,CAAP,CAAe,SAAf,CAA0BsB,MAA1B,CAGdyJ,EAAAyD,SAAA,CAAmBzD,CAAAyD,SAAnB,EAAuCrO,CAEvC,OAAOkO,EAAA,CAAOtD,CAAP,CAAgB,QAAhB,CAA0B,QAAQ,EAAG,CAE1C,IAAInB,EAAU,EAqDd,OAAOT,SAAe,CAACG,CAAD,CAAOmF,CAAP,CAAiBC,CAAjB,CAA2B,CAE7C,GAAa,gBAAb,GAKsBpF,CALtB,CACE,KAAMvE,EAAA,CAAS,SAAT,CAIoBjE,QAJpB,CAAN,CAKA2N,CAAJ,EAAgB7E,CAAA3I,eAAA,CAAuBqI,CAAvB,CAAhB,GACEM,CAAA,CAAQN,CAAR,CADF,CACkB,IADlB,CAGA,OAAO+E,EAAA,CAAOzE,CAAP,CAAgBN,CAAhB,CAAsB,QAAQ,EAAG,CAuNtCqF,QAASA,EAAW,CAACC,CAAD,CAAWC,CAAX,CAAmBC,CAAnB,CAAiCC,CAAjC,CAAwC,CACrDA,CAAL,GAAYA,CAAZ,CAAoBC,CAApB,CACA,OAAO,SAAQ,EAAG,CAChBD,CAAA,CAAMD,CAAN,EAAsB,MAAtB,CAAA,CAA8B,CAACF,CAAD,CAAWC,CAAX,CAAmBzM,SAAnB,CAA9B,CACA,OAAO6M,EAFS,CAFwC,CAtN5D,GAAKR,CAAAA,CAAL,CACE,KAAMF,EAAA,CAAgB,OAAhB,CAEiDjF,CAFjD,CAAN,CAMF,IAAI0F,EAAc,EAAlB,CAGIE,EAAe,EAHnB,CAMIC,EAAY,EANhB,CAQI/F,EAASuF,CAAA,CAAY,WAAZ,CAAyB,QAAzB,CAAmC,MAAnC,CAA2CO,CAA3C,CARb,CAWID,EAAiB,CAEnBG,aAAcJ,CAFK,CAGnBK,cAAeH,CAHI,CAInBI,WAAYH,CAJO,CAenBV,SAAUA,CAfS,CAyBnBnF,KAAMA,CAzBa,CAsCnBsF,SAAUD,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAtCS,CAiDnBL,QAASK,CAAA,CAAY,UAAZ;AAAwB,SAAxB,CAjDU,CA4DnBY,QAASZ,CAAA,CAAY,UAAZ,CAAwB,SAAxB,CA5DU,CAuEnBhN,MAAOgN,CAAA,CAAY,UAAZ,CAAwB,OAAxB,CAvEY,CAmFnBa,SAAUb,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,SAApC,CAnFS,CAqHnBc,UAAWd,CAAA,CAAY,kBAAZ,CAAgC,UAAhC,CArHQ,CAgInBe,OAAQf,CAAA,CAAY,iBAAZ,CAA+B,UAA/B,CAhIW,CA4InBrC,WAAYqC,CAAA,CAAY,qBAAZ,CAAmC,UAAnC,CA5IO,CAyJnBgB,UAAWhB,CAAA,CAAY,kBAAZ,CAAgC,WAAhC,CAzJQ,CAsKnBvF,OAAQA,CAtKW,CAkLnBwG,IAAKA,QAAQ,CAACC,CAAD,CAAQ,CACnBV,CAAAnK,KAAA,CAAe6K,CAAf,CACA,OAAO,KAFY,CAlLF,CAwLjBnB,EAAJ,EACEtF,CAAA,CAAOsF,CAAP,CAGF,OAAOO,EA/M+B,CAAjC,CAXwC,CAvDP,CAArC,CAd0B,CA+bnCa,QAASA,GAAkB,CAAC/E,CAAD,CAAU,CACnC9I,CAAA,CAAO8I,CAAP,CAAgB,CACd,UAAa9B,EADC,CAEd,KAAQvE,EAFM,CAGd,OAAUzC,CAHI,CAId,OAAU4D,EAJI,CAKd,QAAW0B,CALG,CAMd,QAAW3G,CANG,CAOd,SAAYyJ,EAPE,CAQd,KAAQ3H,CARM,CASd,KAAQ6D,EATM,CAUd,OAAUQ,EAVI,CAWd,SAAYI,EAXE,CAYd,SAAYxE,EAZE,CAad,YAAeG,CAbD;AAcd,UAAaC,CAdC,CAed,SAAYrC,CAfE,CAgBd,WAAcM,CAhBA,CAiBd,SAAYgC,CAjBE,CAkBd,SAAYC,CAlBE,CAmBd,UAAaQ,EAnBC,CAoBd,QAAW9C,CApBG,CAqBd,QAAWoP,EArBG,CAsBd,OAAU7M,EAtBI,CAuBd,UAAakB,CAvBC,CAwBd,UAAa4L,EAxBC,CAyBd,UAAa,CAACC,QAAS,CAAV,CAzBC,CA0Bd,eAAkB3E,EA1BJ,CA2Bd,SAAYnL,CA3BE,CA4Bd,MAAS+P,EA5BK,CA6Bd,oBAAuB/E,EA7BT,CAAhB,CAgCAgF,GAAA,CAAgB/B,EAAA,CAAkBpO,CAAlB,CAChB,IAAI,CACFmQ,EAAA,CAAc,UAAd,CADE,CAEF,MAAOzI,CAAP,CAAU,CACVyI,EAAA,CAAc,UAAd,CAA0B,EAA1B,CAAAvB,SAAA,CAAuC,SAAvC,CAAkDwB,EAAlD,CADU,CAIZD,EAAA,CAAc,IAAd,CAAoB,CAAC,UAAD,CAApB,CAAkC,CAAC,UAAD,CAChCE,QAAiB,CAACnG,CAAD,CAAW,CAE1BA,CAAA0E,SAAA,CAAkB,CAChB0B,cAAeC,EADC,CAAlB,CAGArG,EAAA0E,SAAA,CAAkB,UAAlB,CAA8B4B,EAA9B,CAAAb,UAAA,CACY,CACNc,EAAGC,EADG,CAENC,MAAOC,EAFD,CAGNC,SAAUD,EAHJ,CAINE,KAAMC,EAJA,CAKNC,OAAQC,EALF,CAMNC,OAAQC,EANF,CAONC,MAAOC,EAPD,CAQNC,OAAQC,EARF,CASNC,OAAQC,EATF,CAUNC,WAAYC,EAVN,CAWNC,eAAgBC,EAXV;AAYNC,QAASC,EAZH,CAaNC,YAAaC,EAbP,CAcNC,WAAYC,EAdN,CAeNC,QAASC,EAfH,CAgBNC,aAAcC,EAhBR,CAiBNC,OAAQC,EAjBF,CAkBNC,OAAQC,EAlBF,CAmBNC,KAAMC,EAnBA,CAoBNC,UAAWC,EApBL,CAqBNC,OAAQC,EArBF,CAsBNC,cAAeC,EAtBT,CAuBNC,YAAaC,EAvBP,CAwBNC,SAAUC,EAxBJ,CAyBNC,OAAQC,EAzBF,CA0BNC,QAASC,EA1BH,CA2BNC,SAAUC,EA3BJ,CA4BNC,aAAcC,EA5BR,CA6BNC,gBAAiBC,EA7BX,CA8BNC,UAAWC,EA9BL,CA+BNC,aAAcC,EA/BR,CAgCNC,QAASC,EAhCH,CAiCNC,OAAQC,EAjCF,CAkCNC,SAAUC,EAlCJ,CAmCNC,QAASC,EAnCH,CAoCNC,UAAWD,EApCL,CAqCNE,SAAUC,EArCJ,CAsCNC,WAAYD,EAtCN,CAuCNE,UAAWC,EAvCL,CAwCNC,YAAaD,EAxCP,CAyCNE,UAAWC,EAzCL,CA0CNC,YAAaD,EA1CP,CA2CNE,QAASC,EA3CH,CA4CNC,eAAgBC,EA5CV,CADZ,CAAAhG,UAAA,CA+CY,CACRmD,UAAW8C,EADH,CA/CZ,CAAAjG,UAAA,CAkDYkG,EAlDZ,CAAAlG,UAAA,CAmDYmG,EAnDZ,CAoDA5L,EAAA0E,SAAA,CAAkB,CAChBmH,cAAeC,EADC;AAEhBC,SAAUC,EAFM,CAGhBC,SAAUC,EAHM,CAIhBC,cAAeC,EAJC,CAKhBC,YAAaC,EALG,CAMhBC,UAAWC,EANK,CAOhBC,kBAAmBC,EAPH,CAQhBC,QAASC,EARO,CAShBC,aAAcC,EATE,CAUhBC,UAAWC,EAVK,CAWhBC,MAAOC,EAXS,CAYhBC,aAAcC,EAZE,CAahBC,UAAWC,EAbK,CAchBC,KAAMC,EAdU,CAehBC,OAAQC,EAfQ,CAgBhBC,WAAYC,EAhBI,CAiBhBC,GAAIC,EAjBY,CAkBhBC,IAAKC,EAlBW,CAmBhBC,KAAMC,EAnBU,CAoBhBC,aAAcC,EApBE,CAqBhBC,SAAUC,EArBM,CAsBhBC,eAAgBC,EAtBA,CAuBhBC,iBAAkBC,EAvBF,CAwBhBC,cAAeC,EAxBC,CAyBhBC,SAAUC,EAzBM,CA0BhBC,QAASC,EA1BO,CA2BhBC,MAAOC,EA3BS,CA4BhBC,gBAAiBC,EA5BD,CA6BhBC,SAAUC,EA7BM,CAAlB,CAzD0B,CADI,CAAlC,CAxCmC,CAyQrCC,QAASA,GAAS,CAACnQ,CAAD,CAAO,CACvB,MAAOA,EAAAvB,QAAA,CACG2R,EADH,CACyB,QAAQ,CAACC,CAAD,CAAIjO,CAAJ,CAAeE,CAAf,CAAuBgO,CAAvB,CAA+B,CACnE,MAAOA,EAAA,CAAShO,CAAAiO,YAAA,EAAT,CAAgCjO,CAD4B,CADhE,CAAA7D,QAAA,CAIG+R,EAJH,CAIoB,OAJpB,CADgB,CAgCzBC,QAASA,GAAiB,CAACrW,CAAD,CAAO,CAG3BlD,CAAAA,CAAWkD,CAAAlD,SACf;MAAOA,EAAP,GAAoBC,EAApB,EAAyC,CAACD,CAA1C,EAxvBuBwZ,CAwvBvB,GAAsDxZ,CAJvB,CAOjCyZ,QAASA,GAAmB,CAACpS,CAAD,CAAO/G,CAAP,CAAgB,CAAA,IACtCoZ,CADsC,CACjClQ,CADiC,CAEtCmQ,EAAWrZ,CAAAsZ,uBAAA,EAF2B,CAGtCrM,EAAQ,EAEZ,IAfQsM,EAAAvP,KAAA,CAeajD,CAfb,CAeR,CAGO,CAELqS,CAAA,CAAMA,CAAN,EAAaC,CAAAG,YAAA,CAAqBxZ,CAAAyZ,cAAA,CAAsB,KAAtB,CAArB,CACbvQ,EAAA,CAAM,CAACwQ,EAAAC,KAAA,CAAqB5S,CAArB,CAAD,EAA+B,CAAC,EAAD,CAAK,EAAL,CAA/B,EAAyC,CAAzC,CAAAiE,YAAA,EACN4O,EAAA,CAAOC,EAAA,CAAQ3Q,CAAR,CAAP,EAAuB2Q,EAAAC,SACvBV,EAAAW,UAAA,CAAgBH,CAAA,CAAK,CAAL,CAAhB,CAA0B7S,CAAAE,QAAA,CAAa+S,EAAb,CAA+B,WAA/B,CAA1B,CAAwEJ,CAAA,CAAK,CAAL,CAIxE,KADAlZ,CACA,CADIkZ,CAAA,CAAK,CAAL,CACJ,CAAOlZ,CAAA,EAAP,CAAA,CACE0Y,CAAA,CAAMA,CAAAa,UAGRhN,EAAA,CAAQ5H,EAAA,CAAO4H,CAAP,CAAcmM,CAAAc,WAAd,CAERd,EAAA,CAAMC,CAAAc,WACNf,EAAAgB,YAAA,CAAkB,EAhBb,CAHP,IAEEnN,EAAA/I,KAAA,CAAWlE,CAAAqa,eAAA,CAAuBtT,CAAvB,CAAX,CAqBFsS,EAAAe,YAAA,CAAuB,EACvBf,EAAAU,UAAA,CAAqB,EACrBja,EAAA,CAAQmN,CAAR,CAAe,QAAQ,CAACrK,CAAD,CAAO,CAC5ByW,CAAAG,YAAA,CAAqB5W,CAArB,CAD4B,CAA9B,CAIA,OAAOyW,EAlCmC,CAqD5ClN,QAASA,EAAM,CAAC9I,CAAD,CAAU,CACvB,GAAIA,CAAJ,WAAuB8I,EAAvB,CACE,MAAO9I,EAGT,KAAIiX,CAEA1a,EAAA,CAASyD,CAAT,CAAJ,GACEA,CACA,CADUkX,CAAA,CAAKlX,CAAL,CACV;AAAAiX,CAAA,CAAc,CAAA,CAFhB,CAIA,IAAM,EAAA,IAAA,WAAgBnO,EAAhB,CAAN,CAA+B,CAC7B,GAAImO,CAAJ,EAAwC,GAAxC,EAAmBjX,CAAAyB,OAAA,CAAe,CAAf,CAAnB,CACE,KAAM0V,GAAA,CAAa,OAAb,CAAN,CAEF,MAAO,KAAIrO,CAAJ,CAAW9I,CAAX,CAJsB,CAO/B,GAAIiX,CAAJ,CAAiB,CAjCjBta,CAAA,CAAqBb,CACrB,KAAIsb,CAGF,EAAA,CADF,CAAKA,CAAL,CAAcC,EAAAf,KAAA,CAAuB5S,CAAvB,CAAd,EACS,CAAC/G,CAAAyZ,cAAA,CAAsBgB,CAAA,CAAO,CAAP,CAAtB,CAAD,CADT,CAIA,CAAKA,CAAL,CAActB,EAAA,CAAoBpS,CAApB,CAA0B/G,CAA1B,CAAd,EACSya,CAAAP,WADT,CAIO,EAsBU,CACfS,EAAA,CAAe,IAAf,CAAqB,CAArB,CAnBqB,CAyBzBC,QAASA,GAAW,CAACvX,CAAD,CAAU,CAC5B,MAAOA,EAAAwX,UAAA,CAAkB,CAAA,CAAlB,CADqB,CAI9BC,QAASA,GAAY,CAACzX,CAAD,CAAU0X,CAAV,CAA2B,CACzCA,CAAL,EAAsBC,EAAA,CAAiB3X,CAAjB,CAEtB,IAAIA,CAAA4X,iBAAJ,CAEE,IADA,IAAIC,EAAc7X,CAAA4X,iBAAA,CAAyB,GAAzB,CAAlB,CACSva,EAAI,CADb,CACgBya,EAAID,CAAAzb,OAApB,CAAwCiB,CAAxC,CAA4Cya,CAA5C,CAA+Cza,CAAA,EAA/C,CACEsa,EAAA,CAAiBE,CAAA,CAAYxa,CAAZ,CAAjB,CAN0C,CAWhD0a,QAASA,GAAS,CAAC/X,CAAD,CAAUgY,CAAV,CAAgB1V,CAAhB,CAAoB2V,CAApB,CAAiC,CACjD,GAAIrZ,CAAA,CAAUqZ,CAAV,CAAJ,CAA4B,KAAMd,GAAA,CAAa,SAAb,CAAN,CAG5B,IAAI3O,GADA0P,CACA1P,CADe2P,EAAA,CAAmBnY,CAAnB,CACfwI,GAAyB0P,CAAA1P,OAA7B,CACI4P,EAASF,CAATE,EAAyBF,CAAAE,OAE7B,IAAKA,CAAL,CAEA,GAAKJ,CAAL,CAQEvb,CAAA,CAAQub,CAAAlY,MAAA,CAAW,GAAX,CAAR,CAAyB,QAAQ,CAACkY,CAAD,CAAO,CACtC,GAAIpZ,CAAA,CAAU0D,CAAV,CAAJ,CAAmB,CACjB,IAAI+V,EAAc7P,CAAA,CAAOwP,CAAP,CAClB9X,GAAA,CAAYmY,CAAZ,EAA2B,EAA3B,CAA+B/V,CAA/B,CACA,IAAI+V,CAAJ,EAAwC,CAAxC;AAAmBA,CAAAjc,OAAnB,CACE,MAJe,CAQG4D,CAtLtBsY,oBAAA,CAsL+BN,CAtL/B,CAsLqCI,CAtLrC,CAAsC,CAAA,CAAtC,CAuLA,QAAO5P,CAAA,CAAOwP,CAAP,CAV+B,CAAxC,CARF,KACE,KAAKA,CAAL,GAAaxP,EAAb,CACe,UAGb,GAHIwP,CAGJ,EAFwBhY,CAxKxBsY,oBAAA,CAwKiCN,CAxKjC,CAwKuCI,CAxKvC,CAAsC,CAAA,CAAtC,CA0KA,CAAA,OAAO5P,CAAA,CAAOwP,CAAP,CAdsC,CAgCnDL,QAASA,GAAgB,CAAC3X,CAAD,CAAUmF,CAAV,CAAgB,CACvC,IAAIoT,EAAYvY,CAAAwY,MAAhB,CACIN,EAAeK,CAAfL,EAA4BO,EAAA,CAAQF,CAAR,CAE5BL,EAAJ,GACM/S,CAAJ,CACE,OAAO+S,CAAA1R,KAAA,CAAkBrB,CAAlB,CADT,EAKI+S,CAAAE,OAOJ,GANMF,CAAA1P,OAAAI,SAGJ,EAFEsP,CAAAE,OAAA,CAAoB,EAApB,CAAwB,UAAxB,CAEF,CAAAL,EAAA,CAAU/X,CAAV,CAGF,EADA,OAAOyY,EAAA,CAAQF,CAAR,CACP,CAAAvY,CAAAwY,MAAA,CAAgBzc,CAZhB,CADF,CAJuC,CAsBzCoc,QAASA,GAAkB,CAACnY,CAAD,CAAU0Y,CAAV,CAA6B,CAAA,IAClDH,EAAYvY,CAAAwY,MADsC,CAElDN,EAAeK,CAAfL,EAA4BO,EAAA,CAAQF,CAAR,CAE5BG,EAAJ,EAA0BR,CAAAA,CAA1B,GACElY,CAAAwY,MACA,CADgBD,CAChB,CA7MyB,EAAEI,EA6M3B,CAAAT,CAAA,CAAeO,EAAA,CAAQF,CAAR,CAAf,CAAoC,CAAC/P,OAAQ,EAAT,CAAahC,KAAM,EAAnB,CAAuB4R,OAAQrc,CAA/B,CAFtC,CAKA,OAAOmc,EAT+C,CAaxDU,QAASA,GAAU,CAAC5Y,CAAD,CAAUpD,CAAV,CAAeY,CAAf,CAAsB,CACvC,GAAIoY,EAAA,CAAkB5V,CAAlB,CAAJ,CAAgC,CAE9B,IAAI6Y,EAAiBja,CAAA,CAAUpB,CAAV,CAArB,CACIsb,EAAiB,CAACD,CAAlBC,EAAoClc,CAApCkc,EAA2C,CAACja,CAAA,CAASjC,CAAT,CADhD,CAEImc,EAAa,CAACnc,CAEd4J,EAAAA,EADA0R,CACA1R,CADe2R,EAAA,CAAmBnY,CAAnB,CAA4B,CAAC8Y,CAA7B,CACftS,GAAuB0R,CAAA1R,KAE3B,IAAIqS,CAAJ,CACErS,CAAA,CAAK5J,CAAL,CAAA,CAAYY,CADd,KAEO,CACL,GAAIub,CAAJ,CACE,MAAOvS,EAEP;GAAIsS,CAAJ,CAEE,MAAOtS,EAAP,EAAeA,CAAA,CAAK5J,CAAL,CAEfkB,EAAA,CAAO0I,CAAP,CAAa5J,CAAb,CARC,CAVuB,CADO,CA0BzCoc,QAASA,GAAc,CAAChZ,CAAD,CAAUiZ,CAAV,CAAoB,CACzC,MAAKjZ,EAAAqF,aAAL,CAEqC,EAFrC,CACQzB,CAAC,GAADA,EAAQ5D,CAAAqF,aAAA,CAAqB,OAArB,CAARzB,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CAA4D,SAA5D,CAAuE,GAAvE,CAAAvD,QAAA,CACI,GADJ,CACU4Y,CADV,CACqB,GADrB,CADR,CAAkC,CAAA,CADO,CAM3CC,QAASA,GAAiB,CAAClZ,CAAD,CAAUmZ,CAAV,CAAsB,CAC1CA,CAAJ,EAAkBnZ,CAAAoZ,aAAlB,EACE3c,CAAA,CAAQ0c,CAAArZ,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAACuZ,CAAD,CAAW,CAChDrZ,CAAAoZ,aAAA,CAAqB,OAArB,CAA8BlC,CAAA,CAC1BtT,CAAC,GAADA,EAAQ5D,CAAAqF,aAAA,CAAqB,OAArB,CAARzB,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACS,SADT,CACoB,GADpB,CAAAA,QAAA,CAES,GAFT,CAEesT,CAAA,CAAKmC,CAAL,CAFf,CAEgC,GAFhC,CAEqC,GAFrC,CAD0B,CAA9B,CADgD,CAAlD,CAF4C,CAYhDC,QAASA,GAAc,CAACtZ,CAAD,CAAUmZ,CAAV,CAAsB,CAC3C,GAAIA,CAAJ,EAAkBnZ,CAAAoZ,aAAlB,CAAwC,CACtC,IAAIG,EAAkB3V,CAAC,GAADA,EAAQ5D,CAAAqF,aAAA,CAAqB,OAArB,CAARzB,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACW,SADX,CACsB,GADtB,CAGtBnH,EAAA,CAAQ0c,CAAArZ,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAACuZ,CAAD,CAAW,CAChDA,CAAA,CAAWnC,CAAA,CAAKmC,CAAL,CAC4C,GAAvD,GAAIE,CAAAlZ,QAAA,CAAwB,GAAxB,CAA8BgZ,CAA9B,CAAyC,GAAzC,CAAJ;CACEE,CADF,EACqBF,CADrB,CACgC,GADhC,CAFgD,CAAlD,CAOArZ,EAAAoZ,aAAA,CAAqB,OAArB,CAA8BlC,CAAA,CAAKqC,CAAL,CAA9B,CAXsC,CADG,CAiB7CjC,QAASA,GAAc,CAACkC,CAAD,CAAOC,CAAP,CAAiB,CAGtC,GAAIA,CAAJ,CAGE,GAAIA,CAAApd,SAAJ,CACEmd,CAAA,CAAKA,CAAApd,OAAA,EAAL,CAAA,CAAsBqd,CADxB,KAEO,CACL,IAAIrd,EAASqd,CAAArd,OAGb,IAAsB,QAAtB,GAAI,MAAOA,EAAX,EAAkCqd,CAAA5d,OAAlC,GAAsD4d,CAAtD,CACE,IAAIrd,CAAJ,CACE,IAAS,IAAAiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBjB,CAApB,CAA4BiB,CAAA,EAA5B,CACEmc,CAAA,CAAKA,CAAApd,OAAA,EAAL,CAAA,CAAsBqd,CAAA,CAASpc,CAAT,CAF1B,CADF,IAOEmc,EAAA,CAAKA,CAAApd,OAAA,EAAL,CAAA,CAAsBqd,CAXnB,CAR6B,CA0BxCC,QAASA,GAAgB,CAAC1Z,CAAD,CAAUmF,CAAV,CAAgB,CACvC,MAAOwU,GAAA,CAAoB3Z,CAApB,CAA6B,GAA7B,EAAoCmF,CAApC,EAA4C,cAA5C,EAA8D,YAA9D,CADgC,CAIzCwU,QAASA,GAAmB,CAAC3Z,CAAD,CAAUmF,CAAV,CAAgB3H,CAAhB,CAAuB,CAt/B1BqY,CAy/BvB,EAAI7V,CAAA3D,SAAJ,GACE2D,CADF,CACYA,CAAA4Z,gBADZ,CAKA,KAFIC,CAEJ,CAFYrd,CAAA,CAAQ2I,CAAR,CAAA,CAAgBA,CAAhB,CAAuB,CAACA,CAAD,CAEnC,CAAOnF,CAAP,CAAA,CAAgB,CACd,IADc,IACL3C,EAAI,CADC,CACEW,EAAK6b,CAAAzd,OAArB,CAAmCiB,CAAnC,CAAuCW,CAAvC,CAA2CX,CAAA,EAA3C,CACE,IAAKG,CAAL,CAAa4F,CAAAoD,KAAA,CAAYxG,CAAZ,CAAqB6Z,CAAA,CAAMxc,CAAN,CAArB,CAAb,IAAiDtB,CAAjD,CAA4D,MAAOyB,EAMrEwC,EAAA,CAAUA,CAAA8Z,WAAV,EArgC8BC,EAqgC9B,GAAiC/Z,CAAA3D,SAAjC,EAAqF2D,CAAAga,KARvE,CARiC,CAoBnDC,QAASA,GAAW,CAACja,CAAD,CAAU,CAE5B,IADAyX,EAAA,CAAazX,CAAb,CAAsB,CAAA,CAAtB,CACA,CAAOA,CAAA8W,WAAP,CAAA,CACE9W,CAAAka,YAAA,CAAoBla,CAAA8W,WAApB,CAH0B,CA7nFS;AAooFvCqD,QAASA,GAAY,CAACna,CAAD,CAAUoa,CAAV,CAAoB,CAClCA,CAAL,EAAe3C,EAAA,CAAazX,CAAb,CACf,KAAIqa,EAASra,CAAA8Z,WACTO,EAAJ,EAAYA,CAAAH,YAAA,CAAmBla,CAAnB,CAH2B,CAOzCsa,QAASA,GAAoB,CAACC,CAAD,CAASC,CAAT,CAAc,CACzCA,CAAA,CAAMA,CAAN,EAAa3e,CACb,IAAgC,UAAhC,GAAI2e,CAAA1e,SAAA2e,WAAJ,CAIED,CAAAE,WAAA,CAAeH,CAAf,CAJF,KAOEnX,EAAA,CAAOoX,CAAP,CAAAxS,GAAA,CAAe,MAAf,CAAuBuS,CAAvB,CATuC,CA0E3CI,QAASA,GAAkB,CAAC3a,CAAD,CAAUmF,CAAV,CAAgB,CAEzC,IAAIyV,EAAcC,EAAA,CAAa1V,CAAAwC,YAAA,EAAb,CAGlB,OAAOiT,EAAP,EAAsBE,EAAA,CAAiB/a,EAAA,CAAUC,CAAV,CAAjB,CAAtB,EAA8D4a,CALrB,CAQ3CG,QAASA,GAAkB,CAAC/a,CAAD,CAAUmF,CAAV,CAAgB,CACzC,IAAI3F,EAAWQ,CAAAR,SACf,QAAqB,OAArB,GAAQA,CAAR,EAA6C,UAA7C,GAAgCA,CAAhC,GAA4Dwb,EAAA,CAAa7V,CAAb,CAFnB,CA6K3C8V,QAASA,GAAkB,CAACjb,CAAD,CAAUwI,CAAV,CAAkB,CAC3C,IAAI0S,EAAeA,QAAQ,CAACC,CAAD,CAAQnD,CAAR,CAAc,CAEvCmD,CAAAC,mBAAA,CAA2BC,QAAQ,EAAG,CACpC,MAAOF,EAAAG,iBAD6B,CAItC,KAAIC,EAAW/S,CAAA,CAAOwP,CAAP,EAAemD,CAAAnD,KAAf,CAAf,CACIwD,EAAiBD,CAAA,CAAWA,CAAAnf,OAAX,CAA6B,CAElD,IAAKof,CAAL,CAAA,CAEA,GAAI7c,CAAA,CAAYwc,CAAAM,4BAAZ,CAAJ,CAAoD,CAClD,IAAIC,EAAmCP,CAAAQ,yBACvCR;CAAAQ,yBAAA,CAAiCC,QAAQ,EAAG,CAC1CT,CAAAM,4BAAA,CAAoC,CAAA,CAEhCN,EAAAU,gBAAJ,EACEV,CAAAU,gBAAA,EAGEH,EAAJ,EACEA,CAAA3e,KAAA,CAAsCoe,CAAtC,CARwC,CAFM,CAepDA,CAAAW,8BAAA,CAAsCC,QAAQ,EAAG,CAC/C,MAA6C,CAAA,CAA7C,GAAOZ,CAAAM,4BADwC,CAK3B,EAAtB,CAAKD,CAAL,GACED,CADF,CACaha,EAAA,CAAYga,CAAZ,CADb,CAIA,KAAS,IAAAle,EAAI,CAAb,CAAgBA,CAAhB,CAAoBme,CAApB,CAAoCne,CAAA,EAApC,CACO8d,CAAAW,8BAAA,EAAL,EACEP,CAAA,CAASle,CAAT,CAAAN,KAAA,CAAiBiD,CAAjB,CAA0Bmb,CAA1B,CA5BJ,CATuC,CA4CzCD,EAAAxS,KAAA,CAAoB1I,CACpB,OAAOkb,EA9CoC,CAuS7C7F,QAASA,GAAgB,EAAG,CAC1B,IAAA2G,KAAA,CAAYC,QAAiB,EAAG,CAC9B,MAAOne,EAAA,CAAOgL,CAAP,CAAe,CACpBoT,SAAUA,QAAQ,CAAC3c,CAAD,CAAO4c,CAAP,CAAgB,CAC5B5c,CAAAG,KAAJ,GAAeH,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAOyZ,GAAA,CAAezZ,CAAf,CAAqB4c,CAArB,CAFyB,CADd,CAKpBC,SAAUA,QAAQ,CAAC7c,CAAD,CAAO4c,CAAP,CAAgB,CAC5B5c,CAAAG,KAAJ,GAAeH,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAO+Z,GAAA,CAAe/Z,CAAf,CAAqB4c,CAArB,CAFyB,CALd,CASpBE,YAAaA,QAAQ,CAAC9c,CAAD,CAAO4c,CAAP,CAAgB,CAC/B5c,CAAAG,KAAJ;CAAeH,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAO2Z,GAAA,CAAkB3Z,CAAlB,CAAwB4c,CAAxB,CAF4B,CATjB,CAAf,CADuB,CADN,CA+B5BG,QAASA,GAAO,CAACpgB,CAAD,CAAMqgB,CAAN,CAAiB,CAC/B,IAAI3f,EAAMV,CAANU,EAAaV,CAAA2B,UAEjB,IAAIjB,CAAJ,CAIE,MAHmB,UAGZA,GAHH,MAAOA,EAGJA,GAFLA,CAEKA,CAFCV,CAAA2B,UAAA,EAEDjB,EAAAA,CAGL4f,EAAAA,CAAU,MAAOtgB,EAOrB,OALEU,EAKF,CANe,UAAf,EAAI4f,CAAJ,EAAyC,QAAzC,EAA8BA,CAA9B,EAA6D,IAA7D,GAAqDtgB,CAArD,CACQA,CAAA2B,UADR,CACwB2e,CADxB,CACkC,GADlC,CACwC,CAACD,CAAD,EAAc9e,EAAd,GADxC,CAGQ+e,CAHR,CAGkB,GAHlB,CAGwBtgB,CAdO,CAuBjCugB,QAASA,GAAO,CAACtc,CAAD,CAAQuc,CAAR,CAAqB,CACnC,GAAIA,CAAJ,CAAiB,CACf,IAAIhf,EAAM,CACV,KAAAD,QAAA,CAAekf,QAAQ,EAAG,CACxB,MAAO,EAAEjf,CADe,CAFX,CAMjBjB,CAAA,CAAQ0D,CAAR,CAAe,IAAAyc,IAAf,CAAyB,IAAzB,CAPmC,CA0GrCC,QAASA,GAAM,CAACva,CAAD,CAAK,CAKlB,MAAA,CADIwa,CACJ,CAFaxa,CAAAtD,SAAA,EAAA4E,QAAAmZ,CAAsBC,EAAtBD,CAAsC,EAAtCA,CACF7b,MAAA,CAAa+b,EAAb,CACX,EACS,WADT,CACuBrZ,CAACkZ,CAAA,CAAK,CAAL,CAADlZ,EAAY,EAAZA,SAAA,CAAwB,WAAxB,CAAqC,GAArC,CADvB,CACmE,GADnE,CAGO,IARW,CAWpBsZ,QAASA,GAAQ,CAAC5a,CAAD,CAAKkD,CAAL,CAAeL,CAAf,CAAqB,CAAA,IAChCgY,CAKJ,IAAkB,UAAlB,GAAI,MAAO7a,EAAX,CACE,IAAM,EAAA6a,CAAA,CAAU7a,CAAA6a,QAAV,CAAN,CAA6B,CAC3BA,CAAA,CAAU,EACV,IAAI7a,CAAAlG,OAAJ,CAAe,CACb,GAAIoJ,CAAJ,CAIE,KAHKjJ,EAAA,CAAS4I,CAAT,CAGC;AAHkBA,CAGlB,GAFJA,CAEI,CAFG7C,CAAA6C,KAEH,EAFc0X,EAAA,CAAOva,CAAP,CAEd,EAAA8H,EAAA,CAAgB,UAAhB,CACyEjF,CADzE,CAAN,CAGF4X,CAAA,CAASza,CAAAtD,SAAA,EAAA4E,QAAA,CAAsBoZ,EAAtB,CAAsC,EAAtC,CACTI,EAAA,CAAUL,CAAA7b,MAAA,CAAa+b,EAAb,CACVxgB,EAAA,CAAQ2gB,CAAA,CAAQ,CAAR,CAAAtd,MAAA,CAAiBud,EAAjB,CAAR,CAAwC,QAAQ,CAACrU,CAAD,CAAM,CACpDA,CAAApF,QAAA,CAAY0Z,EAAZ,CAAoB,QAAQ,CAACC,CAAD,CAAMC,CAAN,CAAkBrY,CAAlB,CAAwB,CAClDgY,CAAAtc,KAAA,CAAasE,CAAb,CADkD,CAApD,CADoD,CAAtD,CAVa,CAgBf7C,CAAA6a,QAAA,CAAaA,CAlBc,CAA7B,CADF,IAqBW3gB,EAAA,CAAQ8F,CAAR,CAAJ,EACLmb,CAEA,CAFOnb,CAAAlG,OAEP,CAFmB,CAEnB,CADA8M,EAAA,CAAY5G,CAAA,CAAGmb,CAAH,CAAZ,CAAsB,IAAtB,CACA,CAAAN,CAAA,CAAU7a,CAAAH,MAAA,CAAS,CAAT,CAAYsb,CAAZ,CAHL,EAKLvU,EAAA,CAAY5G,CAAZ,CAAgB,IAAhB,CAAsB,CAAA,CAAtB,CAEF,OAAO6a,EAlC6B,CAshBtCjX,QAASA,GAAc,CAACwX,CAAD,CAAgBlY,CAAhB,CAA0B,CAuC/CmY,QAASA,EAAa,CAACC,CAAD,CAAW,CAC/B,MAAO,SAAQ,CAAChhB,CAAD,CAAMY,CAAN,CAAa,CAC1B,GAAIqB,CAAA,CAASjC,CAAT,CAAJ,CACEH,CAAA,CAAQG,CAAR,CAAaU,EAAA,CAAcsgB,CAAd,CAAb,CADF,KAGE,OAAOA,EAAA,CAAShhB,CAAT,CAAcY,CAAd,CAJiB,CADG,CAUjCiN,QAASA,EAAQ,CAACtF,CAAD,CAAO0Y,CAAP,CAAkB,CACjCxU,EAAA,CAAwBlE,CAAxB,CAA8B,SAA9B,CACA,IAAItI,CAAA,CAAWghB,CAAX,CAAJ,EAA6BrhB,CAAA,CAAQqhB,CAAR,CAA7B,CACEA,CAAA,CAAYC,CAAAC,YAAA,CAA6BF,CAA7B,CAEd,IAAK7B,CAAA6B,CAAA7B,KAAL,CACE,KAAM5R,GAAA,CAAgB,MAAhB,CAA2EjF,CAA3E,CAAN,CAEF,MAAO6Y,EAAA,CAAc7Y,CAAd,CAtDY8Y,UAsDZ,CAAP,CAA8CJ,CARb,CAWnCK,QAASA,EAAkB,CAAC/Y,CAAD,CAAOgF,CAAP,CAAgB,CACzC,MAAOgU,SAA4B,EAAG,CACpC,IAAIrd,EAASsd,CAAAjY,OAAA,CAAwBgE,CAAxB;AAAiC,IAAjC,CACb,IAAIxL,CAAA,CAAYmC,CAAZ,CAAJ,CACE,KAAMsJ,GAAA,CAAgB,OAAhB,CAAyFjF,CAAzF,CAAN,CAEF,MAAOrE,EAL6B,CADG,CAU3CqJ,QAASA,EAAO,CAAChF,CAAD,CAAOkZ,CAAP,CAAkBC,CAAlB,CAA2B,CACzC,MAAO7T,EAAA,CAAStF,CAAT,CAAe,CACpB6W,KAAkB,CAAA,CAAZ,GAAAsC,CAAA,CAAoBJ,CAAA,CAAmB/Y,CAAnB,CAAyBkZ,CAAzB,CAApB,CAA0DA,CAD5C,CAAf,CADkC,CAiC3CE,QAASA,EAAW,CAACb,CAAD,CAAgB,CAAA,IAC9B1S,EAAY,EADkB,CACdwT,CACpB/hB,EAAA,CAAQihB,CAAR,CAAuB,QAAQ,CAAC1Y,CAAD,CAAS,CAItCyZ,QAASA,EAAc,CAAC7T,CAAD,CAAQ,CAAA,IACzBvN,CADyB,CACtBW,CACFX,EAAA,CAAI,CAAT,KAAYW,CAAZ,CAAiB4M,CAAAxO,OAAjB,CAA+BiB,CAA/B,CAAmCW,CAAnC,CAAuCX,CAAA,EAAvC,CAA4C,CAAA,IACtCqhB,EAAa9T,CAAA,CAAMvN,CAAN,CADyB,CAEtCoN,EAAWqT,CAAAzW,IAAA,CAAqBqX,CAAA,CAAW,CAAX,CAArB,CAEfjU,EAAA,CAASiU,CAAA,CAAW,CAAX,CAAT,CAAAjc,MAAA,CAA8BgI,CAA9B,CAAwCiU,CAAA,CAAW,CAAX,CAAxC,CAJ0C,CAFf,CAH/B,GAAI,CAAAC,CAAAtX,IAAA,CAAkBrC,CAAlB,CAAJ,CAAA,CACA2Z,CAAA/B,IAAA,CAAkB5X,CAAlB,CAA0B,CAAA,CAA1B,CAYA,IAAI,CACEzI,CAAA,CAASyI,CAAT,CAAJ,EACEwZ,CAGA,CAHWxS,EAAA,CAAchH,CAAd,CAGX,CAFAgG,CAEA,CAFYA,CAAAhJ,OAAA,CAAiBuc,CAAA,CAAYC,CAAAlU,SAAZ,CAAjB,CAAAtI,OAAA,CAAwDwc,CAAArT,WAAxD,CAEZ,CADAsT,CAAA,CAAeD,CAAAvT,aAAf,CACA,CAAAwT,CAAA,CAAeD,CAAAtT,cAAf,CAJF,EAKWrO,CAAA,CAAWmI,CAAX,CAAJ,CACHgG,CAAAnK,KAAA,CAAeid,CAAA3X,OAAA,CAAwBnB,CAAxB,CAAf,CADG,CAEIxI,CAAA,CAAQwI,CAAR,CAAJ,CACHgG,CAAAnK,KAAA,CAAeid,CAAA3X,OAAA,CAAwBnB,CAAxB,CAAf,CADG,CAGLkE,EAAA,CAAYlE,CAAZ,CAAoB,QAApB,CAXA,CAaF,MAAOzB,CAAP,CAAU,CAYV,KAXI/G,EAAA,CAAQwI,CAAR,CAWE,GAVJA,CAUI,CAVKA,CAAA,CAAOA,CAAA5I,OAAP,CAAuB,CAAvB,CAUL,EARFmH,CAAAqb,QAQE,EARWrb,CAAAsb,MAQX,EARqD,EAQrD,EARsBtb,CAAAsb,MAAAxe,QAAA,CAAgBkD,CAAAqb,QAAhB,CAQtB;CAFJrb,CAEI,CAFAA,CAAAqb,QAEA,CAFY,IAEZ,CAFmBrb,CAAAsb,MAEnB,EAAAzU,EAAA,CAAgB,UAAhB,CACIpF,CADJ,CACYzB,CAAAsb,MADZ,EACuBtb,CAAAqb,QADvB,EACoCrb,CADpC,CAAN,CAZU,CA1BZ,CADsC,CAAxC,CA2CA,OAAOyH,EA7C2B,CAoDpC8T,QAASA,EAAsB,CAACC,CAAD,CAAQ5U,CAAR,CAAiB,CAE9C6U,QAASA,EAAU,CAACC,CAAD,CAAcC,CAAd,CAAsB,CACvC,GAAIH,CAAAjiB,eAAA,CAAqBmiB,CAArB,CAAJ,CAAuC,CACrC,GAAIF,CAAA,CAAME,CAAN,CAAJ,GAA2BE,CAA3B,CACE,KAAM/U,GAAA,CAAgB,MAAhB,CACI6U,CADJ,CACkB,MADlB,CAC2B1V,CAAAjF,KAAA,CAAU,MAAV,CAD3B,CAAN,CAGF,MAAOya,EAAA,CAAME,CAAN,CAL8B,CAOrC,GAAI,CAGF,MAFA1V,EAAAzD,QAAA,CAAamZ,CAAb,CAEO,CADPF,CAAA,CAAME,CAAN,CACO,CADcE,CACd,CAAAJ,CAAA,CAAME,CAAN,CAAA,CAAqB9U,CAAA,CAAQ8U,CAAR,CAAqBC,CAArB,CAH1B,CAIF,MAAOE,CAAP,CAAY,CAIZ,KAHIL,EAAA,CAAME,CAAN,CAGEG,GAHqBD,CAGrBC,EAFJ,OAAOL,CAAA,CAAME,CAAN,CAEHG,CAAAA,CAAN,CAJY,CAJd,OASU,CACR7V,CAAA8V,MAAA,EADQ,CAjB2B,CAuBzClZ,QAASA,EAAM,CAAC7D,CAAD,CAAKD,CAAL,CAAWid,CAAX,CAAmBL,CAAnB,CAAgC,CACvB,QAAtB,GAAI,MAAOK,EAAX,GACEL,CACA,CADcK,CACd,CAAAA,CAAA,CAAS,IAFX,CAD6C,KAMzCxC,EAAO,EANkC,CAOzCK,EAAUD,EAAA,CAAS5a,CAAT,CAAakD,CAAb,CAAuByZ,CAAvB,CAP+B,CAQzC7iB,CARyC,CAQjCiB,CARiC,CASzCT,CAECS,EAAA,CAAI,CAAT,KAAYjB,CAAZ,CAAqB+gB,CAAA/gB,OAArB,CAAqCiB,CAArC,CAAyCjB,CAAzC,CAAiDiB,CAAA,EAAjD,CAAsD,CACpDT,CAAA,CAAMugB,CAAA,CAAQ9f,CAAR,CACN,IAAmB,QAAnB,GAAI,MAAOT,EAAX,CACE,KAAMwN,GAAA,CAAgB,MAAhB,CACyExN,CADzE,CAAN,CAGFkgB,CAAAjc,KAAA,CACEye,CAAA,EAAUA,CAAAxiB,eAAA,CAAsBF,CAAtB,CAAV,CACE0iB,CAAA,CAAO1iB,CAAP,CADF,CAEEoiB,CAAA,CAAWpiB,CAAX,CAAgBqiB,CAAhB,CAHJ,CANoD,CAYlDziB,CAAA,CAAQ8F,CAAR,CAAJ;CACEA,CADF,CACOA,CAAA,CAAGlG,CAAH,CADP,CAMA,OAAOkG,EAAAG,MAAA,CAASJ,CAAT,CAAeya,CAAf,CA7BsC,CA0C/C,MAAO,CACL3W,OAAQA,CADH,CAEL4X,YAZFA,QAAoB,CAACwB,CAAD,CAAOD,CAAP,CAAeL,CAAf,CAA4B,CAI9C,IAAIO,EAAWriB,MAAAkE,OAAA,CAAcoe,CAACjjB,CAAA,CAAQ+iB,CAAR,CAAA,CAAgBA,CAAA,CAAKA,CAAAnjB,OAAL,CAAmB,CAAnB,CAAhB,CAAwCmjB,CAAzCE,WAAd,CACXC,EAAAA,CAAgBvZ,CAAA,CAAOoZ,CAAP,CAAaC,CAAb,CAAuBF,CAAvB,CAA+BL,CAA/B,CAEpB,OAAOpgB,EAAA,CAAS6gB,CAAT,CAAA,EAA2B7iB,CAAA,CAAW6iB,CAAX,CAA3B,CAAuDA,CAAvD,CAAuEF,CAPhC,CAUzC,CAGLnY,IAAK2X,CAHA,CAIL9B,SAAUA,EAJL,CAKLyC,IAAKA,QAAQ,CAACxa,CAAD,CAAO,CAClB,MAAO6Y,EAAAlhB,eAAA,CAA6BqI,CAA7B,CAjOQ8Y,UAiOR,CAAP,EAA8Dc,CAAAjiB,eAAA,CAAqBqI,CAArB,CAD5C,CALf,CAnEuC,CA1JhDK,CAAA,CAAyB,CAAA,CAAzB,GAAYA,CADmC,KAE3C2Z,EAAgB,EAF2B,CAI3C5V,EAAO,EAJoC,CAK3CoV,EAAgB,IAAIlC,EAAJ,CAAY,EAAZ,CAAgB,CAAA,CAAhB,CAL2B,CAM3CuB,EAAgB,CACdjY,SAAU,CACN0E,SAAUkT,CAAA,CAAclT,CAAd,CADJ,CAENN,QAASwT,CAAA,CAAcxT,CAAd,CAFH,CAGNiB,QAASuS,CAAA,CAkEnBvS,QAAgB,CAACjG,CAAD,CAAOiE,CAAP,CAAoB,CAClC,MAAOe,EAAA,CAAQhF,CAAR,CAAc,CAAC,WAAD,CAAc,QAAQ,CAACya,CAAD,CAAY,CACrD,MAAOA,EAAA7B,YAAA,CAAsB3U,CAAtB,CAD8C,CAAlC,CAAd,CAD2B,CAlEjB,CAHH,CAIN5L,MAAOmgB,CAAA,CAuEjBngB,QAAc,CAAC2H,CAAD,CAAOxC,CAAP,CAAY,CAAE,MAAOwH,EAAA,CAAQhF,CAAR,CAAczG,EAAA,CAAQiE,CAAR,CAAd,CAA4B,CAAA,CAA5B,CAAT,CAvET,CAJD,CAKN0I,SAAUsS,CAAA,CAwEpBtS,QAAiB,CAAClG,CAAD,CAAO3H,CAAP,CAAc,CAC7B6L,EAAA,CAAwBlE,CAAxB;AAA8B,UAA9B,CACA6Y,EAAA,CAAc7Y,CAAd,CAAA,CAAsB3H,CACtBqiB,EAAA,CAAc1a,CAAd,CAAA,CAAsB3H,CAHO,CAxEX,CALJ,CAMNsiB,UA6EVA,QAAkB,CAACb,CAAD,CAAcc,CAAd,CAAuB,CAAA,IACnCC,EAAelC,CAAAzW,IAAA,CAAqB4X,CAArB,CAxFAhB,UAwFA,CADoB,CAEnCgC,EAAWD,CAAAhE,KAEfgE,EAAAhE,KAAA,CAAoBkE,QAAQ,EAAG,CAC7B,IAAIC,EAAe/B,CAAAjY,OAAA,CAAwB8Z,CAAxB,CAAkCD,CAAlC,CACnB,OAAO5B,EAAAjY,OAAA,CAAwB4Z,CAAxB,CAAiC,IAAjC,CAAuC,CAACK,UAAWD,CAAZ,CAAvC,CAFsB,CAJQ,CAnFzB,CADI,CAN2B,CAgB3CrC,EAAoBE,CAAA4B,UAApB9B,CACIgB,CAAA,CAAuBd,CAAvB,CAAsC,QAAQ,CAACiB,CAAD,CAAcC,CAAd,CAAsB,CAC9DtY,EAAArK,SAAA,CAAiB2iB,CAAjB,CAAJ,EACE3V,CAAA1I,KAAA,CAAUqe,CAAV,CAEF,MAAM9U,GAAA,CAAgB,MAAhB,CAAiDb,CAAAjF,KAAA,CAAU,MAAV,CAAjD,CAAN,CAJkE,CAApE,CAjBuC,CAuB3Cub,EAAgB,EAvB2B,CAwB3CzB,EAAoByB,CAAAD,UAApBxB,CACIU,CAAA,CAAuBe,CAAvB,CAAsC,QAAQ,CAACZ,CAAD,CAAcC,CAAd,CAAsB,CAClE,IAAIzU,EAAWqT,CAAAzW,IAAA,CAAqB4X,CAArB,CAvBJhB,UAuBI,CAAmDiB,CAAnD,CACf,OAAOd,EAAAjY,OAAA,CAAwBsE,CAAAuR,KAAxB,CAAuCvR,CAAvC,CAAiD1O,CAAjD,CAA4DkjB,CAA5D,CAF2D,CAApE,CAMRxiB,EAAA,CAAQ8hB,CAAA,CAAYb,CAAZ,CAAR,CAAoC,QAAQ,CAACpb,CAAD,CAAK,CAAE8b,CAAAjY,OAAA,CAAwB7D,CAAxB,EAA8B/D,CAA9B,CAAF,CAAjD,CAEA,OAAO6f,EAjCwC,CAoPjDvM,QAASA,GAAqB,EAAG,CAE/B,IAAIwO,EAAuB,CAAA,CAe3B,KAAAC,qBAAA,CAA4BC,QAAQ,EAAG,CACrCF,CAAA,CAAuB,CAAA,CADc,CA6IvC,KAAArE,KAAA,CAAY,CAAC,SAAD,CAAY,WAAZ;AAAyB,YAAzB,CAAuC,QAAQ,CAAClH,CAAD,CAAU1B,CAAV,CAAqBM,CAArB,CAAiC,CAM1F8M,QAASA,EAAc,CAACC,CAAD,CAAO,CAC5B,IAAI3f,EAAS,IACb4f,MAAAjB,UAAAkB,KAAA5jB,KAAA,CAA0B0jB,CAA1B,CAAgC,QAAQ,CAACzgB,CAAD,CAAU,CAChD,GAA2B,GAA3B,GAAID,EAAA,CAAUC,CAAV,CAAJ,CAEE,MADAc,EACO,CADEd,CACF,CAAA,CAAA,CAHuC,CAAlD,CAMA,OAAOc,EARqB,CAgC9B8f,QAASA,EAAQ,CAAClY,CAAD,CAAO,CACtB,GAAIA,CAAJ,CAAU,CACRA,CAAAmY,eAAA,EAEA,KAAIpL,CAvBFA,EAAAA,CAASqL,CAAAC,QAETlkB,EAAA,CAAW4Y,CAAX,CAAJ,CACEA,CADF,CACWA,CAAA,EADX,CAEWnW,EAAA,CAAUmW,CAAV,CAAJ,EACD/M,CAGF,CAHS+M,CAAA,CAAO,CAAP,CAGT,CAAAA,CAAA,CADqB,OAAvB,GADYX,CAAAkM,iBAAA/T,CAAyBvE,CAAzBuE,CACRgU,SAAJ,CACW,CADX,CAGWvY,CAAAwY,sBAAA,EAAAC,OANN,EAQKriB,CAAA,CAAS2W,CAAT,CARL,GASLA,CATK,CASI,CATJ,CAqBDA,EAAJ,GAcM2L,CACJ,CADc1Y,CAAAwY,sBAAA,EAAAG,IACd,CAAAvM,CAAAwM,SAAA,CAAiB,CAAjB,CAAoBF,CAApB,CAA8B3L,CAA9B,CAfF,CALQ,CAAV,IAuBEX,EAAA8L,SAAA,CAAiB,CAAjB,CAAoB,CAApB,CAxBoB,CA4BxBE,QAASA,EAAM,EAAG,CAAA,IACZS,EAAOnO,CAAAmO,KAAA,EADK,CACaC,CAGxBD,EAAL,CAGK,CAAKC,CAAL,CAAW1lB,CAAA2lB,eAAA,CAAwBF,CAAxB,CAAX,EAA2CX,CAAA,CAASY,CAAT,CAA3C,CAGA,CAAKA,CAAL,CAAWhB,CAAA,CAAe1kB,CAAA4lB,kBAAA,CAA2BH,CAA3B,CAAf,CAAX,EAA8DX,CAAA,CAASY,CAAT,CAA9D,CAGa,KAHb,GAGID,CAHJ,EAGoBX,CAAA,CAAS,IAAT,CATzB,CAAWA,CAAA,CAAS,IAAT,CAJK,CAlEwE;AAC1F,IAAI9kB,EAAWgZ,CAAAhZ,SAmFXukB,EAAJ,EACE3M,CAAAtU,OAAA,CAAkBuiB,QAAwB,EAAG,CAAC,MAAOvO,EAAAmO,KAAA,EAAR,CAA7C,CACEK,QAA8B,CAACC,CAAD,CAASC,CAAT,CAAiB,CAEzCD,CAAJ,GAAeC,CAAf,EAAoC,EAApC,GAAyBD,CAAzB,EAEAvH,EAAA,CAAqB,QAAQ,EAAG,CAC9B5G,CAAAvU,WAAA,CAAsB2hB,CAAtB,CAD8B,CAAhC,CAJ6C,CADjD,CAWF,OAAOA,EAhGmF,CAAhF,CA9JmB,CAonBjC3L,QAASA,GAAuB,EAAG,CACjC,IAAA6G,KAAA,CAAY,CAAC,OAAD,CAAU,UAAV,CAAsB,QAAQ,CAAChH,CAAD,CAAQJ,CAAR,CAAkB,CAC1D,MAAOI,EAAA+M,UAAA,CACH,QAAQ,CAACzf,CAAD,CAAK,CAAE,MAAO0S,EAAA,CAAM1S,CAAN,CAAT,CADV,CAEH,QAAQ,CAACA,CAAD,CAAK,CACb,MAAOsS,EAAA,CAAStS,CAAT,CAAa,CAAb,CAAgB,CAAA,CAAhB,CADM,CAHyC,CAAhD,CADqB,CAiCnC0f,QAASA,GAAO,CAACnmB,CAAD,CAASC,CAAT,CAAmBwX,CAAnB,CAAyBc,CAAzB,CAAmC,CAsBjD6N,QAASA,EAA0B,CAAC3f,CAAD,CAAK,CACtC,GAAI,CACFA,CAAAG,MAAA,CAAS,IAAT,CA11HGN,EAAApF,KAAA,CA01HsBkB,SA11HtB,CA01HiCuE,CA11HjC,CA01HH,CADE,CAAJ,OAEU,CAER,GADA0f,CAAA,EACI,CAA4B,CAA5B,GAAAA,CAAJ,CACE,IAAA,CAAOC,CAAA/lB,OAAP,CAAA,CACE,GAAI,CACF+lB,CAAAC,IAAA,EAAA,EADE,CAEF,MAAO7e,CAAP,CAAU,CACV+P,CAAA+O,MAAA,CAAW9e,CAAX,CADU,CANR,CAH4B,CAwExC+e,QAASA,EAAW,CAACC,CAAD,CAAW7H,CAAX,CAAuB,CACxC8H,SAASA,GAAK,EAAG,CAChB/lB,CAAA,CAAQgmB,CAAR,CAAiB,QAAQ,CAACC,CAAD,CAAS,CAAEA,CAAA,EAAF,CAAlC,CACAC,EAAA,CAAcjI,CAAA,CAAW8H,EAAX,CAAkBD,CAAlB,CAFE,CAAjBC,CAAD,EADyC,CAgH3CI,QAASA,EAA0B,EAAG,CACpCC,CAAA,EACAC,EAAA,EAFoC,CAOtCD,QAASA,EAAU,EAAG,CAEpBE,CAAA;AAAclnB,CAAAmnB,QAAAC,MACdF,EAAA,CAAcpkB,CAAA,CAAYokB,CAAZ,CAAA,CAA2B,IAA3B,CAAkCA,CAG5CrhB,GAAA,CAAOqhB,CAAP,CAAoBG,CAApB,CAAJ,GACEH,CADF,CACgBG,CADhB,CAGAA,EAAA,CAAkBH,CATE,CAYtBD,QAASA,EAAa,EAAG,CACvB,GAAIK,CAAJ,GAAuB9gB,CAAA+gB,IAAA,EAAvB,EAAqCC,CAArC,GAA0DN,CAA1D,CAIAI,CAEA,CAFiB9gB,CAAA+gB,IAAA,EAEjB,CADAC,CACA,CADmBN,CACnB,CAAAtmB,CAAA,CAAQ6mB,CAAR,CAA4B,QAAQ,CAACC,CAAD,CAAW,CAC7CA,CAAA,CAASlhB,CAAA+gB,IAAA,EAAT,CAAqBL,CAArB,CAD6C,CAA/C,CAPuB,CAoFzBS,QAASA,EAAsB,CAACnlB,CAAD,CAAM,CACnC,GAAI,CACF,MAAOyF,mBAAA,CAAmBzF,CAAnB,CADL,CAEF,MAAOkF,CAAP,CAAU,CACV,MAAOlF,EADG,CAHuB,CArTY,IAC7CgE,EAAO,IADsC,CAE7CohB,EAAc3nB,CAAA,CAAS,CAAT,CAF+B,CAG7CmL,EAAWpL,CAAAoL,SAHkC,CAI7C+b,EAAUnnB,CAAAmnB,QAJmC,CAK7CtI,EAAa7e,CAAA6e,WALgC,CAM7CgJ,EAAe7nB,CAAA6nB,aAN8B,CAO7CC,EAAkB,EAEtBthB,EAAAuhB,OAAA,CAAc,CAAA,CAEd,KAAI1B,EAA0B,CAA9B,CACIC,EAA8B,EAGlC9f,EAAAwhB,6BAAA,CAAoC5B,CACpC5f,EAAAyhB,6BAAA,CAAoCC,QAAQ,EAAG,CAAE7B,CAAA,EAAF,CAkC/C7f,EAAA2hB,gCAAA,CAAuCC,QAAQ,CAACC,CAAD,CAAW,CAIxDznB,CAAA,CAAQgmB,CAAR,CAAiB,QAAQ,CAACC,CAAD,CAAS,CAAEA,CAAA,EAAF,CAAlC,CAEgC,EAAhC,GAAIR,CAAJ,CACEgC,CAAA,EADF,CAGE/B,CAAAthB,KAAA,CAAiCqjB,CAAjC,CATsD,CAlDT,KAkE7CzB,EAAU,EAlEmC,CAmE7CE,CAaJtgB,EAAA8hB,UAAA,CAAiBC,QAAQ,CAAC9hB,CAAD,CAAK,CACxB3D,CAAA,CAAYgkB,CAAZ,CAAJ;AAA8BL,CAAA,CAAY,GAAZ,CAAiB5H,CAAjB,CAC9B+H,EAAA5hB,KAAA,CAAayB,CAAb,CACA,OAAOA,EAHqB,CAhFmB,KAyG7CygB,CAzG6C,CAyGhCM,CAzGgC,CA0G7CF,EAAiBlc,CAAAod,KA1G4B,CA2G7CC,GAAcxoB,CAAA6D,KAAA,CAAc,MAAd,CA3G+B,CA4G7C4kB,EAAiB,IAErB1B,EAAA,EACAQ,EAAA,CAAmBN,CAsBnB1gB,EAAA+gB,IAAA,CAAWoB,QAAQ,CAACpB,CAAD,CAAMxf,CAAN,CAAeqf,CAAf,CAAsB,CAInCtkB,CAAA,CAAYskB,CAAZ,CAAJ,GACEA,CADF,CACU,IADV,CAKIhc,EAAJ,GAAiBpL,CAAAoL,SAAjB,GAAkCA,CAAlC,CAA6CpL,CAAAoL,SAA7C,CACI+b,EAAJ,GAAgBnnB,CAAAmnB,QAAhB,GAAgCA,CAAhC,CAA0CnnB,CAAAmnB,QAA1C,CAGA,IAAII,CAAJ,CAAS,CACP,IAAIqB,EAAYpB,CAAZoB,GAAiCxB,CAKrC,IAAIE,CAAJ,GAAuBC,CAAvB,GAAgCJ,CAAA5O,CAAA4O,QAAhC,EAAoDyB,CAApD,EACE,MAAOpiB,EAET,KAAIqiB,EAAWvB,CAAXuB,EAA6BC,EAAA,CAAUxB,CAAV,CAA7BuB,GAA2DC,EAAA,CAAUvB,CAAV,CAC/DD,EAAA,CAAiBC,CACjBC,EAAA,CAAmBJ,CAKfD,EAAA5O,CAAA4O,QAAJ,EAA0B0B,CAA1B,EAAuCD,CAAvC,EAMOC,CAGL,GAFEH,CAEF,CAFmBnB,CAEnB,EAAIxf,CAAJ,CACEqD,CAAArD,QAAA,CAAiBwf,CAAjB,CADF,CAEYsB,CAAL,EAGLzd,CAAA,CAAAA,CAAA,CAxIF7G,CAwIE,CAAwBgjB,CAxIlB/iB,QAAA,CAAY,GAAZ,CAwIN,CAvIN,CAuIM,CAvIY,EAAX,GAAAD,CAAA,CAAe,EAAf,CAuIuBgjB,CAvIHwB,OAAA,CAAWxkB,CAAX,CAAmB,CAAnB,CAuIrB,CAAA6G,CAAAsa,KAAA,CAAgB,CAHX,EACLta,CAAAod,KADK,CACWjB,CAZpB,GACEJ,CAAA,CAAQpf,CAAA,CAAU,cAAV,CAA2B,WAAnC,CAAA,CAAgDqf,CAAhD,CAAuD,EAAvD,CAA2DG,CAA3D,CAGA,CAFAP,CAAA,EAEA,CAAAQ,CAAA,CAAmBN,CAJrB,CAiBA,OAAO1gB,EAjCA,CAuCP,MAAOkiB,EAAP,EAAyBtd,CAAAod,KAAAzgB,QAAA,CAAsB,MAAtB,CAA6B,GAA7B,CApDY,CAkEzCvB,EAAA4gB,MAAA,CAAa4B,QAAQ,EAAG,CACtB,MAAO9B,EADe,CAvMyB,KA2M7CO;AAAqB,EA3MwB,CA4M7CwB,GAAgB,CAAA,CA5M6B,CAoN7C5B,EAAkB,IA8CtB7gB,EAAA0iB,YAAA,CAAmBC,QAAQ,CAACd,CAAD,CAAW,CAEpC,GAAKY,CAAAA,EAAL,CAAoB,CAMlB,GAAI1Q,CAAA4O,QAAJ,CAAsB5f,CAAA,CAAOvH,CAAP,CAAAmM,GAAA,CAAkB,UAAlB,CAA8B4a,CAA9B,CAEtBxf,EAAA,CAAOvH,CAAP,CAAAmM,GAAA,CAAkB,YAAlB,CAAgC4a,CAAhC,CAEAkC,GAAA,CAAgB,CAAA,CAVE,CAapBxB,CAAAziB,KAAA,CAAwBqjB,CAAxB,CACA,OAAOA,EAhB6B,CAwBtC7hB,EAAA4iB,iBAAA,CAAwBnC,CAexBzgB,EAAA6iB,SAAA,CAAgBC,QAAQ,EAAG,CACzB,IAAId,EAAOC,EAAA5kB,KAAA,CAAiB,MAAjB,CACX,OAAO2kB,EAAA,CAAOA,CAAAzgB,QAAA,CAAa,wBAAb,CAAuC,EAAvC,CAAP,CAAoD,EAFlC,CAQ3B,KAAIwhB,GAAc,EAAlB,CACIC,EAAmB,EADvB,CAEIC,GAAajjB,CAAA6iB,SAAA,EA8BjB7iB,EAAAkjB,QAAA,CAAeC,QAAQ,CAACrgB,CAAD,CAAO3H,CAAP,CAAc,CAAA,IAC/BioB,CAD+B,CACJC,CADI,CACIroB,CADJ,CACO+C,CAE1C,IAAI+E,CAAJ,CACM3H,CAAJ,GAAczB,CAAd,CACE0nB,CAAAiC,OADF,CACuBjhB,kBAAA,CAAmBU,CAAnB,CADvB,CACkD,SADlD,CAC8DmgB,EAD9D,CAE0B,wCAF1B,CAIM/oB,CAAA,CAASiB,CAAT,CAJN,GAKIioB,CAOA,CAPerpB,CAACqnB,CAAAiC,OAADtpB,CAAsBqI,kBAAA,CAAmBU,CAAnB,CAAtB/I,CAAiD,GAAjDA,CAAuDqI,kBAAA,CAAmBjH,CAAnB,CAAvDpB,CACO,QADPA,CACkBkpB,EADlBlpB,QAOf;AANsD,CAMtD,CAAmB,IAAnB,CAAIqpB,CAAJ,EACEnS,CAAAqS,KAAA,CAAU,UAAV,CAAuBxgB,CAAvB,CACE,6DADF,CAEEsgB,CAFF,CAEiB,iBAFjB,CAbN,CADF,KAoBO,CACL,GAAIhC,CAAAiC,OAAJ,GAA2BL,CAA3B,CAKE,IAJAA,CAIK,CAJc5B,CAAAiC,OAId,CAHLE,CAGK,CAHSP,CAAAvlB,MAAA,CAAuB,IAAvB,CAGT,CAFLslB,EAEK,CAFS,EAET,CAAA/nB,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgBuoB,CAAAxpB,OAAhB,CAAoCiB,CAAA,EAApC,CACEqoB,CAEA,CAFSE,CAAA,CAAYvoB,CAAZ,CAET,CADA+C,CACA,CADQslB,CAAArlB,QAAA,CAAe,GAAf,CACR,CAAY,CAAZ,CAAID,CAAJ,GACE+E,CAIA,CAJOqe,CAAA,CAAuBkC,CAAAG,UAAA,CAAiB,CAAjB,CAAoBzlB,CAApB,CAAvB,CAIP,CAAIglB,EAAA,CAAYjgB,CAAZ,CAAJ,GAA0BpJ,CAA1B,GACEqpB,EAAA,CAAYjgB,CAAZ,CADF,CACsBqe,CAAA,CAAuBkC,CAAAG,UAAA,CAAiBzlB,CAAjB,CAAyB,CAAzB,CAAvB,CADtB,CALF,CAWJ,OAAOglB,GApBF,CAvB4B,CA8DrC/iB,EAAAyjB,MAAA,CAAaC,QAAQ,CAACzjB,CAAD,CAAK0jB,CAAL,CAAY,CAC/B,IAAIC,CACJ/D,EAAA,EACA+D,EAAA,CAAYvL,CAAA,CAAW,QAAQ,EAAG,CAChC,OAAOiJ,CAAA,CAAgBsC,CAAhB,CACPhE,EAAA,CAA2B3f,CAA3B,CAFgC,CAAtB,CAGT0jB,CAHS,EAGA,CAHA,CAIZrC,EAAA,CAAgBsC,CAAhB,CAAA,CAA6B,CAAA,CAC7B,OAAOA,EARwB,CAsBjC5jB,EAAAyjB,MAAAI,OAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAU,CACpC,MAAIzC,EAAA,CAAgByC,CAAhB,CAAJ,EACE,OAAOzC,CAAA,CAAgByC,CAAhB,CAGA,CAFP1C,CAAA,CAAa0C,CAAb,CAEO,CADPnE,CAAA,CAA2B1jB,CAA3B,CACO,CAAA,CAAA,CAJT,EAMO,CAAA,CAP6B,CAraW,CAibnD0T,QAASA,GAAgB,EAAG,CAC1B,IAAA+J,KAAA,CAAY,CAAC,SAAD,CAAY,MAAZ,CAAoB,UAApB;AAAgC,WAAhC,CACR,QAAQ,CAAClH,CAAD,CAAUxB,CAAV,CAAgBc,CAAhB,CAA0B9B,CAA1B,CAAqC,CAC3C,MAAO,KAAI0P,EAAJ,CAAYlN,CAAZ,CAAqBxC,CAArB,CAAgCgB,CAAhC,CAAsCc,CAAtC,CADoC,CADrC,CADc,CAwF5BjC,QAASA,GAAqB,EAAG,CAE/B,IAAA6J,KAAA,CAAYC,QAAQ,EAAG,CAGrBoK,QAASA,EAAY,CAACC,CAAD,CAAUC,CAAV,CAAmB,CAwMtCC,QAASA,EAAO,CAACC,CAAD,CAAQ,CAClBA,CAAJ,EAAaC,CAAb,GACOC,CAAL,CAEWA,CAFX,EAEuBF,CAFvB,GAGEE,CAHF,CAGaF,CAAAG,EAHb,EACED,CADF,CACaF,CAQb,CAHAI,CAAA,CAAKJ,CAAAG,EAAL,CAAcH,CAAAK,EAAd,CAGA,CAFAD,CAAA,CAAKJ,CAAL,CAAYC,CAAZ,CAEA,CADAA,CACA,CADWD,CACX,CAAAC,CAAAE,EAAA,CAAa,IAVf,CADsB,CAmBxBC,QAASA,EAAI,CAACE,CAAD,CAAYC,CAAZ,CAAuB,CAC9BD,CAAJ,EAAiBC,CAAjB,GACMD,CACJ,GADeA,CAAAD,EACf,CAD6BE,CAC7B,EAAIA,CAAJ,GAAeA,CAAAJ,EAAf,CAA6BG,CAA7B,CAFF,CADkC,CA1NpC,GAAIT,CAAJ,GAAeW,EAAf,CACE,KAAMjrB,EAAA,CAAO,eAAP,CAAA,CAAwB,KAAxB,CAAkEsqB,CAAlE,CAAN,CAFoC,IAKlCY,EAAO,CAL2B,CAMlCC,EAAQrpB,CAAA,CAAO,EAAP,CAAWyoB,CAAX,CAAoB,CAACa,GAAId,CAAL,CAApB,CAN0B,CAOlC9f,EAAO,EAP2B,CAQlC6gB,EAAYd,CAAZc,EAAuBd,CAAAc,SAAvBA,EAA4CC,MAAAC,UARV,CASlCC,EAAU,EATwB,CAUlCd,EAAW,IAVuB,CAWlCC,EAAW,IAyCf,OAAOM,EAAA,CAAOX,CAAP,CAAP,CAAyB,CAoBvB1J,IAAKA,QAAQ,CAAChgB,CAAD,CAAMY,CAAN,CAAa,CACxB,GAAI6pB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ5qB,CAAR,CAAX6qB,GAA4BD,CAAA,CAAQ5qB,CAAR,CAA5B6qB,CAA2C,CAAC7qB,IAAKA,CAAN,CAA3C6qB,CAEJjB,EAAA,CAAQiB,CAAR,CAH+B,CAMjC,GAAI,CAAA9oB,CAAA,CAAYnB,CAAZ,CAAJ,CAQA,MAPMZ,EAOCY,GAPMgJ,EAONhJ,EAPa0pB,CAAA,EAOb1pB,CANPgJ,CAAA,CAAK5J,CAAL,CAMOY,CANKA,CAMLA,CAJH0pB,CAIG1pB,CAJI6pB,CAIJ7pB,EAHL,IAAAkqB,OAAA,CAAYf,CAAA/pB,IAAZ,CAGKY,CAAAA,CAfiB,CApBH,CAiDvB6J,IAAKA,QAAQ,CAACzK,CAAD,CAAM,CACjB,GAAIyqB,CAAJ;AAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ5qB,CAAR,CAEf,IAAK6qB,CAAAA,CAAL,CAAe,MAEfjB,EAAA,CAAQiB,CAAR,CAL+B,CAQjC,MAAOjhB,EAAA,CAAK5J,CAAL,CATU,CAjDI,CAwEvB8qB,OAAQA,QAAQ,CAAC9qB,CAAD,CAAM,CACpB,GAAIyqB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ5qB,CAAR,CAEf,IAAK6qB,CAAAA,CAAL,CAAe,MAEXA,EAAJ,EAAgBf,CAAhB,GAA0BA,CAA1B,CAAqCe,CAAAX,EAArC,CACIW,EAAJ,EAAgBd,CAAhB,GAA0BA,CAA1B,CAAqCc,CAAAb,EAArC,CACAC,EAAA,CAAKY,CAAAb,EAAL,CAAgBa,CAAAX,EAAhB,CAEA,QAAOU,CAAA,CAAQ5qB,CAAR,CATwB,CAYjC,OAAO4J,CAAA,CAAK5J,CAAL,CACPsqB,EAAA,EAdoB,CAxEC,CAkGvBS,UAAWA,QAAQ,EAAG,CACpBnhB,CAAA,CAAO,EACP0gB,EAAA,CAAO,CACPM,EAAA,CAAU,EACVd,EAAA,CAAWC,CAAX,CAAsB,IAJF,CAlGC,CAmHvBiB,QAASA,QAAQ,EAAG,CAGlBJ,CAAA,CADAL,CACA,CAFA3gB,CAEA,CAFO,IAGP,QAAOygB,CAAA,CAAOX,CAAP,CAJW,CAnHG,CA2IvBuB,KAAMA,QAAQ,EAAG,CACf,MAAO/pB,EAAA,CAAO,EAAP,CAAWqpB,CAAX,CAAkB,CAACD,KAAMA,CAAP,CAAlB,CADQ,CA3IM,CApDa,CAFxC,IAAID,EAAS,EA+ObZ,EAAAwB,KAAA,CAAoBC,QAAQ,EAAG,CAC7B,IAAID,EAAO,EACXprB,EAAA,CAAQwqB,CAAR,CAAgB,QAAQ,CAAClI,CAAD,CAAQuH,CAAR,CAAiB,CACvCuB,CAAA,CAAKvB,CAAL,CAAA,CAAgBvH,CAAA8I,KAAA,EADuB,CAAzC,CAGA,OAAOA,EALsB,CAmB/BxB,EAAAhf,IAAA,CAAmB0gB,QAAQ,CAACzB,CAAD,CAAU,CACnC,MAAOW,EAAA,CAAOX,CAAP,CAD4B,CAKrC,OAAOD,EAxQc,CAFQ,CAyTjC9R,QAASA,GAAsB,EAAG,CAChC,IAAAyH,KAAA,CAAY,CAAC,eAAD,CAAkB,QAAQ,CAAC9J,CAAD,CAAgB,CACpD,MAAOA,EAAA,CAAc,WAAd,CAD6C,CAA1C,CADoB,CA7jLK;AA8vMvC7F,QAASA,GAAgB,CAACtG,CAAD,CAAWiiB,CAAX,CAAkC,CAazDC,QAASA,EAAoB,CAAC5hB,CAAD,CAAQ6hB,CAAR,CAAuB,CAClD,IAAIC,EAAe,oCAAnB,CAEIC,EAAW,EAEf3rB,EAAA,CAAQ4J,CAAR,CAAe,QAAQ,CAACgiB,CAAD,CAAaC,CAAb,CAAwB,CAC7C,IAAIpnB,EAAQmnB,CAAAnnB,MAAA,CAAiBinB,CAAjB,CAEZ,IAAKjnB,CAAAA,CAAL,CACE,KAAMqnB,GAAA,CAAe,MAAf,CAGFL,CAHE,CAGaI,CAHb,CAGwBD,CAHxB,CAAN,CAMFD,CAAA,CAASE,CAAT,CAAA,CAAsB,CACpBE,KAAMtnB,CAAA,CAAM,CAAN,CAAA,CAAS,CAAT,CADc,CAEpBunB,WAAyB,GAAzBA,GAAYvnB,CAAA,CAAM,CAAN,CAFQ,CAGpBwnB,SAAuB,GAAvBA,GAAUxnB,CAAA,CAAM,CAAN,CAHU,CAIpBynB,SAAUznB,CAAA,CAAM,CAAN,CAAVynB,EAAsBL,CAJF,CAVuB,CAA/C,CAkBA,OAAOF,EAvB2C,CAbK,IACrDQ,EAAgB,EADqC,CAGrDC,EAA2B,qCAH0B,CAIrDC,EAAyB,6BAJ4B,CAKrDC,EAAuBnpB,EAAA,CAAQ,2BAAR,CAL8B,CAMrDopB,EAAwB,6BAN6B,CAWrDC,EAA4B,yBA2C/B,KAAAzd,UAAA,CAAiB0d,QAASC,EAAiB,CAAChkB,CAAD,CAAOikB,CAAP,CAAyB,CACnE/f,EAAA,CAAwBlE,CAAxB,CAA8B,WAA9B,CACI5I,EAAA,CAAS4I,CAAT,CAAJ,EACE4D,EAAA,CAAUqgB,CAAV,CAA4B,kBAA5B,CA8BA,CA7BKR,CAAA9rB,eAAA,CAA6BqI,CAA7B,CA6BL;CA5BEyjB,CAAA,CAAczjB,CAAd,CACA,CADsB,EACtB,CAAAY,CAAAoE,QAAA,CAAiBhF,CAAjB,CA1DOkkB,WA0DP,CAAgC,CAAC,WAAD,CAAc,mBAAd,CAC9B,QAAQ,CAACzJ,CAAD,CAAYpN,CAAZ,CAA+B,CACrC,IAAI8W,EAAa,EACjB7sB,EAAA,CAAQmsB,CAAA,CAAczjB,CAAd,CAAR,CAA6B,QAAQ,CAACikB,CAAD,CAAmBhpB,CAAnB,CAA0B,CAC7D,GAAI,CACF,IAAIoL,EAAYoU,CAAAzZ,OAAA,CAAiBijB,CAAjB,CACZvsB,EAAA,CAAW2O,CAAX,CAAJ,CACEA,CADF,CACc,CAAElF,QAAS5H,EAAA,CAAQ8M,CAAR,CAAX,CADd,CAEYlF,CAAAkF,CAAAlF,QAFZ,EAEiCkF,CAAAqb,KAFjC,GAGErb,CAAAlF,QAHF,CAGsB5H,EAAA,CAAQ8M,CAAAqb,KAAR,CAHtB,CAKArb,EAAA+d,SAAA,CAAqB/d,CAAA+d,SAArB,EAA2C,CAC3C/d,EAAApL,MAAA,CAAkBA,CAClBoL,EAAArG,KAAA,CAAiBqG,CAAArG,KAAjB,EAAmCA,CACnCqG,EAAAge,QAAA,CAAoBhe,CAAAge,QAApB,EAA0Che,CAAArD,WAA1C,EAAkEqD,CAAArG,KAClEqG,EAAAie,SAAA,CAAqBje,CAAAie,SAArB,EAA2C,IACvC5qB,EAAA,CAAS2M,CAAAnF,MAAT,CAAJ,GACEmF,CAAAke,kBADF,CACgCzB,CAAA,CAAqBzc,CAAAnF,MAArB,CAAsCmF,CAAArG,KAAtC,CADhC,CAGAmkB,EAAAzoB,KAAA,CAAgB2K,CAAhB,CAfE,CAgBF,MAAOjI,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAjBiD,CAA/D,CAqBA,OAAO+lB,EAvB8B,CADT,CAAhC,CA2BF,EAAAV,CAAA,CAAczjB,CAAd,CAAAtE,KAAA,CAAyBuoB,CAAzB,CA/BF,EAiCE3sB,CAAA,CAAQ0I,CAAR,CAAc7H,EAAA,CAAc6rB,CAAd,CAAd,CAEF,OAAO,KArC4D,CA6DrE,KAAAQ,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAIjrB,EAAA,CAAUirB,CAAV,CAAJ;CACE7B,CAAA2B,2BAAA,CAAiDE,CAAjD,CACO,CAAA,IAFT,EAIS7B,CAAA2B,2BAAA,EALwC,CA8BnD,KAAAG,4BAAA,CAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAIjrB,EAAA,CAAUirB,CAAV,CAAJ,EACE7B,CAAA8B,4BAAA,CAAkDD,CAAlD,CACO,CAAA,IAFT,EAIS7B,CAAA8B,4BAAA,EALyC,CA+BpD,KAAI9jB,EAAmB,CAAA,CACvB,KAAAA,iBAAA,CAAwBgkB,QAAQ,CAACC,CAAD,CAAU,CACxC,MAAIrrB,EAAA,CAAUqrB,CAAV,CAAJ,EACEjkB,CACO,CADYikB,CACZ,CAAA,IAFT,EAIOjkB,CALiC,CAQ1C,KAAAgW,KAAA,CAAY,CACF,WADE,CACW,cADX,CAC2B,mBAD3B,CACgD,kBADhD,CACoE,QADpE,CAEF,aAFE,CAEa,YAFb,CAE2B,WAF3B,CAEwC,MAFxC,CAEgD,UAFhD,CAE4D,eAF5D,CAGV,QAAQ,CAAC4D,CAAD,CAAchN,CAAd,CAA8BJ,CAA9B,CAAmDgC,CAAnD,CAAuEhB,CAAvE,CACCpB,CADD,CACgBsB,CADhB,CAC8BpB,CAD9B,CAC2C0B,CAD3C,CACmDlC,CADnD,CAC+D3F,CAD/D,CAC8E,CA2OtF+d,QAASA,EAAY,CAACC,CAAD,CAAWC,CAAX,CAAsB,CACzC,GAAI,CACFD,CAAA/N,SAAA,CAAkBgO,CAAlB,CADE,CAEF,MAAO7mB,CAAP,CAAU,EAH6B,CA3O2C;AA2RtF+C,QAASA,EAAO,CAAC+jB,CAAD,CAAgBC,CAAhB,CAA8BC,CAA9B,CAA2CC,CAA3C,CACIC,CADJ,CAC4B,CACpCJ,CAAN,WAA+BjnB,EAA/B,GAGEinB,CAHF,CAGkBjnB,CAAA,CAAOinB,CAAP,CAHlB,CAOA5tB,EAAA,CAAQ4tB,CAAR,CAAuB,QAAQ,CAAC9qB,CAAD,CAAOa,CAAP,CAAc,CACvCb,CAAAlD,SAAJ,EAAqBsH,EAArB,EAAuCpE,CAAAmrB,UAAAxpB,MAAA,CAAqB,KAArB,CAAvC,GACEmpB,CAAA,CAAcjqB,CAAd,CADF,CACyBgD,CAAA,CAAO7D,CAAP,CAAAgX,KAAA,CAAkB,eAAlB,CAAA8D,OAAA,EAAA,CAA4C,CAA5C,CADzB,CAD2C,CAA7C,CAKA,KAAIsQ,EACIC,EAAA,CAAaP,CAAb,CAA4BC,CAA5B,CAA0CD,CAA1C,CACaE,CADb,CAC0BC,CAD1B,CAC2CC,CAD3C,CAERnkB,EAAAukB,gBAAA,CAAwBR,CAAxB,CACA,KAAIS,EAAY,IAChB,OAAOC,SAAqB,CAAC1kB,CAAD,CAAQ2kB,CAAR,CAAwBzE,CAAxB,CAAiC,CAC3Dxd,EAAA,CAAU1C,CAAV,CAAiB,OAAjB,CAEAkgB,EAAA,CAAUA,CAAV,EAAqB,EAHsC,KAIvD0E,EAA0B1E,CAAA0E,wBAJ6B,CAKzDC,EAAwB3E,CAAA2E,sBACxBC,EAAAA,CAAsB5E,CAAA4E,oBAMpBF,EAAJ,EAA+BA,CAAAG,kBAA/B,GACEH,CADF,CAC4BA,CAAAG,kBAD5B,CAIKN,EAAL,GAyCA,CAzCA,CAsCF,CADIvrB,CACJ,CArCgD4rB,CAqChD,EArCgDA,CAoCpB,CAAc,CAAd,CAC5B,EAG6B,eAApB,GAAAprB,EAAA,CAAUR,CAAV,CAAA,EAAuCA,CAAAP,SAAA,EAAAkC,MAAA,CAAsB,KAAtB,CAAvC,CAAsE,KAAtE,CAA8E,MAHvF,CACS,MAvCP,CAUEmqB,EAAA,CANgB,MAAlB,GAAIP,CAAJ,CAMc1nB,CAAA,CACVkoB,CAAA,CAAaR,CAAb,CAAwB1nB,CAAA,CAAO,OAAP,CAAAK,OAAA,CAAuB4mB,CAAvB,CAAA3mB,KAAA,EAAxB,CADU,CANd;AASWsnB,CAAJ,CAGO/iB,EAAA5E,MAAAtG,KAAA,CAA2BstB,CAA3B,CAHP,CAKOA,CAGd,IAAIa,CAAJ,CACE,IAASK,IAAAA,CAAT,GAA2BL,EAA3B,CACEG,CAAA7kB,KAAA,CAAe,GAAf,CAAqB+kB,CAArB,CAAsC,YAAtC,CAAoDL,CAAA,CAAsBK,CAAtB,CAAA/L,SAApD,CAIJlZ,EAAAklB,eAAA,CAAuBH,CAAvB,CAAkChlB,CAAlC,CAEI2kB,EAAJ,EAAoBA,CAAA,CAAeK,CAAf,CAA0BhlB,CAA1B,CAChBskB,EAAJ,EAAqBA,CAAA,CAAgBtkB,CAAhB,CAAuBglB,CAAvB,CAAkCA,CAAlC,CAA6CJ,CAA7C,CACrB,OAAOI,EA/CoD,CAlBnB,CA8F5CT,QAASA,GAAY,CAACa,CAAD,CAAWnB,CAAX,CAAyBoB,CAAzB,CAAuCnB,CAAvC,CAAoDC,CAApD,CACGC,CADH,CAC2B,CA0C9CE,QAASA,EAAe,CAACtkB,CAAD,CAAQolB,CAAR,CAAkBC,CAAlB,CAAgCT,CAAhC,CAAyD,CAAA,IAC/DU,CAD+D,CAClDpsB,CADkD,CAC5CqsB,CAD4C,CAChCvuB,CADgC,CAC7BW,CAD6B,CACpB6tB,CADoB,CAE3EC,CAGJ,IAAIC,CAAJ,CAOE,IAHAD,CAGK,CAHgBpL,KAAJ,CADI+K,CAAArvB,OACJ,CAGZ,CAAAiB,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgB2uB,CAAA5vB,OAAhB,CAAgCiB,CAAhC,EAAmC,CAAnC,CACE4uB,CACA,CADMD,CAAA,CAAQ3uB,CAAR,CACN,CAAAyuB,CAAA,CAAeG,CAAf,CAAA,CAAsBR,CAAA,CAASQ,CAAT,CAT1B,KAYEH,EAAA,CAAiBL,CAGdpuB,EAAA,CAAI,CAAT,KAAYW,CAAZ,CAAiBguB,CAAA5vB,OAAjB,CAAiCiB,CAAjC,CAAqCW,CAArC,CAAA,CACEuB,CAIA,CAJOusB,CAAA,CAAeE,CAAA,CAAQ3uB,CAAA,EAAR,CAAf,CAIP,CAHA6uB,CAGA,CAHaF,CAAA,CAAQ3uB,CAAA,EAAR,CAGb,CAFAsuB,CAEA,CAFcK,CAAA,CAAQ3uB,CAAA,EAAR,CAEd,CAAI6uB,CAAJ,EACMA,CAAA7lB,MAAJ,EACEulB,CACA,CADavlB,CAAA8lB,KAAA,EACb,CAAA7lB,CAAAklB,eAAA,CAAuBpoB,CAAA,CAAO7D,CAAP,CAAvB,CAAqCqsB,CAArC,CAFF,EAIEA,CAJF,CAIevlB,CAkBf,CAdEwlB,CAcF,CAfIK,CAAAE,wBAAJ,CAC2BC,CAAA,CACrBhmB,CADqB,CACd6lB,CAAAI,WADc,CACSrB,CADT,CAErBiB,CAAAK,+BAFqB,CAD3B,CAKYC,CAAAN,CAAAM,sBAAL,EAAyCvB,CAAzC,CACoBA,CADpB,CAGKA,CAAAA,CAAL,EAAgCX,CAAhC,CACoB+B,CAAA,CAAwBhmB,CAAxB;AAA+BikB,CAA/B,CADpB,CAIoB,IAG3B,CAAA4B,CAAA,CAAWP,CAAX,CAAwBC,CAAxB,CAAoCrsB,CAApC,CAA0CmsB,CAA1C,CAAwDG,CAAxD,CAvBF,EAyBWF,CAzBX,EA0BEA,CAAA,CAAYtlB,CAAZ,CAAmB9G,CAAAsX,WAAnB,CAAoC9a,CAApC,CAA+CkvB,CAA/C,CAnD2E,CAtCjF,IAJ8C,IAC1Ce,EAAU,EADgC,CAE1CS,CAF0C,CAEnCnD,CAFmC,CAEXzS,CAFW,CAEc6V,CAFd,CAE2BX,CAF3B,CAIrC1uB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBouB,CAAArvB,OAApB,CAAqCiB,CAAA,EAArC,CAA0C,CACxCovB,CAAA,CAAQ,IAAIE,CAGZrD,EAAA,CAAasD,CAAA,CAAkBnB,CAAA,CAASpuB,CAAT,CAAlB,CAA+B,EAA/B,CAAmCovB,CAAnC,CAAgD,CAAN,GAAApvB,CAAA,CAAUktB,CAAV,CAAwBxuB,CAAlE,CACmByuB,CADnB,CAQb,EALA0B,CAKA,CALc5C,CAAAltB,OAAD,CACPywB,EAAA,CAAsBvD,CAAtB,CAAkCmC,CAAA,CAASpuB,CAAT,CAAlC,CAA+CovB,CAA/C,CAAsDnC,CAAtD,CAAoEoB,CAApE,CACwB,IADxB,CAC8B,EAD9B,CACkC,EADlC,CACsCjB,CADtC,CADO,CAGP,IAEN,GAAkByB,CAAA7lB,MAAlB,EACEC,CAAAukB,gBAAA,CAAwB4B,CAAAK,UAAxB,CAGFnB,EAAA,CAAeO,CAAD,EAAeA,CAAAa,SAAf,EACE,EAAAlW,CAAA,CAAa4U,CAAA,CAASpuB,CAAT,CAAAwZ,WAAb,CADF,EAECza,CAAAya,CAAAza,OAFD,CAGR,IAHQ,CAIRwuB,EAAA,CAAa/T,CAAb,CACGqV,CAAA,EACEA,CAAAE,wBADF,EACwC,CAACF,CAAAM,sBADzC,GAEON,CAAAI,WAFP,CAEgChC,CAHnC,CAKN,IAAI4B,CAAJ,EAAkBP,CAAlB,CACEK,CAAAnrB,KAAA,CAAaxD,CAAb,CAAgB6uB,CAAhB,CAA4BP,CAA5B,CAEA,CADAe,CACA,CADc,CAAA,CACd,CAAAX,CAAA,CAAkBA,CAAlB,EAAqCG,CAIvCzB,EAAA,CAAyB,IAhCe,CAoC1C,MAAOiC,EAAA,CAAc/B,CAAd,CAAgC,IAxCO,CAmGhD0B,QAASA,EAAuB,CAAChmB,CAAD,CAAQikB,CAAR,CAAsB0C,CAAtB,CAAiDC,CAAjD,CAAsE,CAgBpG,MAdwBC,SAAQ,CAACC,CAAD,CAAmBC,CAAnB,CAA4BC,CAA5B,CAAyClC,CAAzC,CAA8DmC,CAA9D,CAA+E,CAExGH,CAAL,GACEA,CACA,CADmB9mB,CAAA8lB,KAAA,CAAW,CAAA,CAAX,CAAkBmB,CAAlB,CACnB,CAAAH,CAAAI,cAAA,CAAiC,CAAA,CAFnC,CAKA,OAAOjD,EAAA,CAAa6C,CAAb,CAA+BC,CAA/B;AAAwC,CAC7CnC,wBAAyB+B,CADoB,CAE7C9B,sBAAuBmC,CAFsB,CAG7ClC,oBAAqBA,CAHwB,CAAxC,CAPsG,CAFX,CA6BtGyB,QAASA,EAAiB,CAACrtB,CAAD,CAAO+pB,CAAP,CAAmBmD,CAAnB,CAA0BlC,CAA1B,CAAuCC,CAAvC,CAAwD,CAAA,IAE5EgD,EAAWf,CAAAgB,MAFiE,CAG5EvsB,CAGJ,QALe3B,CAAAlD,SAKf,EACE,KAAKC,EAAL,CAEEoxB,EAAA,CAAapE,CAAb,CACIqE,EAAA,CAAmB5tB,EAAA,CAAUR,CAAV,CAAnB,CADJ,CACyC,GADzC,CAC8CgrB,CAD9C,CAC2DC,CAD3D,CAIA,KANF,IAMW9qB,CANX,CAMuBkuB,CANvB,CAMiDC,CANjD,CAM2DC,EAASvuB,CAAAwuB,WANpE,CAOW7vB,EAAI,CAPf,CAOkBC,EAAK2vB,CAAL3vB,EAAe2vB,CAAA1xB,OAD/B,CAC8C8B,CAD9C,CACkDC,CADlD,CACsDD,CAAA,EADtD,CAC2D,CACzD,IAAI8vB,EAAgB,CAAA,CAApB,CACIC,EAAc,CAAA,CAElBvuB,EAAA,CAAOouB,CAAA,CAAO5vB,CAAP,CACPiH,EAAA,CAAOzF,CAAAyF,KACP3H,EAAA,CAAQ0Z,CAAA,CAAKxX,CAAAlC,MAAL,CAGR0wB,EAAA,CAAaP,EAAA,CAAmBxoB,CAAnB,CACb,IAAI0oB,CAAJ,CAAeM,EAAAxnB,KAAA,CAAqBunB,CAArB,CAAf,CACE/oB,CAAA,CAAOmC,EAAA,CAAW4mB,CAAAtJ,OAAA,CAAkB,CAAlB,CAAX,CAAiC,GAAjC,CAGT,KAAIwJ,EAAiBF,CAAAtqB,QAAA,CAAmB,cAAnB,CAAmC,EAAnC,CAArB,CACI,CAspB2B,EAAA,CAAA,CAtpBHwqB,IAAAA,EAAAA,CAupBlC,IAAIxF,CAAA9rB,eAAA,CAA6BqI,CAA7B,CAAJ,CAAwC,CAC7BqG,CAAAA,CAAAA,IAAAA,EAAT,KAAoB8d,IAAAA,EAAa1J,CAAAvY,IAAA,CAAclC,CAAd,CA32C1BkkB,WA22C0B,CAAbC,CAChBjsB,EAAI,CADYisB,CACTtrB,EAAKsrB,CAAAltB,OADhB,CACmCiB,CADnC,CACuCW,CADvC,CAC2CX,CAAA,EAD3C,CAGE,GADAmO,CACI6iB,CADQ/E,CAAA,CAAWjsB,CAAX,CACRgxB,CAAA7iB,CAAA6iB,aAAJ,CAA4B,CAC1B,CAAA,CAAO,CAAA,CAAP,OAAA,CAD0B,CAJQ,CASxC,CAAA,CAAO,CAAA,CAV8B,CAtpB3B,CAAJ,EACMH,CADN,GACqBE,CADrB,CACsC,OADtC;CAEIJ,CAEA,CAFgB7oB,CAEhB,CADA8oB,CACA,CADc9oB,CAAAyf,OAAA,CAAY,CAAZ,CAAezf,CAAA/I,OAAf,CAA6B,CAA7B,CACd,CADgD,KAChD,CAAA+I,CAAA,CAAOA,CAAAyf,OAAA,CAAY,CAAZ,CAAezf,CAAA/I,OAAf,CAA6B,CAA7B,CAJX,CAQAwxB,EAAA,CAAQD,EAAA,CAAmBxoB,CAAAwC,YAAA,EAAnB,CACR6lB,EAAA,CAASI,CAAT,CAAA,CAAkBzoB,CAClB,IAAI0oB,CAAJ,EAAiB,CAAApB,CAAA3vB,eAAA,CAAqB8wB,CAArB,CAAjB,CACInB,CAAA,CAAMmB,CAAN,CACA,CADepwB,CACf,CAAImd,EAAA,CAAmBpb,CAAnB,CAAyBquB,CAAzB,CAAJ,GACEnB,CAAA,CAAMmB,CAAN,CADF,CACiB,CAAA,CADjB,CAIJU,EAAA,CAA4B/uB,CAA5B,CAAkC+pB,CAAlC,CAA8C9rB,CAA9C,CAAqDowB,CAArD,CAA4DC,CAA5D,CACAH,GAAA,CAAapE,CAAb,CAAyBsE,CAAzB,CAAgC,GAAhC,CAAqCrD,CAArC,CAAkDC,CAAlD,CAAmEwD,CAAnE,CACcC,CADd,CAhCyD,CAqC3D7D,CAAA,CAAY7qB,CAAA6qB,UACZ,IAAI7tB,CAAA,CAAS6tB,CAAT,CAAJ,EAAyC,EAAzC,GAA2BA,CAA3B,CACE,IAAA,CAAOlpB,CAAP,CAAe4nB,CAAAxS,KAAA,CAA4B8T,CAA5B,CAAf,CAAA,CACEwD,CAIA,CAJQD,EAAA,CAAmBzsB,CAAA,CAAM,CAAN,CAAnB,CAIR,CAHIwsB,EAAA,CAAapE,CAAb,CAAyBsE,CAAzB,CAAgC,GAAhC,CAAqCrD,CAArC,CAAkDC,CAAlD,CAGJ,GAFEiC,CAAA,CAAMmB,CAAN,CAEF,CAFiB1W,CAAA,CAAKhW,CAAA,CAAM,CAAN,CAAL,CAEjB,EAAAkpB,CAAA,CAAYA,CAAAxF,OAAA,CAAiB1jB,CAAAd,MAAjB,CAA+Bc,CAAA,CAAM,CAAN,CAAA9E,OAA/B,CAGhB,MACF,MAAKuH,EAAL,CACE4qB,CAAA,CAA4BjF,CAA5B,CAAwC/pB,CAAAmrB,UAAxC,CACA,MACF,MAr4KgB8D,CAq4KhB,CACE,GAAI,CAEF,GADAttB,CACA,CADQ2nB,CAAAvS,KAAA,CAA8B/W,CAAAmrB,UAA9B,CACR,CACEkD,CACA,CADQD,EAAA,CAAmBzsB,CAAA,CAAM,CAAN,CAAnB,CACR,CAAIwsB,EAAA,CAAapE,CAAb,CAAyBsE,CAAzB,CAAgC,GAAhC,CAAqCrD,CAArC,CAAkDC,CAAlD,CAAJ,GACEiC,CAAA,CAAMmB,CAAN,CADF,CACiB1W,CAAA,CAAKhW,CAAA,CAAM,CAAN,CAAL,CADjB,CAJA,CAQF,MAAOqC,EAAP,CAAU,EApEhB,CA4EA+lB,CAAAlsB,KAAA,CAAgBqxB,CAAhB,CACA,OAAOnF,EAnFyE,CA8FlFoF,QAASA,GAAS,CAACnvB,CAAD,CAAOovB,CAAP,CAAkBC,CAAlB,CAA2B,CAC3C,IAAIhlB,EAAQ,EAAZ,CACIilB,EAAQ,CACZ,IAAIF,CAAJ,EAAiBpvB,CAAA6F,aAAjB;AAAsC7F,CAAA6F,aAAA,CAAkBupB,CAAlB,CAAtC,EACE,EAAG,CACD,GAAKpvB,CAAAA,CAAL,CACE,KAAMgpB,GAAA,CAAe,SAAf,CAEIoG,CAFJ,CAEeC,CAFf,CAAN,CAIErvB,CAAAlD,SAAJ,EAAqBC,EAArB,GACMiD,CAAA6F,aAAA,CAAkBupB,CAAlB,CACJ,EADkCE,CAAA,EAClC,CAAItvB,CAAA6F,aAAA,CAAkBwpB,CAAlB,CAAJ,EAAgCC,CAAA,EAFlC,CAIAjlB,EAAA/I,KAAA,CAAWtB,CAAX,CACAA,EAAA,CAAOA,CAAAwK,YAXN,CAAH,MAYiB,CAZjB,CAYS8kB,CAZT,CADF,KAeEjlB,EAAA/I,KAAA,CAAWtB,CAAX,CAGF,OAAO6D,EAAA,CAAOwG,CAAP,CArBoC,CAgC7CklB,QAASA,EAA0B,CAACC,CAAD,CAASJ,CAAT,CAAoBC,CAApB,CAA6B,CAC9D,MAAO,SAAQ,CAACvoB,CAAD,CAAQrG,CAAR,CAAiBysB,CAAjB,CAAwBY,CAAxB,CAAqC/C,CAArC,CAAmD,CAChEtqB,CAAA,CAAU0uB,EAAA,CAAU1uB,CAAA,CAAQ,CAAR,CAAV,CAAsB2uB,CAAtB,CAAiCC,CAAjC,CACV,OAAOG,EAAA,CAAO1oB,CAAP,CAAcrG,CAAd,CAAuBysB,CAAvB,CAA8BY,CAA9B,CAA2C/C,CAA3C,CAFyD,CADJ,CA8BhEuC,QAASA,GAAqB,CAACvD,CAAD,CAAa0F,CAAb,CAA0BC,CAA1B,CAAyC3E,CAAzC,CACC4E,CADD,CACeC,CADf,CACyCC,CADzC,CACqDC,CADrD,CAEC5E,CAFD,CAEyB,CAiNrD6E,QAASA,EAAU,CAACC,CAAD,CAAMC,CAAN,CAAYb,CAAZ,CAAuBC,CAAvB,CAAgC,CACjD,GAAIW,CAAJ,CAAS,CACHZ,CAAJ,GAAeY,CAAf,CAAqBT,CAAA,CAA2BS,CAA3B,CAAgCZ,CAAhC,CAA2CC,CAA3C,CAArB,CACAW,EAAA/F,QAAA,CAAche,CAAAge,QACd+F,EAAArH,cAAA,CAAoBA,EACpB,IAAIuH,CAAJ,GAAiCjkB,CAAjC,EAA8CA,CAAAkkB,eAA9C,CACEH,CAAA,CAAMI,CAAA,CAAmBJ,CAAnB,CAAwB,CAACrnB,aAAc,CAAA,CAAf,CAAxB,CAERknB,EAAAvuB,KAAA,CAAgB0uB,CAAhB,CAPO,CAST,GAAIC,CAAJ,CAAU,CACJb,CAAJ,GAAea,CAAf,CAAsBV,CAAA,CAA2BU,CAA3B,CAAiCb,CAAjC,CAA4CC,CAA5C,CAAtB,CACAY,EAAAhG,QAAA,CAAehe,CAAAge,QACfgG,EAAAtH,cAAA,CAAqBA,EACrB,IAAIuH,CAAJ;AAAiCjkB,CAAjC,EAA8CA,CAAAkkB,eAA9C,CACEF,CAAA,CAAOG,CAAA,CAAmBH,CAAnB,CAAyB,CAACtnB,aAAc,CAAA,CAAf,CAAzB,CAETmnB,EAAAxuB,KAAA,CAAiB2uB,CAAjB,CAPQ,CAVuC,CAsBnDI,QAASA,EAAc,CAAC1H,CAAD,CAAgBsB,CAAhB,CAAyBW,CAAzB,CAAmC0F,CAAnC,CAAuD,CAAA,IACxEryB,CADwE,CACjEsyB,EAAkB,MAD+C,CACvCpH,EAAW,CAAA,CAD4B,CAExEqH,EAAiB5F,CAFuD,CAGxEjpB,CACJ,IAAI3E,CAAA,CAASitB,CAAT,CAAJ,CAAuB,CACrBtoB,CAAA,CAAQsoB,CAAAtoB,MAAA,CAAc8nB,CAAd,CACRQ,EAAA,CAAUA,CAAA3D,UAAA,CAAkB3kB,CAAA,CAAM,CAAN,CAAA9E,OAAlB,CAEN8E,EAAA,CAAM,CAAN,CAAJ,GACMA,CAAA,CAAM,CAAN,CAAJ,CAAcA,CAAA,CAAM,CAAN,CAAd,CAAyB,IAAzB,CACKA,CAAA,CAAM,CAAN,CADL,CACgBA,CAAA,CAAM,CAAN,CAFlB,CAIiB,IAAjB,GAAIA,CAAA,CAAM,CAAN,CAAJ,CACE4uB,CADF,CACoB,eADpB,CAEwB,IAFxB,GAEW5uB,CAAA,CAAM,CAAN,CAFX,GAGE4uB,CACA,CADkB,eAClB,CAAAC,CAAA,CAAiB5F,CAAA9P,OAAA,EAJnB,CAMiB,IAAjB,GAAInZ,CAAA,CAAM,CAAN,CAAJ,GACEwnB,CADF,CACa,CAAA,CADb,CAIAlrB,EAAA,CAAQ,IAEJqyB,EAAJ,EAA8C,MAA9C,GAA0BC,CAA1B,GACMtyB,CADN,CACcqyB,CAAA,CAAmBrG,CAAnB,CADd,IAEIhsB,CAFJ,CAEYA,CAAAgiB,SAFZ,CAKAhiB,EAAA,CAAQA,CAAR,EAAiBuyB,CAAA,CAAeD,CAAf,CAAA,CAAgC,GAAhC,CAAsCtG,CAAtC,CAAgD,YAAhD,CAEjB,IAAKhsB,CAAAA,CAAL,EAAekrB,CAAAA,CAAf,CACE,KAAMH,GAAA,CAAe,OAAf,CAEFiB,CAFE,CAEOtB,CAFP,CAAN,CAIF,MAAO1qB,EAAP,EAAgB,IAhCK,CAiCZhB,CAAA,CAAQgtB,CAAR,CAAJ,GACLhsB,CACA,CADQ,EACR,CAAAf,CAAA,CAAQ+sB,CAAR,CAAiB,QAAQ,CAACA,CAAD,CAAU,CACjChsB,CAAAqD,KAAA,CAAW+uB,CAAA,CAAe1H,CAAf,CAA8BsB,CAA9B,CAAuCW,CAAvC,CAAiD0F,CAAjD,CAAX,CADiC,CAAnC,CAFK,CAMP,OAAOryB,EA3CqE,CA+C9E0uB,QAASA,EAAU,CAACP,CAAD,CAActlB,CAAd,CAAqB2pB,CAArB,CAA+BtE,CAA/B,CAA6CwB,CAA7C,CAAgE,CAqLjF+C,QAASA,EAA0B,CAAC5pB,CAAD,CAAQ6pB,CAAR,CAAuB/E,CAAvB,CAA4C,CAC7E,IAAID,CAGChsB;EAAA,CAAQmH,CAAR,CAAL,GACE8kB,CAEA,CAFsB+E,CAEtB,CADAA,CACA,CADgB7pB,CAChB,CAAAA,CAAA,CAAQtK,CAHV,CAMIo0B,GAAJ,GACEjF,CADF,CAC0B2E,CAD1B,CAGK1E,EAAL,GACEA,CADF,CACwBgF,EAAA,CAAgChG,CAAA9P,OAAA,EAAhC,CAAoD8P,CAD5E,CAGA,OAAO+C,EAAA,CAAkB7mB,CAAlB,CAAyB6pB,CAAzB,CAAwChF,CAAxC,CAA+DC,CAA/D,CAAoFiF,EAApF,CAhBsE,CArLE,IAC1EpyB,CAD0E,CACtE+wB,CADsE,CAC9D5mB,CAD8D,CAClDD,CADkD,CACpC2nB,CADoC,CAChBvF,EADgB,CACFH,CADE,CAE7EsC,CAEAuC,EAAJ,GAAoBgB,CAApB,EACEvD,CACA,CADQwC,CACR,CAAA9E,CAAA,CAAW8E,CAAAnC,UAFb,GAIE3C,CACA,CADW/mB,CAAA,CAAO4sB,CAAP,CACX,CAAAvD,CAAA,CAAQ,IAAIE,CAAJ,CAAexC,CAAf,CAAyB8E,CAAzB,CALV,CAQIQ,EAAJ,GACEvnB,CADF,CACiB7B,CAAA8lB,KAAA,CAAW,CAAA,CAAX,CADjB,CAIIe,EAAJ,GAGE5C,EACA,CADe2F,CACf,CAAA3F,EAAAc,kBAAA,CAAiC8B,CAJnC,CAOImD,EAAJ,GAEEhD,EAEA,CAFc,EAEd,CADAwC,CACA,CADqB,EACrB,CAAApzB,CAAA,CAAQ4zB,CAAR,CAA8B,QAAQ,CAAC7kB,CAAD,CAAY,CAAA,IAC5C8T,EAAS,CACXgR,OAAQ9kB,CAAA,GAAcikB,CAAd,EAA0CjkB,CAAAkkB,eAA1C,CAAqExnB,CAArE,CAAoF7B,CADjF,CAEX8jB,SAAUA,CAFC,CAGXoG,OAAQ9D,CAHG,CAIX+D,YAAalG,EAJF,CAObniB,EAAA,CAAaqD,CAAArD,WACK,IAAlB,EAAIA,CAAJ,GACEA,CADF,CACeskB,CAAA,CAAMjhB,CAAArG,KAAN,CADf,CAIAsrB,EAAA,CAAqBre,CAAA,CAAYjK,CAAZ,CAAwBmX,CAAxB,CAAgC,CAAA,CAAhC,CAAsC9T,CAAAklB,aAAtC,CAOrBb,EAAA,CAAmBrkB,CAAArG,KAAnB,CAAA,CAAqCsrB,CAChCN,GAAL,EACEhG,CAAA3jB,KAAA,CAAc,GAAd,CAAoBgF,CAAArG,KAApB,CAAqC,YAArC,CAAmDsrB,CAAAjR,SAAnD,CAGF6N,GAAA,CAAY7hB,CAAArG,KAAZ,CAAA,CAA8BsrB,CAzBkB,CAAlD,CAJF,CAiCA,IAAIhB,CAAJ,CAA8B,CAC5BnpB,CAAAklB,eAAA,CAAuBrB,CAAvB,CAAiCjiB,CAAjC,CAA+C,CAAA,CAA/C,CAAqD,EAAEyoB,EAAF,GAAwBA,EAAxB,GAA8ClB,CAA9C,EACjDkB,EADiD,GAC3BlB,CAAAmB,oBAD2B,EAArD,CAEAtqB;CAAAukB,gBAAA,CAAwBV,CAAxB,CAAkC,CAAA,CAAlC,CAEI0G,EAAAA,CAAyBxD,EAAzBwD,EAAwCxD,EAAA,CAAYoC,CAAAtqB,KAAZ,CAC5C,KAAI2rB,GAAwB5oB,CACxB2oB,EAAJ,EAA8BA,CAAAE,WAA9B,EACkD,CAAA,CADlD,GACItB,CAAAuB,iBADJ,GAEEF,EAFF,CAE0BD,CAAArR,SAF1B,CAKA/iB,EAAA,CAAQyL,CAAAwhB,kBAAR,CAAyC+F,CAAA/F,kBAAzC,CAAqF,QAAQ,CAACrB,CAAD,CAAaC,CAAb,CAAwB,CAAA,IAC/GK,EAAWN,CAAAM,SADoG,CAE/GD,EAAWL,CAAAK,SAFoG,CAI/GuI,CAJ+G,CAK/GC,CAL+G,CAKpGC,CALoG,CAKzFC,CAE1B,QAJW/I,CAAAG,KAIX,EAEE,KAAK,GAAL,CACEiE,CAAA4E,SAAA,CAAe1I,CAAf,CAAyB,QAAQ,CAACnrB,CAAD,CAAQ,CACvCszB,EAAA,CAAsBxI,CAAtB,CAAA,CAAmC9qB,CADI,CAAzC,CAGAivB,EAAA6E,YAAA,CAAkB3I,CAAlB,CAAA4I,QAAA,CAAsClrB,CAClComB,EAAA,CAAM9D,CAAN,CAAJ,GAGEmI,EAAA,CAAsBxI,CAAtB,CAHF,CAGqC1V,CAAA,CAAa6Z,CAAA,CAAM9D,CAAN,CAAb,CAAA,CAA8BtiB,CAA9B,CAHrC,CAKA,MAEF,MAAK,GAAL,CACE,GAAIqiB,CAAJ,EAAiB,CAAA+D,CAAA,CAAM9D,CAAN,CAAjB,CACE,KAEFuI,EAAA,CAAY1d,CAAA,CAAOiZ,CAAA,CAAM9D,CAAN,CAAP,CAEVyI,EAAA,CADEF,CAAAM,QAAJ,CACY9vB,EADZ,CAGY0vB,QAAQ,CAAC9kB,CAAD,CAAImlB,CAAJ,CAAO,CAAE,MAAOnlB,EAAP,GAAamlB,CAAb,EAAmBnlB,CAAnB,GAAyBA,CAAzB,EAA8BmlB,CAA9B,GAAoCA,CAAtC,CAE3BN,EAAA,CAAYD,CAAAQ,OAAZ,EAAgC,QAAQ,EAAG,CAEzCT,CAAA,CAAYH,EAAA,CAAsBxI,CAAtB,CAAZ,CAA+C4I,CAAA,CAAU7qB,CAAV,CAC/C,MAAMkiB,GAAA,CAAe,WAAf,CAEFkE,CAAA,CAAM9D,CAAN,CAFE,CAEe8G,CAAAtqB,KAFf,CAAN,CAHyC,CAO3C8rB,EAAA,CAAYH,EAAA,CAAsBxI,CAAtB,CAAZ,CAA+C4I,CAAA,CAAU7qB,CAAV,CAC3CsrB,EAAAA,CAAmBA,QAAyB,CAACC,CAAD,CAAc,CACvDR,CAAA,CAAQQ,CAAR;AAAqBd,EAAA,CAAsBxI,CAAtB,CAArB,CAAL,GAEO8I,CAAA,CAAQQ,CAAR,CAAqBX,CAArB,CAAL,CAKEE,CAAA,CAAU9qB,CAAV,CAAiBurB,CAAjB,CAA+Bd,EAAA,CAAsBxI,CAAtB,CAA/B,CALF,CAEEwI,EAAA,CAAsBxI,CAAtB,CAFF,CAEqCsJ,CAJvC,CAUA,OAAOX,EAAP,CAAmBW,CAXyC,CAa9DD,EAAAE,UAAA,CAA6B,CAAA,CAG3BC,EAAA,CADEzJ,CAAAI,WAAJ,CACYpiB,CAAA0rB,iBAAA,CAAuBtF,CAAA,CAAM9D,CAAN,CAAvB,CAAwCgJ,CAAxC,CADZ,CAGYtrB,CAAAjH,OAAA,CAAaoU,CAAA,CAAOiZ,CAAA,CAAM9D,CAAN,CAAP,CAAwBgJ,CAAxB,CAAb,CAAwD,IAAxD,CAA8DT,CAAAM,QAA9D,CAEZtpB,EAAA8pB,IAAA,CAAiB,UAAjB,CAA6BF,CAA7B,CACA,MAEF,MAAK,GAAL,CACEZ,CACA,CADY1d,CAAA,CAAOiZ,CAAA,CAAM9D,CAAN,CAAP,CACZ,CAAAmI,EAAA,CAAsBxI,CAAtB,CAAA,CAAmC,QAAQ,CAAChJ,CAAD,CAAS,CAClD,MAAO4R,EAAA,CAAU7qB,CAAV,CAAiBiZ,CAAjB,CAD2C,CAzDxD,CAPmH,CAArH,CAZ4B,CAmF1B+N,EAAJ,GACE5wB,CAAA,CAAQ4wB,EAAR,CAAqB,QAAQ,CAACllB,CAAD,CAAa,CACxCA,CAAA,EADwC,CAA1C,CAGA,CAAAklB,EAAA,CAAc,IAJhB,CAQKhwB,EAAA,CAAI,CAAT,KAAYW,CAAZ,CAAiBoxB,CAAAhzB,OAAjB,CAAoCiB,CAApC,CAAwCW,CAAxC,CAA4CX,CAAA,EAA5C,CACE0xB,CACA,CADSK,CAAA,CAAW/xB,CAAX,CACT,CAAA40B,CAAA,CAAalD,CAAb,CACIA,CAAA7mB,aAAA,CAAsBA,CAAtB,CAAqC7B,CADzC,CAEI8jB,CAFJ,CAGIsC,CAHJ,CAIIsC,CAAAvF,QAJJ,EAIsBoG,CAAA,CAAeb,CAAA7G,cAAf,CAAqC6G,CAAAvF,QAArC,CAAqDW,CAArD,CAA+D0F,CAA/D,CAJtB,CAKIvF,EALJ,CAYF,KAAI8F,GAAe/pB,CACfopB,EAAJ,GAAiCA,CAAAyC,SAAjC,EAA+G,IAA/G,GAAsEzC,CAAA0C,YAAtE,IACE/B,EADF,CACiBloB,CADjB,CAGAyjB,EAAA,EAAeA,CAAA,CAAYyE,EAAZ,CAA0BJ,CAAAnZ,WAA1B,CAA+C9a,CAA/C,CAA0DmxB,CAA1D,CAGf,KAAK7vB,CAAL,CAASgyB,CAAAjzB,OAAT,CAA8B,CAA9B,CAAsC,CAAtC,EAAiCiB,CAAjC,CAAyCA,CAAA,EAAzC,CACE0xB,CACA,CADSM,CAAA,CAAYhyB,CAAZ,CACT,CAAA40B,CAAA,CAAalD,CAAb,CACIA,CAAA7mB,aAAA;AAAsBA,CAAtB,CAAqC7B,CADzC,CAEI8jB,CAFJ,CAGIsC,CAHJ,CAIIsC,CAAAvF,QAJJ,EAIsBoG,CAAA,CAAeb,CAAA7G,cAAf,CAAqC6G,CAAAvF,QAArC,CAAqDW,CAArD,CAA+D0F,CAA/D,CAJtB,CAKIvF,EALJ,CA1K+E,CArRnFG,CAAA,CAAyBA,CAAzB,EAAmD,EAsBnD,KAvBqD,IAGjD2H,EAAmB,CAAC9K,MAAAC,UAH6B,CAIjD8K,CAJiD,CAKjDhC,EAAuB5F,CAAA4F,qBAL0B,CAMjDhD,EANiD,CAOjDoC,EAA2BhF,CAAAgF,yBAPsB,CAQjDkB,GAAoBlG,CAAAkG,kBAR6B,CASjD2B,GAA4B7H,CAAA6H,0BATqB,CAUjDC,EAAyB,CAAA,CAVwB,CAWjDC,EAAc,CAAA,CAXmC,CAYjDrC,GAAgC1F,CAAA0F,8BAZiB,CAajDsC,EAAexD,CAAAnC,UAAf2F,CAAyCrvB,CAAA,CAAO4rB,CAAP,CAbQ,CAcjDxjB,CAdiD,CAejD0c,EAfiD,CAgBjDwK,CAhBiD,CAkBjDC,GAAoBrI,CAlB6B,CAmBjDyE,CAnBiD,CAuB5C1xB,GAAI,CAvBwC,CAuBrCW,EAAKsrB,CAAAltB,OAArB,CAAwCiB,EAAxC,CAA4CW,CAA5C,CAAgDX,EAAA,EAAhD,CAAqD,CACnDmO,CAAA,CAAY8d,CAAA,CAAWjsB,EAAX,CACZ,KAAIsxB,GAAYnjB,CAAAonB,QAAhB,CACIhE,EAAUpjB,CAAAqnB,MAGVlE,GAAJ,GACE8D,CADF,CACiB/D,EAAA,CAAUM,CAAV,CAAuBL,EAAvB,CAAkCC,CAAlC,CADjB,CAGA8D,EAAA,CAAY32B,CAEZ,IAAIq2B,CAAJ,CAAuB5mB,CAAA+d,SAAvB,CACE,KAGF,IAAIuJ,CAAJ,CAAqBtnB,CAAAnF,MAArB,CAIOmF,CAAA2mB,YAeL,GAdMtzB,CAAA,CAASi0B,CAAT,CAAJ,EAGEC,EAAA,CAAkB,oBAAlB,CAAwCtD,CAAxC,EAAoE4C,CAApE,CACkB7mB,CADlB,CAC6BinB,CAD7B,CAEA,CAAAhD,CAAA,CAA2BjkB,CAL7B,EASEunB,EAAA,CAAkB,oBAAlB,CAAwCtD,CAAxC,CAAkEjkB,CAAlE,CACkBinB,CADlB,CAKJ,EAAAJ,CAAA,CAAoBA,CAApB;AAAyC7mB,CAG3C0c,GAAA,CAAgB1c,CAAArG,KAEXgtB,EAAA3mB,CAAA2mB,YAAL,EAA8B3mB,CAAArD,WAA9B,GACE2qB,CAIA,CAJiBtnB,CAAArD,WAIjB,CAHAkoB,CAGA,CAHuBA,CAGvB,EAH+C,EAG/C,CAFA0C,EAAA,CAAkB,GAAlB,CAAwB7K,EAAxB,CAAwC,cAAxC,CACImI,CAAA,CAAqBnI,EAArB,CADJ,CACyC1c,CADzC,CACoDinB,CADpD,CAEA,CAAApC,CAAA,CAAqBnI,EAArB,CAAA,CAAsC1c,CALxC,CAQA,IAAIsnB,CAAJ,CAAqBtnB,CAAA8gB,WAArB,CACEiG,CAUA,CAVyB,CAAA,CAUzB,CALK/mB,CAAAwnB,MAKL,GAJED,EAAA,CAAkB,cAAlB,CAAkCT,EAAlC,CAA6D9mB,CAA7D,CAAwEinB,CAAxE,CACA,CAAAH,EAAA,CAA4B9mB,CAG9B,EAAsB,SAAtB,EAAIsnB,CAAJ,EACE3C,EASA,CATgC,CAAA,CAShC,CARAiC,CAQA,CARmB5mB,CAAA+d,SAQnB,CAPAmJ,CAOA,CAPYD,CAOZ,CANAA,CAMA,CANexD,CAAAnC,UAMf,CALI1pB,CAAA,CAAOtH,CAAAm3B,cAAA,CAAuB,GAAvB,CAA6B/K,EAA7B,CAA6C,IAA7C,CACuB+G,CAAA,CAAc/G,EAAd,CADvB,CACsD,GADtD,CAAP,CAKJ,CAHA8G,CAGA,CAHcyD,CAAA,CAAa,CAAb,CAGd,CAFAS,EAAA,CAAYhE,CAAZ,CApvMH/sB,EAAApF,KAAA,CAovMuC21B,CApvMvC,CAA+B,CAA/B,CAovMG,CAAgD1D,CAAhD,CAEA,CAAA2D,EAAA,CAAoBrsB,CAAA,CAAQosB,CAAR,CAAmBpI,CAAnB,CAAiC8H,CAAjC,CACQe,CADR,EAC4BA,CAAAhuB,KAD5B,CACmD,CAQzCmtB,0BAA2BA,EARc,CADnD,CAVtB,GAsBEI,CAEA,CAFYtvB,CAAA,CAAOmU,EAAA,CAAYyX,CAAZ,CAAP,CAAAoE,SAAA,EAEZ,CADAX,CAAAnvB,MAAA,EACA,CAAAqvB,EAAA,CAAoBrsB,CAAA,CAAQosB,CAAR,CAAmBpI,CAAnB,CAxBtB,CA4BF,IAAI9e,CAAA0mB,SAAJ,CAWE,GAVAM,CAUI5uB,CAVU,CAAA,CAUVA,CATJmvB,EAAA,CAAkB,UAAlB,CAA8BpC,EAA9B,CAAiDnlB,CAAjD,CAA4DinB,CAA5D,CASI7uB,CARJ+sB,EAQI/sB,CARgB4H,CAQhB5H,CANJkvB,CAMIlvB,CANc/G,CAAA,CAAW2O,CAAA0mB,SAAX,CAAD,CACX1mB,CAAA0mB,SAAA,CAAmBO,CAAnB,CAAiCxD,CAAjC,CADW,CAEXzjB,CAAA0mB,SAIFtuB,CAFJkvB,CAEIlvB,CAFayvB,EAAA,CAAoBP,CAApB,CAEblvB,CAAA4H,CAAA5H,QAAJ,CAAuB,CACrBuvB,CAAA;AAAmB3nB,CAIjBknB,EAAA,CA72JJxc,EAAAvP,KAAA,CA02JuBmsB,CA12JvB,CA02JE,CAGcQ,EAAA,CAAehI,CAAA,CAAa9f,CAAA+nB,kBAAb,CAA0Crc,CAAA,CAAK4b,CAAL,CAA1C,CAAf,CAHd,CACc,EAId9D,EAAA,CAAc0D,CAAA,CAAU,CAAV,CAEd,IAAwB,CAAxB,EAAIA,CAAAt2B,OAAJ,EAA6B4yB,CAAA3yB,SAA7B,GAAsDC,EAAtD,CACE,KAAMisB,GAAA,CAAe,OAAf,CAEFL,EAFE,CAEa,EAFb,CAAN,CAKFgL,EAAA,CAAYhE,CAAZ,CAA0BuD,CAA1B,CAAwCzD,CAAxC,CAEIwE,EAAAA,CAAmB,CAAC/F,MAAO,EAAR,CAOnBgG,EAAAA,CAAqB7G,CAAA,CAAkBoC,CAAlB,CAA+B,EAA/B,CAAmCwE,CAAnC,CACzB,KAAIE,GAAwBpK,CAAAhpB,OAAA,CAAkBjD,EAAlB,CAAsB,CAAtB,CAAyBisB,CAAAltB,OAAzB,EAA8CiB,EAA9C,CAAkD,CAAlD,EAExBoyB,EAAJ,EACEkE,CAAA,CAAwBF,CAAxB,CAEFnK,EAAA,CAAaA,CAAAtnB,OAAA,CAAkByxB,CAAlB,CAAAzxB,OAAA,CAA6C0xB,EAA7C,CACbE,EAAA,CAAwB3E,CAAxB,CAAuCuE,CAAvC,CAEAx1B,EAAA,CAAKsrB,CAAAltB,OAjCgB,CAAvB,IAmCEq2B,EAAA/uB,KAAA,CAAkBovB,CAAlB,CAIJ,IAAItnB,CAAA2mB,YAAJ,CACEK,CAeA,CAfc,CAAA,CAed,CAdAO,EAAA,CAAkB,UAAlB,CAA8BpC,EAA9B,CAAiDnlB,CAAjD,CAA4DinB,CAA5D,CAcA,CAbA9B,EAaA,CAboBnlB,CAapB,CAXIA,CAAA5H,QAWJ,GAVEuvB,CAUF,CAVqB3nB,CAUrB,EAPA0gB,CAOA,CAPa2H,EAAA,CAAmBvK,CAAAhpB,OAAA,CAAkBjD,EAAlB,CAAqBisB,CAAAltB,OAArB,CAAyCiB,EAAzC,CAAnB,CAAgEo1B,CAAhE,CACTxD,CADS,CACMC,CADN,CACoBqD,CADpB,EAC8CI,EAD9C,CACiEvD,CADjE,CAC6EC,CAD7E,CAC0F,CACjGgB,qBAAsBA,CAD2E,CAEjGZ,yBAA0BA,CAFuE,CAGjGkB,kBAAmBA,EAH8E,CAIjG2B,0BAA2BA,EAJsE,CAD1F,CAOb,CAAAt0B,CAAA,CAAKsrB,CAAAltB,OAhBP,KAiBO,IAAIoP,CAAAlF,QAAJ,CACL,GAAI,CACFyoB,CACA;AADSvjB,CAAAlF,QAAA,CAAkBmsB,CAAlB,CAAgCxD,CAAhC,CAA+C0D,EAA/C,CACT,CAAI91B,CAAA,CAAWkyB,CAAX,CAAJ,CACEO,CAAA,CAAW,IAAX,CAAiBP,CAAjB,CAAyBJ,EAAzB,CAAoCC,CAApC,CADF,CAEWG,CAFX,EAGEO,CAAA,CAAWP,CAAAQ,IAAX,CAAuBR,CAAAS,KAAvB,CAAoCb,EAApC,CAA+CC,CAA/C,CALA,CAOF,MAAOrrB,EAAP,CAAU,CACViP,CAAA,CAAkBjP,EAAlB,CAAqBJ,EAAA,CAAYsvB,CAAZ,CAArB,CADU,CAKVjnB,CAAAuhB,SAAJ,GACEb,CAAAa,SACA,CADsB,CAAA,CACtB,CAAAqF,CAAA,CAAmB0B,IAAAC,IAAA,CAAS3B,CAAT,CAA2B5mB,CAAA+d,SAA3B,CAFrB,CAtKmD,CA6KrD2C,CAAA7lB,MAAA,CAAmBgsB,CAAnB,EAAoE,CAAA,CAApE,GAAwCA,CAAAhsB,MACxC6lB,EAAAE,wBAAA,CAAqCmG,CACrCrG,EAAAK,+BAAA,CAA4C4D,EAC5CjE,EAAAM,sBAAA,CAAmCgG,CACnCtG,EAAAI,WAAA,CAAwBqG,EAExBlI,EAAA0F,8BAAA,CAAuDA,EAGvD,OAAOjE,EA7M8C,CAgevDyH,QAASA,EAAuB,CAACrK,CAAD,CAAa,CAE3C,IAF2C,IAElCprB,EAAI,CAF8B,CAE3BC,EAAKmrB,CAAAltB,OAArB,CAAwC8B,CAAxC,CAA4CC,CAA5C,CAAgDD,CAAA,EAAhD,CAAqD,CACxCA,IAAAA,EAAAA,CAAAA,CAAK,CAhpOtB,EAAA,CAAOJ,CAAA,CAAOX,MAAAkE,OAAA,CAgpOgBioB,CAAAjP,CAAWnc,CAAXmc,CAhpOhB,CAAP,CAgpOsC2Z,CAACtE,eAAgB,CAAA,CAAjBsE,CAhpOtC,CAgpOD1K,EAAA,CAAWprB,CAAX,CAAA,CAAgB,CADmC,CAFV,CAqB7CwvB,QAASA,GAAY,CAACuG,CAAD,CAAc9uB,CAAd,CAAoB8B,CAApB,CAA8BsjB,CAA9B,CAA2CC,CAA3C,CAA4D0J,CAA5D,CACCC,CADD,CACc,CACjC,GAAIhvB,CAAJ,GAAaqlB,CAAb,CAA8B,MAAO,KACjCtpB,EAAAA,CAAQ,IACZ,IAAI0nB,CAAA9rB,eAAA,CAA6BqI,CAA7B,CAAJ,CAAwC,CAAA,IAC7BqG,CAAW8d;CAAAA,CAAa1J,CAAAvY,IAAA,CAAclC,CAAd,CA90C1BkkB,WA80C0B,CAAjC,KADsC,IAElChsB,EAAI,CAF8B,CAE3BW,EAAKsrB,CAAAltB,OADhB,CACmCiB,CADnC,CACuCW,CADvC,CAC2CX,CAAA,EAD3C,CAEE,GAAI,CAEF,GADAmO,CACI,CADQ8d,CAAA,CAAWjsB,CAAX,CACR,EAACktB,CAAD,GAAiBxuB,CAAjB,EAA8BwuB,CAA9B,CAA4C/e,CAAA+d,SAA5C,GAC0C,EAD1C,EACC/d,CAAAie,SAAAppB,QAAA,CAA2B4G,CAA3B,CADL,CACiD,CAC/C,GAAIitB,CAAJ,CAAmB,CACc,IAAA,EAAA,CAACtB,QAASsB,CAAV,CAAyBrB,MAAOsB,CAAhC,CA9qO7C,EAAA,CAAOr2B,CAAA,CAAOX,MAAAkE,OAAA,CA8qOoBmK,CA9qOpB,CAAP,CAA8BwoB,CAA9B,CA6qOwB,CAGnBC,CAAApzB,KAAA,CAAiB2K,CAAjB,CACAtK,EAAA,CAAQsK,CALuC,CAH/C,CAUF,MAAOjI,CAAP,CAAU,CAAEiP,CAAA,CAAkBjP,CAAlB,CAAF,CAbwB,CAgBxC,MAAOrC,EAnB0B,CAoDnC0yB,QAASA,EAAuB,CAAC71B,CAAD,CAAMyD,CAAN,CAAW,CAAA,IACrC4yB,EAAU5yB,CAAAisB,MAD2B,CAErC4G,EAAUt2B,CAAA0vB,MAF2B,CAGrCtD,EAAWpsB,CAAA+uB,UAGfrwB,EAAA,CAAQsB,CAAR,CAAa,QAAQ,CAACP,CAAD,CAAQZ,CAAR,CAAa,CACX,GAArB,EAAIA,CAAA6E,OAAA,CAAW,CAAX,CAAJ,GACMD,CAAA,CAAI5E,CAAJ,CAGJ,EAHgB4E,CAAA,CAAI5E,CAAJ,CAGhB,GAH6BY,CAG7B,GAFEA,CAEF,GAFoB,OAAR,GAAAZ,CAAA,CAAkB,GAAlB,CAAwB,GAEpC,EAF2C4E,CAAA,CAAI5E,CAAJ,CAE3C,EAAAmB,CAAAu2B,KAAA,CAAS13B,CAAT,CAAcY,CAAd,CAAqB,CAAA,CAArB,CAA2B42B,CAAA,CAAQx3B,CAAR,CAA3B,CAJF,CADgC,CAAlC,CAUAH,EAAA,CAAQ+E,CAAR,CAAa,QAAQ,CAAChE,CAAD,CAAQZ,CAAR,CAAa,CACrB,OAAX,EAAIA,CAAJ,EACEstB,CAAA,CAAaC,CAAb,CAAuB3sB,CAAvB,CACA,CAAAO,CAAA,CAAI,OAAJ,CAAA,EAAgBA,CAAA,CAAI,OAAJ,CAAA,CAAeA,CAAA,CAAI,OAAJ,CAAf,CAA8B,GAA9B,CAAoC,EAApD,EAA0DP,CAF5D,EAGkB,OAAX,EAAIZ,CAAJ,EACLutB,CAAAzqB,KAAA,CAAc,OAAd,CAAuByqB,CAAAzqB,KAAA,CAAc,OAAd,CAAvB,CAAgD,GAAhD;AAAsDlC,CAAtD,CACA,CAAAO,CAAA,MAAA,EAAgBA,CAAA,MAAA,CAAeA,CAAA,MAAf,CAA8B,GAA9B,CAAoC,EAApD,EAA0DP,CAFrD,EAMqB,GANrB,EAMIZ,CAAA6E,OAAA,CAAW,CAAX,CANJ,EAM6B1D,CAAAjB,eAAA,CAAmBF,CAAnB,CAN7B,GAOLmB,CAAA,CAAInB,CAAJ,CACA,CADWY,CACX,CAAA62B,CAAA,CAAQz3B,CAAR,CAAA,CAAew3B,CAAA,CAAQx3B,CAAR,CARV,CAJyB,CAAlC,CAhByC,CAkC3Ci3B,QAASA,GAAkB,CAACvK,CAAD,CAAamJ,CAAb,CAA2B8B,CAA3B,CACvB7I,CADuB,CACTiH,CADS,CACUvD,CADV,CACsBC,CADtB,CACmC5E,CADnC,CAC2D,CAAA,IAChF+J,EAAY,EADoE,CAEhFC,CAFgF,CAGhFC,CAHgF,CAIhFC,EAA4BlC,CAAA,CAAa,CAAb,CAJoD,CAKhFmC,EAAqBtL,CAAAjK,MAAA,EAL2D,CAOhFwV,EAAuB/2B,CAAA,CAAO,EAAP,CAAW82B,CAAX,CAA+B,CACpDzC,YAAa,IADuC,CACjC7F,WAAY,IADqB,CACf1oB,QAAS,IADM,CACAgtB,oBAAqBgE,CADrB,CAA/B,CAPyD,CAUhFzC,EAAet1B,CAAA,CAAW+3B,CAAAzC,YAAX,CAAD,CACRyC,CAAAzC,YAAA,CAA+BM,CAA/B,CAA6C8B,CAA7C,CADQ,CAERK,CAAAzC,YAZ0E,CAahFoB,EAAoBqB,CAAArB,kBAExBd,EAAAnvB,MAAA,EAEAkR,EAAA,CAAiBR,CAAA8gB,sBAAA,CAA2B3C,CAA3B,CAAjB,CAAA4C,KAAA,CACQ,QAAQ,CAACC,CAAD,CAAU,CAAA,IAClBhG,CADkB,CACyBnD,CAE/CmJ,EAAA,CAAU3B,EAAA,CAAoB2B,CAApB,CAEV,IAAIJ,CAAAhxB,QAAJ,CAAgC,CAI5B8uB,CAAA,CAx1KJxc,EAAAvP,KAAA,CAq1KuBquB,CAr1KvB,CAq1KE,CAGc1B,EAAA,CAAehI,CAAA,CAAaiI,CAAb,CAAgCrc,CAAA,CAAK8d,CAAL,CAAhC,CAAf,CAHd,CACc,EAIdhG,EAAA,CAAc0D,CAAA,CAAU,CAAV,CAEd,IAAwB,CAAxB,EAAIA,CAAAt2B,OAAJ,EAA6B4yB,CAAA3yB,SAA7B,GAAsDC,EAAtD,CACE,KAAMisB,GAAA,CAAe,OAAf,CAEFqM,CAAAzvB,KAFE,CAEuBgtB,CAFvB,CAAN,CAKF8C,CAAA,CAAoB,CAACxH,MAAO,EAAR,CACpByF;EAAA,CAAYxH,CAAZ,CAA0B+G,CAA1B,CAAwCzD,CAAxC,CACA,KAAIyE,EAAqB7G,CAAA,CAAkBoC,CAAlB,CAA+B,EAA/B,CAAmCiG,CAAnC,CAErBp2B,EAAA,CAAS+1B,CAAAvuB,MAAT,CAAJ,EACEstB,CAAA,CAAwBF,CAAxB,CAEFnK,EAAA,CAAamK,CAAAzxB,OAAA,CAA0BsnB,CAA1B,CACbsK,EAAA,CAAwBW,CAAxB,CAAgCU,CAAhC,CAtB8B,CAAhC,IAwBEjG,EACA,CADc2F,CACd,CAAAlC,CAAA/uB,KAAA,CAAkBsxB,CAAlB,CAGF1L,EAAAxjB,QAAA,CAAmB+uB,CAAnB,CAEAJ,EAAA,CAA0B5H,EAAA,CAAsBvD,CAAtB,CAAkC0F,CAAlC,CAA+CuF,CAA/C,CACtB5B,CADsB,CACHF,CADG,CACWmC,CADX,CAC+BxF,CAD/B,CAC2CC,CAD3C,CAEtB5E,CAFsB,CAG1BhuB,EAAA,CAAQivB,CAAR,CAAsB,QAAQ,CAACnsB,CAAD,CAAOlC,CAAP,CAAU,CAClCkC,CAAJ,EAAYyvB,CAAZ,GACEtD,CAAA,CAAaruB,CAAb,CADF,CACoBo1B,CAAA,CAAa,CAAb,CADpB,CADsC,CAAxC,CAOA,KAFAiC,CAEA,CAF2B9J,EAAA,CAAa6H,CAAA,CAAa,CAAb,CAAA5b,WAAb,CAAyC8b,CAAzC,CAE3B,CAAO6B,CAAAp4B,OAAP,CAAA,CAAyB,CACnBiK,CAAAA,CAAQmuB,CAAAnV,MAAA,EACR6V,EAAAA,CAAyBV,CAAAnV,MAAA,EAFN,KAGnB8V,EAAkBX,CAAAnV,MAAA,EAHC,CAInB6N,EAAoBsH,CAAAnV,MAAA,EAJD,CAKnB2Q,EAAWyC,CAAA,CAAa,CAAb,CAEf,IAAI2C,CAAA/uB,CAAA+uB,YAAJ,CAAA,CAEA,GAAIF,CAAJ,GAA+BP,CAA/B,CAA0D,CACxD,IAAIU,EAAaH,CAAA9K,UAEXK,EAAA0F,8BAAN,EACIyE,CAAAhxB,QADJ,GAGEosB,CAHF,CAGazY,EAAA,CAAYyX,CAAZ,CAHb,CAKAkE,GAAA,CAAYiC,CAAZ,CAA6B/xB,CAAA,CAAO8xB,CAAP,CAA7B,CAA6DlF,CAA7D,CAGA9F,EAAA,CAAa9mB,CAAA,CAAO4sB,CAAP,CAAb,CAA+BqF,CAA/B,CAXwD,CAcxDxJ,CAAA,CADE4I,CAAArI,wBAAJ,CAC2BC,CAAA,CAAwBhmB,CAAxB,CAA+BouB,CAAAnI,WAA/B,CAAmEY,CAAnE,CAD3B,CAG2BA,CAE3BuH,EAAA,CAAwBC,CAAxB,CAAkDruB,CAAlD,CAAyD2pB,CAAzD,CAAmEtE,CAAnE,CACEG,CADF,CApBA,CAPuB,CA8BzB2I,CAAA,CAAY,IA3EU,CAD1B,CA+EA,OAAOc,SAA0B,CAACC,CAAD,CAAoBlvB,CAApB,CAA2B9G,CAA3B,CAAiC6H,CAAjC,CAA8C8lB,CAA9C,CAAiE,CAC5FrB,CAAAA,CAAyBqB,CACzB7mB,EAAA+uB,YAAJ,GACIZ,CAAJ;AACEA,CAAA3zB,KAAA,CAAewF,CAAf,CACe9G,CADf,CAEe6H,CAFf,CAGeykB,CAHf,CADF,EAMM4I,CAAArI,wBAGJ,GAFEP,CAEF,CAF2BQ,CAAA,CAAwBhmB,CAAxB,CAA+BouB,CAAAnI,WAA/B,CAAmEY,CAAnE,CAE3B,EAAAuH,CAAA,CAAwBC,CAAxB,CAAkDruB,CAAlD,CAAyD9G,CAAzD,CAA+D6H,CAA/D,CAA4EykB,CAA5E,CATF,CADA,CAFgG,CAhGd,CAqHtF4C,QAASA,EAAU,CAACniB,CAAD,CAAImlB,CAAJ,CAAO,CACxB,IAAI+D,EAAO/D,CAAAlI,SAAPiM,CAAoBlpB,CAAAid,SACxB,OAAa,EAAb,GAAIiM,CAAJ,CAAuBA,CAAvB,CACIlpB,CAAAnH,KAAJ,GAAessB,CAAAtsB,KAAf,CAA+BmH,CAAAnH,KAAD,CAAUssB,CAAAtsB,KAAV,CAAqB,EAArB,CAAyB,CAAvD,CACOmH,CAAAlM,MADP,CACiBqxB,CAAArxB,MAJO,CAQ1B2yB,QAASA,GAAiB,CAAC0C,CAAD,CAAOC,CAAP,CAA0BlqB,CAA1B,CAAqCxL,CAArC,CAA8C,CACtE,GAAI01B,CAAJ,CACE,KAAMnN,GAAA,CAAe,UAAf,CACFmN,CAAAvwB,KADE,CACsBqG,CAAArG,KADtB,CACsCswB,CADtC,CAC4CtyB,EAAA,CAAYnD,CAAZ,CAD5C,CAAN,CAFoE,CAQxEuuB,QAASA,EAA2B,CAACjF,CAAD,CAAaqM,CAAb,CAAmB,CACrD,IAAIC,EAAgBhjB,CAAA,CAAa+iB,CAAb,CAAmB,CAAA,CAAnB,CAChBC,EAAJ,EACEtM,CAAAzoB,KAAA,CAAgB,CACd0oB,SAAU,CADI,CAEdjjB,QAASuvB,QAAiC,CAACC,CAAD,CAAe,CACnDC,CAAAA,CAAqBD,CAAAzb,OAAA,EAAzB,KACI2b,EAAmB,CAAE55B,CAAA25B,CAAA35B,OAIrB45B,EAAJ,EAAsB1vB,CAAA2vB,kBAAA,CAA0BF,CAA1B,CAEtB,OAAOG,SAA8B,CAAC7vB,CAAD,CAAQ9G,CAAR,CAAc,CACjD,IAAI8a,EAAS9a,CAAA8a,OAAA,EACR2b,EAAL,EAAuB1vB,CAAA2vB,kBAAA,CAA0B5b,CAA1B,CACvB/T,EAAA6vB,iBAAA,CAAyB9b,CAAzB,CAAiCub,CAAAQ,YAAjC,CACA/vB,EAAAjH,OAAA,CAAaw2B,CAAb;AAA4BS,QAAiC,CAAC74B,CAAD,CAAQ,CACnE+B,CAAA,CAAK,CAAL,CAAAmrB,UAAA,CAAoBltB,CAD+C,CAArE,CAJiD,CARI,CAF3C,CAAhB,CAHmD,CA2BvD8tB,QAASA,EAAY,CAACtT,CAAD,CAAOka,CAAP,CAAiB,CACpCla,CAAA,CAAO/X,CAAA,CAAU+X,CAAV,EAAkB,MAAlB,CACP,QAAQA,CAAR,EACA,KAAK,KAAL,CACA,KAAK,MAAL,CACE,IAAIse,EAAUx6B,CAAAsa,cAAA,CAAuB,KAAvB,CACdkgB,EAAA5f,UAAA,CAAoB,GAApB,CAA0BsB,CAA1B,CAAiC,GAAjC,CAAuCka,CAAvC,CAAkD,IAAlD,CAAyDla,CAAzD,CAAgE,GAChE,OAAOse,EAAAzf,WAAA,CAAmB,CAAnB,CAAAA,WACT,SACE,MAAOqb,EAPT,CAFoC,CActCqE,QAASA,GAAiB,CAACh3B,CAAD,CAAOi3B,CAAP,CAA2B,CACnD,GAA0B,QAA1B,EAAIA,CAAJ,CACE,MAAOxiB,EAAAyiB,KAET,KAAI5wB,EAAM9F,EAAA,CAAUR,CAAV,CAEV,IAA0B,WAA1B,EAAIi3B,CAAJ,EACY,MADZ,EACK3wB,CADL,EAC4C,QAD5C,EACsB2wB,CADtB,EAEY,KAFZ,EAEK3wB,CAFL,GAE4C,KAF5C,EAEsB2wB,CAFtB,EAG4C,OAH5C,EAGsBA,CAHtB,EAIE,MAAOxiB,EAAA0iB,aAV0C,CAerDpI,QAASA,EAA2B,CAAC/uB,CAAD,CAAO+pB,CAAP,CAAmB9rB,CAAnB,CAA0B2H,CAA1B,CAAgCwxB,CAAhC,CAA8C,CAChF,IAAIf,EAAgBhjB,CAAA,CAAapV,CAAb,CAAoB,CAAA,CAApB,CAGpB,IAAKo4B,CAAL,CAAA,CAGA,GAAa,UAAb,GAAIzwB,CAAJ,EAA+C,QAA/C,GAA2BpF,EAAA,CAAUR,CAAV,CAA3B,CACE,KAAMgpB,GAAA,CAAe,UAAf,CAEFplB,EAAA,CAAY5D,CAAZ,CAFE,CAAN,CAKF+pB,CAAAzoB,KAAA,CAAgB,CACd0oB,SAAU,GADI,CAEdjjB,QAASA,QAAQ,EAAG,CAChB,MAAO,CACLipB,IAAKqH,QAAiC,CAACvwB,CAAD;AAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACvD4xB,CAAAA,CAAe5xB,CAAA4xB,YAAfA,GAAoC5xB,CAAA4xB,YAApCA,CAAuD,EAAvDA,CAEJ,IAAIrI,CAAAtiB,KAAA,CAA+BxB,CAA/B,CAAJ,CACE,KAAMojB,GAAA,CAAe,aAAf,CAAN,CAMG7oB,CAAA,CAAKyF,CAAL,CAAL,GAMAywB,CANA,CAMgBhjB,CAAA,CAAalT,CAAA,CAAKyF,CAAL,CAAb,CAAyB,CAAA,CAAzB,CAA+BoxB,EAAA,CAAkBh3B,CAAlB,CAAwB4F,CAAxB,CAA/B,CACZ4jB,CAAA,CAAqB5jB,CAArB,CADY,EACkBwxB,CADlB,CANhB,IAgBAj3B,CAAA,CAAKyF,CAAL,CAGA,CAHaywB,CAAA,CAAcvvB,CAAd,CAGb,CADAwwB,CAACvF,CAAA,CAAYnsB,CAAZ,CAAD0xB,GAAuBvF,CAAA,CAAYnsB,CAAZ,CAAvB0xB,CAA2C,EAA3CA,UACA,CAD0D,CAAA,CAC1D,CAAAz3B,CAACM,CAAA4xB,YAADlyB,EAAqBM,CAAA4xB,YAAA,CAAiBnsB,CAAjB,CAAAosB,QAArBnyB,EAAuDiH,CAAvDjH,QAAA,CACSw2B,CADT,CACwBS,QAAiC,CAACS,CAAD,CAAWC,CAAX,CAAqB,CAO7D,OAAb,GAAI5xB,CAAJ,EAAwB2xB,CAAxB,EAAoCC,CAApC,CACEr3B,CAAAs3B,aAAA,CAAkBF,CAAlB,CAA4BC,CAA5B,CADF,CAGEr3B,CAAA40B,KAAA,CAAUnvB,CAAV,CAAgB2xB,CAAhB,CAVwE,CAD9E,CAnBA,CAV2D,CADxD,CADS,CAFN,CAAhB,CATA,CAJgF,CA6ElF5D,QAASA,GAAW,CAACxH,CAAD,CAAeuL,CAAf,CAAiCC,CAAjC,CAA0C,CAAA,IACxDC,EAAuBF,CAAA,CAAiB,CAAjB,CADiC,CAExDG,EAAcH,CAAA76B,OAF0C,CAGxDie,EAAS8c,CAAArd,WAH+C,CAIxDzc,CAJwD,CAIrDW,CAEP,IAAI0tB,CAAJ,CACE,IAAKruB,CAAO,CAAH,CAAG,CAAAW,CAAA,CAAK0tB,CAAAtvB,OAAjB,CAAsCiB,CAAtC,CAA0CW,CAA1C,CAA8CX,CAAA,EAA9C,CACE,GAAIquB,CAAA,CAAaruB,CAAb,CAAJ,EAAuB85B,CAAvB,CAA6C,CAC3CzL,CAAA,CAAaruB,CAAA,EAAb,CAAA,CAAoB65B,CACJG,EAAAA,CAAKn5B,CAALm5B,CAASD,CAATC,CAAuB,CAAvC,KAAS,IACAl5B,EAAKutB,CAAAtvB,OADd,CAEK8B,CAFL,CAESC,CAFT,CAEaD,CAAA,EAAA,CAAKm5B,CAAA,EAFlB,CAGMA,CAAJ,CAASl5B,CAAT,CACEutB,CAAA,CAAaxtB,CAAb,CADF,CACoBwtB,CAAA,CAAa2L,CAAb,CADpB,CAGE,OAAO3L,CAAA,CAAaxtB,CAAb,CAGXwtB,EAAAtvB,OAAA,EAAuBg7B,CAAvB,CAAqC,CAKjC1L,EAAA/uB,QAAJ,GAA6Bw6B,CAA7B,GACEzL,CAAA/uB,QADF;AACyBu6B,CADzB,CAGA,MAnB2C,CAwB7C7c,CAAJ,EACEA,CAAAid,aAAA,CAAoBJ,CAApB,CAA6BC,CAA7B,CAIEnhB,EAAAA,CAAWla,CAAAma,uBAAA,EACfD,EAAAG,YAAA,CAAqBghB,CAArB,CAKA/zB,EAAA,CAAO8zB,CAAP,CAAA1wB,KAAA,CAAqBpD,CAAA,CAAO+zB,CAAP,CAAA3wB,KAAA,EAArB,CAKKuB,GAAL,EAUEU,EACA,CADmC,CAAA,CACnC,CAAAV,EAAAM,UAAA,CAAiB,CAAC8uB,CAAD,CAAjB,CAXF,EACE,OAAO/zB,CAAA2b,MAAA,CAAaoY,CAAA,CAAqB/zB,CAAAm0B,QAArB,CAAb,CAaAC,EAAAA,CAAI,CAAb,KAAgBC,CAAhB,CAAqBR,CAAA76B,OAArB,CAA8Co7B,CAA9C,CAAkDC,CAAlD,CAAsDD,CAAA,EAAtD,CACMx3B,CAGJ,CAHci3B,CAAA,CAAiBO,CAAjB,CAGd,CAFAp0B,CAAA,CAAOpD,CAAP,CAAA0nB,OAAA,EAEA,CADA1R,CAAAG,YAAA,CAAqBnW,CAArB,CACA,CAAA,OAAOi3B,CAAA,CAAiBO,CAAjB,CAGTP,EAAA,CAAiB,CAAjB,CAAA,CAAsBC,CACtBD,EAAA76B,OAAA,CAA0B,CAtEkC,CA0E9DuzB,QAASA,EAAkB,CAACrtB,CAAD,CAAKo1B,CAAL,CAAiB,CAC1C,MAAO55B,EAAA,CAAO,QAAQ,EAAG,CAAE,MAAOwE,EAAAG,MAAA,CAAS,IAAT,CAAexE,SAAf,CAAT,CAAlB,CAAyDqE,CAAzD,CAA6Do1B,CAA7D,CADmC,CAK5CzF,QAASA,EAAY,CAAClD,CAAD,CAAS1oB,CAAT,CAAgB8jB,CAAhB,CAA0BsC,CAA1B,CAAiCY,CAAjC,CAA8C/C,CAA9C,CAA4D,CAC/E,GAAI,CACFyE,CAAA,CAAO1oB,CAAP,CAAc8jB,CAAd,CAAwBsC,CAAxB,CAA+BY,CAA/B,CAA4C/C,CAA5C,CADE,CAEF,MAAO/mB,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CAAqBJ,EAAA,CAAYgnB,CAAZ,CAArB,CADU,CAHmE,CA7jDjF,IAAIwC,EAAaA,QAAQ,CAAC3sB,CAAD,CAAU23B,CAAV,CAA4B,CACnD,GAAIA,CAAJ,CAAsB,CACpB,IAAIz6B,EAAOC,MAAAD,KAAA,CAAYy6B,CAAZ,CAAX,CACIt6B,CADJ,CACOya,CADP,CACUlb,CAELS,EAAA,CAAI,CAAT,KAAYya,CAAZ,CAAgB5a,CAAAd,OAAhB,CAA6BiB,CAA7B,CAAiCya,CAAjC,CAAoCza,CAAA,EAApC,CACET,CACA,CADMM,CAAA,CAAKG,CAAL,CACN,CAAA,IAAA,CAAKT,CAAL,CAAA,CAAY+6B,CAAA,CAAiB/6B,CAAjB,CANM,CAAtB,IASE,KAAA6wB,MAAA;AAAa,EAGf,KAAAX,UAAA,CAAiB9sB,CAbkC,CAgBrD2sB,EAAAlN,UAAA,CAAuB,CAgBrBmY,WAAYjK,EAhBS,CA8BrBkK,UAAWA,QAAQ,CAACC,CAAD,CAAW,CACxBA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAA17B,OAAhB,EACE0V,CAAAsK,SAAA,CAAkB,IAAA0Q,UAAlB,CAAkCgL,CAAlC,CAF0B,CA9BT,CA+CrBC,aAAcA,QAAQ,CAACD,CAAD,CAAW,CAC3BA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAA17B,OAAhB,EACE0V,CAAAuK,YAAA,CAAqB,IAAAyQ,UAArB,CAAqCgL,CAArC,CAF6B,CA/CZ,CAiErBd,aAAcA,QAAQ,CAACgB,CAAD,CAAa3C,CAAb,CAAyB,CAC7C,IAAI4C,EAAQC,EAAA,CAAgBF,CAAhB,CAA4B3C,CAA5B,CACR4C,EAAJ,EAAaA,CAAA77B,OAAb,EACE0V,CAAAsK,SAAA,CAAkB,IAAA0Q,UAAlB,CAAkCmL,CAAlC,CAIF,EADIE,CACJ,CADeD,EAAA,CAAgB7C,CAAhB,CAA4B2C,CAA5B,CACf,GAAgBG,CAAA/7B,OAAhB,EACE0V,CAAAuK,YAAA,CAAqB,IAAAyQ,UAArB,CAAqCqL,CAArC,CAR2C,CAjE1B,CAsFrB7D,KAAMA,QAAQ,CAAC13B,CAAD,CAAMY,CAAN,CAAa46B,CAAb,CAAwBzP,CAAxB,CAAkC,CAAA,IAK1CppB,EAAO,IAAAutB,UAAA,CAAe,CAAf,CALmC,CAM1CuL,EAAa1d,EAAA,CAAmBpb,CAAnB,CAAyB3C,CAAzB,CAN6B,CAO1C07B,EAAavd,EAAA,CAAmBxb,CAAnB,CAAyB3C,CAAzB,CAP6B,CAQ1C27B,EAAW37B,CAGXy7B,EAAJ,EACE,IAAAvL,UAAArtB,KAAA,CAAoB7C,CAApB,CAAyBY,CAAzB,CACA,CAAAmrB,CAAA,CAAW0P,CAFb,EAGWC,CAHX,GAIE,IAAA,CAAKA,CAAL,CACA,CADmB96B,CACnB,CAAA+6B,CAAA,CAAWD,CALb,CAQA,KAAA,CAAK17B,CAAL,CAAA,CAAYY,CAGRmrB,EAAJ,CACE,IAAA8E,MAAA,CAAW7wB,CAAX,CADF,CACoB+rB,CADpB,EAGEA,CAHF,CAGa,IAAA8E,MAAA,CAAW7wB,CAAX,CAHb,IAKI,IAAA6wB,MAAA,CAAW7wB,CAAX,CALJ;AAKsB+rB,CALtB,CAKiCrhB,EAAA,CAAW1K,CAAX,CAAgB,GAAhB,CALjC,CASA4C,EAAA,CAAWO,EAAA,CAAU,IAAA+sB,UAAV,CAEX,IAAkB,GAAlB,GAAKttB,CAAL,EAAiC,MAAjC,GAAyB5C,CAAzB,EACkB,KADlB,GACK4C,CADL,EACmC,KADnC,GAC2B5C,CAD3B,CAGE,IAAA,CAAKA,CAAL,CAAA,CAAYY,CAAZ,CAAoB2O,CAAA,CAAc3O,CAAd,CAA6B,KAA7B,GAAqBZ,CAArB,CAHtB,KAIO,IAAiB,KAAjB,GAAI4C,CAAJ,EAAkC,QAAlC,GAA0B5C,CAA1B,CAA4C,CAejD,IAbIkE,IAAAA,EAAS,EAATA,CAGA03B,EAAgBthB,CAAA,CAAK1Z,CAAL,CAHhBsD,CAKA23B,EAAa,qCALb33B,CAMA2P,EAAU,IAAA9J,KAAA,CAAU6xB,CAAV,CAAA,CAA2BC,CAA3B,CAAwC,KANlD33B,CASA43B,EAAUF,CAAA14B,MAAA,CAAoB2Q,CAApB,CATV3P,CAYA63B,EAAoB7E,IAAA8E,MAAA,CAAWF,CAAAt8B,OAAX,CAA4B,CAA5B,CAZpB0E,CAaKzD,EAAI,CAAb,CAAgBA,CAAhB,CAAoBs7B,CAApB,CAAuCt7B,CAAA,EAAvC,CACE,IAAIw7B,EAAe,CAAfA,CAAWx7B,CAAf,CAEAyD,EAAAA,CAAAA,CAAUqL,CAAA,CAAc+K,CAAA,CAAKwhB,CAAA,CAAQG,CAAR,CAAL,CAAd,CAAuC,CAAA,CAAvC,CAFV,CAIA/3B,EAAAA,CAAAA,EAAW,GAAXA,CAAiBoW,CAAA,CAAKwhB,CAAA,CAAQG,CAAR,CAAmB,CAAnB,CAAL,CAAjB/3B,CAIEg4B,EAAAA,CAAY5hB,CAAA,CAAKwhB,CAAA,CAAY,CAAZ,CAAQr7B,CAAR,CAAL,CAAAyC,MAAA,CAA2B,IAA3B,CAGhBgB,EAAA,EAAUqL,CAAA,CAAc+K,CAAA,CAAK4hB,CAAA,CAAU,CAAV,CAAL,CAAd,CAAkC,CAAA,CAAlC,CAGe,EAAzB,GAAIA,CAAA18B,OAAJ,GACE0E,CADF,EACa,GADb,CACmBoW,CAAA,CAAK4hB,CAAA,CAAU,CAAV,CAAL,CADnB,CAGA,KAAA,CAAKl8B,CAAL,CAAA,CAAYY,CAAZ,CAAoBsD,CAjC6B,CAoCjC,CAAA,CAAlB,GAAIs3B,CAAJ,GACgB,IAAd,GAAI56B,CAAJ,EAAsBA,CAAtB,GAAgCzB,CAAhC,CACE,IAAA+wB,UAAAiM,WAAA,CAA0BpQ,CAA1B,CADF,CAGE,IAAAmE,UAAAptB,KAAA,CAAoBipB,CAApB,CAA8BnrB,CAA9B,CAJJ,CAUA,EADI8zB,CACJ,CADkB,IAAAA,YAClB;AAAe70B,CAAA,CAAQ60B,CAAA,CAAYiH,CAAZ,CAAR,CAA+B,QAAQ,CAACj2B,CAAD,CAAK,CACzD,GAAI,CACFA,CAAA,CAAG9E,CAAH,CADE,CAEF,MAAO+F,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAH6C,CAA5C,CAnF+B,CAtF3B,CAqMrB8tB,SAAUA,QAAQ,CAACz0B,CAAD,CAAM0F,CAAN,CAAU,CAAA,IACtBmqB,EAAQ,IADc,CAEtB6E,EAAe7E,CAAA6E,YAAfA,GAAqC7E,CAAA6E,YAArCA,CAAyDtnB,EAAA,EAAzDsnB,CAFsB,CAGtB0H,EAAa1H,CAAA,CAAY10B,CAAZ,CAAbo8B,GAAkC1H,CAAA,CAAY10B,CAAZ,CAAlCo8B,CAAqD,EAArDA,CAEJA,EAAAn4B,KAAA,CAAeyB,CAAf,CACAoR,EAAAvU,WAAA,CAAsB,QAAQ,EAAG,CAC1B03B,CAAAmC,CAAAnC,QAAL,EAA0BpK,CAAA3vB,eAAA,CAAqBF,CAArB,CAA1B,EAEE0F,CAAA,CAAGmqB,CAAA,CAAM7vB,CAAN,CAAH,CAH6B,CAAjC,CAOA,OAAO,SAAQ,EAAG,CAChBsD,EAAA,CAAY84B,CAAZ,CAAuB12B,CAAvB,CADgB,CAbQ,CArMP,CAlB+D,KAqPlF22B,GAAcrmB,CAAAqmB,YAAA,EArPoE,CAsPlFC,GAAYtmB,CAAAsmB,UAAA,EAtPsE,CAuPlF7F,GAAsC,IAAhB,EAAC4F,EAAD,EAAsC,IAAtC,EAAwBC,EAAxB,CAChB16B,EADgB,CAEhB60B,QAA4B,CAACnB,CAAD,CAAW,CACvC,MAAOA,EAAAtuB,QAAA,CAAiB,OAAjB,CAA0Bq1B,EAA1B,CAAAr1B,QAAA,CAA+C,KAA/C,CAAsDs1B,EAAtD,CADgC,CAzPqC,CA4PlF/K,GAAkB,cAEtB7nB,EAAA6vB,iBAAA,CAA2BnwB,CAAA,CAAmBmwB,QAAyB,CAAChM,CAAD,CAAWgP,CAAX,CAAoB,CACzF,IAAI/Q,EAAW+B,CAAA3jB,KAAA,CAAc,UAAd,CAAX4hB,EAAwC,EAExC5rB,EAAA,CAAQ28B,CAAR,CAAJ,CACE/Q,CADF,CACaA,CAAApmB,OAAA,CAAgBm3B,CAAhB,CADb,CAGE/Q,CAAAvnB,KAAA,CAAcs4B,CAAd,CAGFhP,EAAA3jB,KAAA,CAAc,UAAd,CAA0B4hB,CAA1B,CATyF,CAAhE,CAUvB7pB,CAEJ+H;CAAA2vB,kBAAA,CAA4BjwB,CAAA,CAAmBiwB,QAA0B,CAAC9L,CAAD,CAAW,CAClFD,CAAA,CAAaC,CAAb,CAAuB,YAAvB,CADkF,CAAxD,CAExB5rB,CAEJ+H,EAAAklB,eAAA,CAAyBxlB,CAAA,CAAmBwlB,QAAuB,CAACrB,CAAD,CAAW9jB,CAAX,CAAkB+yB,CAAlB,CAA4BC,CAA5B,CAAwC,CAEzGlP,CAAA3jB,KAAA,CADe4yB,CAAAE,CAAYD,CAAA,CAAa,yBAAb,CAAyC,eAArDC,CAAwE,QACvF,CAAwBjzB,CAAxB,CAFyG,CAAlF,CAGrB9H,CAEJ+H,EAAAukB,gBAAA,CAA0B7kB,CAAA,CAAmB6kB,QAAwB,CAACV,CAAD,CAAWiP,CAAX,CAAqB,CACxFlP,CAAA,CAAaC,CAAb,CAAuBiP,CAAA,CAAW,kBAAX,CAAgC,UAAvD,CADwF,CAAhE,CAEtB76B,CAEJ,OAAO+H,EAvR+E,CAJ5E,CAzL6C,CA2wD3DqnB,QAASA,GAAkB,CAACxoB,CAAD,CAAO,CAChC,MAAOmQ,GAAA,CAAUnQ,CAAAvB,QAAA,CAAa21B,EAAb,CAA4B,EAA5B,CAAV,CADyB,CAgElCrB,QAASA,GAAe,CAACsB,CAAD,CAAOC,CAAP,CAAa,CAAA,IAC/BC,EAAS,EADsB,CAE/BC,EAAUH,CAAA15B,MAAA,CAAW,KAAX,CAFqB,CAG/B85B,EAAUH,CAAA35B,MAAA,CAAW,KAAX,CAHqB,CAM1BzC,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBs8B,CAAAv9B,OAApB,CAAoCiB,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAIw8B,EAAQF,CAAA,CAAQt8B,CAAR,CAAZ,CACSa,EAAI,CAAb,CAAgBA,CAAhB,CAAoB07B,CAAAx9B,OAApB,CAAoC8B,CAAA,EAApC,CACE,GAAI27B,CAAJ,EAAaD,CAAA,CAAQ17B,CAAR,CAAb,CAAyB,SAAS,CAEpCw7B,EAAA,GAA2B,CAAhB,CAAAA,CAAAt9B,OAAA,CAAoB,GAApB,CAA0B,EAArC,EAA2Cy9B,CALJ,CAOzC,MAAOH,EAb4B,CAgBrCpG,QAASA,GAAc,CAACwG,CAAD,CAAU,CAC/BA,CAAA,CAAU12B,CAAA,CAAO02B,CAAP,CACV,KAAIz8B,EAAIy8B,CAAA19B,OAER;GAAS,CAAT,EAAIiB,CAAJ,CACE,MAAOy8B,EAGT,KAAA,CAAOz8B,CAAA,EAAP,CAAA,CA/+MsBmxB,CAi/MpB,GADWsL,CAAAv6B,CAAQlC,CAARkC,CACPlD,SAAJ,EACEiE,EAAAvD,KAAA,CAAY+8B,CAAZ,CAAqBz8B,CAArB,CAAwB,CAAxB,CAGJ,OAAOy8B,EAdwB,CA2BjCznB,QAASA,GAAmB,EAAG,CAAA,IACzBgb,EAAc,EADW,CAEzB0M,EAAU,CAAA,CAFe,CAGzBC,EAAY,yBAWhB,KAAAC,SAAA,CAAgBC,QAAQ,CAAC/0B,CAAD,CAAOiE,CAAP,CAAoB,CAC1CC,EAAA,CAAwBlE,CAAxB,CAA8B,YAA9B,CACItG,EAAA,CAASsG,CAAT,CAAJ,CACErH,CAAA,CAAOuvB,CAAP,CAAoBloB,CAApB,CADF,CAGEkoB,CAAA,CAAYloB,CAAZ,CAHF,CAGsBiE,CALoB,CAc5C,KAAA+wB,aAAA,CAAoBC,QAAQ,EAAG,CAC7BL,CAAA,CAAU,CAAA,CADmB,CAK/B,KAAA/d,KAAA,CAAY,CAAC,WAAD,CAAc,SAAd,CAAyB,QAAQ,CAAC4D,CAAD,CAAY9K,CAAZ,CAAqB,CA4FhEulB,QAASA,EAAa,CAAC/a,CAAD,CAASyR,CAAT,CAAqBvR,CAArB,CAA+Bra,CAA/B,CAAqC,CACzD,GAAMma,CAAAA,CAAN,EAAgB,CAAAzgB,CAAA,CAASygB,CAAAgR,OAAT,CAAhB,CACE,KAAMt0B,EAAA,CAAO,aAAP,CAAA,CAAsB,OAAtB,CAEJmJ,CAFI,CAEE4rB,CAFF,CAAN,CAKFzR,CAAAgR,OAAA,CAAcS,CAAd,CAAA,CAA4BvR,CAP6B,CA/D3D,MAAO,SAAQ,CAAC8a,CAAD,CAAahb,CAAb,CAAqBib,CAArB,CAA4BC,CAA5B,CAAmC,CAAA,IAQ5Chb,CAR4C,CAQ3BpW,CAR2B,CAQd2nB,CAClCwJ,EAAA,CAAkB,CAAA,CAAlB,GAAQA,CACJC,EAAJ,EAAaj+B,CAAA,CAASi+B,CAAT,CAAb,GACEzJ,CADF,CACeyJ,CADf,CAIIj+B,EAAA,CAAS+9B,CAAT,CAAJ,GACEp5B,CAQA,CARQo5B,CAAAp5B,MAAA,CAAiB84B,CAAjB,CAQR,CAPA5wB,CAOA,CAPclI,CAAA,CAAM,CAAN,CAOd,CANA6vB,CAMA,CANaA,CAMb,EAN2B7vB,CAAA,CAAM,CAAN,CAM3B,CALAo5B,CAKA,CALajN,CAAAvwB,eAAA,CAA2BsM,CAA3B,CAAA,CACPikB,CAAA,CAAYjkB,CAAZ,CADO,CAEPE,EAAA,CAAOgW,CAAAgR,OAAP,CAAsBlnB,CAAtB;AAAmC,CAAA,CAAnC,CAFO,GAGJ2wB,CAAA,CAAUzwB,EAAA,CAAOwL,CAAP,CAAgB1L,CAAhB,CAA6B,CAAA,CAA7B,CAAV,CAA+CrN,CAH3C,CAKb,CAAAmN,EAAA,CAAYoxB,CAAZ,CAAwBlxB,CAAxB,CAAqC,CAAA,CAArC,CATF,CAYA,IAAImxB,CAAJ,CAmBE,MARIE,EAQG,CARmBhb,CAACjjB,CAAA,CAAQ89B,CAAR,CAAA,CACzBA,CAAA,CAAWA,CAAAl+B,OAAX,CAA+B,CAA/B,CADyB,CACWk+B,CADZ7a,WAQnB,CANPD,CAMO,CANIriB,MAAAkE,OAAA,CAAco5B,CAAd,CAMJ,CAJH1J,CAIG,EAHLsJ,CAAA,CAAc/a,CAAd,CAAsByR,CAAtB,CAAkCvR,CAAlC,CAA4CpW,CAA5C,EAA2DkxB,CAAAn1B,KAA3D,CAGK,CAAArH,CAAA,CAAO,QAAQ,EAAG,CACvB8hB,CAAAzZ,OAAA,CAAiBm0B,CAAjB,CAA6B9a,CAA7B,CAAuCF,CAAvC,CAA+ClW,CAA/C,CACA,OAAOoW,EAFgB,CAAlB,CAGJ,CACDA,SAAUA,CADT,CAEDuR,WAAYA,CAFX,CAHI,CASTvR,EAAA,CAAWI,CAAA7B,YAAA,CAAsBuc,CAAtB,CAAkChb,CAAlC,CAA0ClW,CAA1C,CAEP2nB,EAAJ,EACEsJ,CAAA,CAAc/a,CAAd,CAAsByR,CAAtB,CAAkCvR,CAAlC,CAA4CpW,CAA5C,EAA2DkxB,CAAAn1B,KAA3D,CAGF,OAAOqa,EA5DyC,CA7Bc,CAAtD,CAjCiB,CAkK/BjN,QAASA,GAAiB,EAAG,CAC3B,IAAAyJ,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAACngB,CAAD,CAAS,CACvC,MAAOuH,EAAA,CAAOvH,CAAAC,SAAP,CADgC,CAA7B,CADe,CA8C7B2W,QAASA,GAAyB,EAAG,CACnC,IAAAuJ,KAAA,CAAY,CAAC,MAAD,CAAS,QAAQ,CAAC1I,CAAD,CAAO,CAClC,MAAO,SAAQ,CAAConB,CAAD,CAAYC,CAAZ,CAAmB,CAChCrnB,CAAA+O,MAAA5f,MAAA,CAAiB6Q,CAAjB,CAAuBrV,SAAvB,CADgC,CADA,CAAxB,CADuB,CAcrC28B,QAASA,GAA4B,CAACp0B,CAAD,CAAOq0B,CAAP,CAAgB,CACnD,GAAIt+B,CAAA,CAASiK,CAAT,CAAJ,CAAoB,CAElBA,CAAA,CAAOA,CAAA5C,QAAA,CAAak3B,EAAb,CAAqC,EAArC,CACP,KAAIC,EAAcF,CAAA,CAAQ,cAAR,CAClB,IAAKE,CAAL,EAA8D,CAA9D,GAAoBA,CAAA16B,QAAA,CAAoB26B,EAApB,CAApB;AAAmEx0B,CAAA0Q,KAAA,EAAnE,EACK+jB,EAAAt0B,KAAA,CAAgBH,CAAhB,CADL,EAC8B00B,EAAAv0B,KAAA,CAAcH,CAAd,CAD9B,CAEEA,CAAA,CAAOxD,EAAA,CAASwD,CAAT,CANS,CASpB,MAAOA,EAV4C,CAmBrD20B,QAASA,GAAY,CAACN,CAAD,CAAU,CAAA,IACzBzjB,EAASpN,EAAA,EADgB,CACHpN,CADG,CACE+F,CADF,CACOtF,CAEpC,IAAKw9B,CAAAA,CAAL,CAAc,MAAOzjB,EAErB3a,EAAA,CAAQo+B,CAAA/6B,MAAA,CAAc,IAAd,CAAR,CAA6B,QAAQ,CAACs7B,CAAD,CAAO,CAC1C/9B,CAAA,CAAI+9B,CAAA/6B,QAAA,CAAa,GAAb,CACJzD,EAAA,CAAMqD,CAAA,CAAUiX,CAAA,CAAKkkB,CAAAxW,OAAA,CAAY,CAAZ,CAAevnB,CAAf,CAAL,CAAV,CACNsF,EAAA,CAAMuU,CAAA,CAAKkkB,CAAAxW,OAAA,CAAYvnB,CAAZ,CAAgB,CAAhB,CAAL,CAEFT,EAAJ,GACEwa,CAAA,CAAOxa,CAAP,CADF,CACgBwa,CAAA,CAAOxa,CAAP,CAAA,CAAcwa,CAAA,CAAOxa,CAAP,CAAd,CAA4B,IAA5B,CAAmC+F,CAAnC,CAAyCA,CADzD,CAL0C,CAA5C,CAUA,OAAOyU,EAfsB,CA+B/BikB,QAASA,GAAa,CAACR,CAAD,CAAU,CAC9B,IAAIS,EAAaz8B,CAAA,CAASg8B,CAAT,CAAA,CAAoBA,CAApB,CAA8B9+B,CAE/C,OAAO,SAAQ,CAACoJ,CAAD,CAAO,CACfm2B,CAAL,GAAiBA,CAAjB,CAA+BH,EAAA,CAAaN,CAAb,CAA/B,CAEA,OAAI11B,EAAJ,EACM3H,CAIGA,CAJK89B,CAAA,CAAWr7B,CAAA,CAAUkF,CAAV,CAAX,CAIL3H,CAHO,IAAK,EAGZA,GAHHA,CAGGA,GAFLA,CAEKA,CAFG,IAEHA,EAAAA,CALT,EAQO89B,CAXa,CAHQ,CA6BhCC,QAASA,GAAa,CAAC/0B,CAAD,CAAOq0B,CAAP,CAAgBW,CAAhB,CAAqB,CACzC,GAAI3+B,CAAA,CAAW2+B,CAAX,CAAJ,CACE,MAAOA,EAAA,CAAIh1B,CAAJ,CAAUq0B,CAAV,CAETp+B,EAAA,CAAQ++B,CAAR,CAAa,QAAQ,CAACl5B,CAAD,CAAK,CACxBkE,CAAA,CAAOlE,CAAA,CAAGkE,CAAH,CAASq0B,CAAT,CADiB,CAA1B,CAIA,OAAOr0B,EARkC,CAuB3CyM,QAASA,GAAa,EAAG,CA4BvB,IAAIwoB,EAAW,IAAAA,SAAXA,CAA2B,CAE7BC,kBAAmB,CAACd,EAAD,CAFU,CAK7Be,iBAAkB,CAAC,QAAQ,CAACC,CAAD,CAAI,CAC7B,MAAO/8B,EAAA,CAAS+8B,CAAT,CAAA;AA32PmB,eA22PnB,GA32PJ58B,EAAAjC,KAAA,CA22P2B6+B,CA32P3B,CA22PI,EAt2PmB,eAs2PnB,GAt2PJ58B,EAAAjC,KAAA,CAs2PyC6+B,CAt2PzC,CAs2PI,CAA0Ch5B,EAAA,CAAOg5B,CAAP,CAA1C,CAAsDA,CADhC,CAAb,CALW,CAU7Bf,QAAS,CACPgB,OAAQ,CACN,OAAU,mCADJ,CADD,CAIPrM,KAAQjuB,EAAA,CAAYu6B,EAAZ,CAJD,CAKPlf,IAAQrb,EAAA,CAAYu6B,EAAZ,CALD,CAMPC,MAAQx6B,EAAA,CAAYu6B,EAAZ,CAND,CAVoB,CAmB7BE,eAAgB,YAnBa,CAoB7BC,eAAgB,cApBa,CAA/B,CAuBIC,EAAgB,CAAA,CAoBpB,KAAAA,cAAA,CAAqBC,QAAQ,CAAC3+B,CAAD,CAAQ,CACnC,MAAIoB,EAAA,CAAUpB,CAAV,CAAJ,EACE0+B,CACO,CADS,CAAE1+B,CAAAA,CACX,CAAA,IAFT,EAIO0+B,CAL4B,CAqBrC,KAAIE,EAAuB,IAAAC,aAAvBD,CAA2C,EAE/C,KAAApgB,KAAA,CAAY,CAAC,cAAD,CAAiB,UAAjB,CAA6B,eAA7B,CAA8C,YAA9C,CAA4D,IAA5D,CAAkE,WAAlE,CACR,QAAQ,CAAC9I,CAAD,CAAelB,CAAf,CAAyBE,CAAzB,CAAwCwB,CAAxC,CAAoDE,CAApD,CAAwDgM,CAAxD,CAAmE,CAshB7E5M,QAASA,EAAK,CAACspB,CAAD,CAAgB,CAyE5BZ,QAASA,EAAiB,CAACa,CAAD,CAAW,CAEnC,IAAIC,EAAO1+B,CAAA,CAAO,EAAP,CAAWy+B,CAAX,CAITC,EAAAh2B,KAAA,CAHG+1B,CAAA/1B,KAAL,CAGc+0B,EAAA,CAAcgB,CAAA/1B,KAAd,CAA6B+1B,CAAA1B,QAA7B,CAA+C51B,CAAAy2B,kBAA/C,CAHd;AACca,CAAA/1B,KAIIi2B,EAAAA,CAAAF,CAAAE,OAAlB,OAhtBC,IAgtBM,EAhtBCA,CAgtBD,EAhtBoB,GAgtBpB,CAhtBWA,CAgtBX,CACHD,CADG,CAEH5oB,CAAA8oB,OAAA,CAAUF,CAAV,CAV+B,CAxErC,IAAIv3B,EAAS,CACXyF,OAAQ,KADG,CAEXixB,iBAAkBF,CAAAE,iBAFP,CAGXD,kBAAmBD,CAAAC,kBAHR,CAAb,CAKIb,EAgFJ8B,QAAqB,CAAC13B,CAAD,CAAS,CAAA,IACxB23B,EAAanB,CAAAZ,QADW,CAExBgC,EAAa/+B,CAAA,CAAO,EAAP,CAAWmH,CAAA41B,QAAX,CAFW,CAGxBiC,CAHwB,CAGeC,CAHf,CAK5BH,EAAa9+B,CAAA,CAAO,EAAP,CAAW8+B,CAAAf,OAAX,CAA8Be,CAAA,CAAW38B,CAAA,CAAUgF,CAAAyF,OAAV,CAAX,CAA9B,CAGb,EAAA,CACA,IAAKoyB,CAAL,GAAsBF,EAAtB,CAAkC,CAChCI,CAAA,CAAyB/8B,CAAA,CAAU68B,CAAV,CAEzB,KAAKC,CAAL,GAAsBF,EAAtB,CACE,GAAI58B,CAAA,CAAU88B,CAAV,CAAJ,GAAiCC,CAAjC,CACE,SAAS,CAIbH,EAAA,CAAWC,CAAX,CAAA,CAA4BF,CAAA,CAAWE,CAAX,CATI,CAgBlCG,SAAoB,CAACpC,CAAD,CAAU,CAC5B,IAAIqC,CAEJzgC,EAAA,CAAQo+B,CAAR,CAAiB,QAAQ,CAACsC,CAAD,CAAWC,CAAX,CAAmB,CACtCvgC,CAAA,CAAWsgC,CAAX,CAAJ,GACED,CACA,CADgBC,CAAA,EAChB,CAAqB,IAArB,EAAID,CAAJ,CACErC,CAAA,CAAQuC,CAAR,CADF,CACoBF,CADpB,CAGE,OAAOrC,CAAA,CAAQuC,CAAR,CALX,CAD0C,CAA5C,CAH4B,CAA9BH,CAHA,CAAYJ,CAAZ,CACA,OAAOA,EAvBqB,CAhFhB,CAAaP,CAAb,CAEd,IAAK,CAAA11B,EAAA/H,SAAA,CAAiBy9B,CAAjB,CAAL,CACE,KAAMtgC,EAAA,CAAO,OAAP,CAAA,CAAgB,QAAhB,CAA0FsgC,CAA1F,CAAN,CAGFx+B,CAAA,CAAOmH,CAAP,CAAeq3B,CAAf,CACAr3B,EAAA41B,QAAA,CAAiBA,CACjB51B,EAAAyF,OAAA,CAAgBmB,EAAA,CAAU5G,CAAAyF,OAAV,CAuBhB,KAAI2yB,EAAQ,CArBQC,QAAQ,CAACr4B,CAAD,CAAS,CACnC41B,CAAA;AAAU51B,CAAA41B,QACV,KAAI0C,EAAUhC,EAAA,CAAct2B,CAAAuB,KAAd,CAA2B60B,EAAA,CAAcR,CAAd,CAA3B,CAAmD51B,CAAA02B,iBAAnD,CAGVh9B,EAAA,CAAY4+B,CAAZ,CAAJ,EACE9gC,CAAA,CAAQo+B,CAAR,CAAiB,QAAQ,CAACr9B,CAAD,CAAQ4/B,CAAR,CAAgB,CACb,cAA1B,GAAIn9B,CAAA,CAAUm9B,CAAV,CAAJ,EACI,OAAOvC,CAAA,CAAQuC,CAAR,CAF4B,CAAzC,CAOEz+B,EAAA,CAAYsG,CAAAu4B,gBAAZ,CAAJ,EAA4C,CAAA7+B,CAAA,CAAY88B,CAAA+B,gBAAZ,CAA5C,GACEv4B,CAAAu4B,gBADF,CAC2B/B,CAAA+B,gBAD3B,CAKA,OAAOC,EAAA,CAAQx4B,CAAR,CAAgBs4B,CAAhB,CAAyB1C,CAAzB,CAAA9F,KAAA,CAAuC2G,CAAvC,CAA0DA,CAA1D,CAlB4B,CAqBzB,CAAgB3/B,CAAhB,CAAZ,CACI2hC,EAAU9pB,CAAA+pB,KAAA,CAAQ14B,CAAR,CAYd,KATAxI,CAAA,CAAQmhC,CAAR,CAA8B,QAAQ,CAACC,CAAD,CAAc,CAClD,CAAIA,CAAAC,QAAJ,EAA2BD,CAAAE,aAA3B,GACEV,CAAAv3B,QAAA,CAAc+3B,CAAAC,QAAd,CAAmCD,CAAAE,aAAnC,CAEF,EAAIF,CAAAtB,SAAJ,EAA4BsB,CAAAG,cAA5B,GACEX,CAAAx8B,KAAA,CAAWg9B,CAAAtB,SAAX,CAAiCsB,CAAAG,cAAjC,CALgD,CAApD,CASA,CAAOX,CAAAjhC,OAAP,CAAA,CAAqB,CACf6hC,CAAAA,CAASZ,CAAAhe,MAAA,EACb,KAAI6e,EAAWb,CAAAhe,MAAA,EAAf,CAEAqe,EAAUA,CAAA3I,KAAA,CAAakJ,CAAb,CAAqBC,CAArB,CAJS,CAOrBR,CAAAS,QAAA,CAAkBC,QAAQ,CAAC97B,CAAD,CAAK,CAC7Bo7B,CAAA3I,KAAA,CAAa,QAAQ,CAACwH,CAAD,CAAW,CAC9Bj6B,CAAA,CAAGi6B,CAAA/1B,KAAH,CAAkB+1B,CAAAE,OAAlB;AAAmCF,CAAA1B,QAAnC,CAAqD51B,CAArD,CAD8B,CAAhC,CAGA,OAAOy4B,EAJsB,CAO/BA,EAAArb,MAAA,CAAgBgc,QAAQ,CAAC/7B,CAAD,CAAK,CAC3Bo7B,CAAA3I,KAAA,CAAa,IAAb,CAAmB,QAAQ,CAACwH,CAAD,CAAW,CACpCj6B,CAAA,CAAGi6B,CAAA/1B,KAAH,CAAkB+1B,CAAAE,OAAlB,CAAmCF,CAAA1B,QAAnC,CAAqD51B,CAArD,CADoC,CAAtC,CAGA,OAAOy4B,EAJoB,CAO7B,OAAOA,EAvEqB,CA2Q9BD,QAASA,EAAO,CAACx4B,CAAD,CAASs4B,CAAT,CAAkBV,CAAlB,CAA8B,CA8D5CyB,QAASA,EAAI,CAAC7B,CAAD,CAASF,CAAT,CAAmBgC,CAAnB,CAAkCC,CAAlC,CAA8C,CAUzDC,QAASA,EAAkB,EAAG,CAC5BC,CAAA,CAAenC,CAAf,CAAyBE,CAAzB,CAAiC8B,CAAjC,CAAgDC,CAAhD,CAD4B,CAT1Bzf,CAAJ,GAz8BC,GA08BC,EAAc0d,CAAd,EA18ByB,GA08BzB,CAAcA,CAAd,CACE1d,CAAAnC,IAAA,CAAUwG,CAAV,CAAe,CAACqZ,CAAD,CAASF,CAAT,CAAmBpB,EAAA,CAAaoD,CAAb,CAAnB,CAAgDC,CAAhD,CAAf,CADF,CAIEzf,CAAA2I,OAAA,CAAatE,CAAb,CALJ,CAaI8Y,EAAJ,CACExoB,CAAAirB,YAAA,CAAuBF,CAAvB,CADF,EAGEA,CAAA,EACA,CAAK/qB,CAAAkrB,QAAL,EAAyBlrB,CAAAnN,OAAA,EAJ3B,CAdyD,CA0B3Dm4B,QAASA,EAAc,CAACnC,CAAD,CAAWE,CAAX,CAAmB5B,CAAnB,CAA4B2D,CAA5B,CAAwC,CAE7D/B,CAAA,CAAS3I,IAAAC,IAAA,CAAS0I,CAAT,CAAiB,CAAjB,CAET,EAt+BC,GAs+BA,EAAUA,CAAV,EAt+B0B,GAs+B1B,CAAUA,CAAV,CAAoBoC,CAAAC,QAApB,CAAuCD,CAAAnC,OAAxC,EAAyD,CACvDl2B,KAAM+1B,CADiD,CAEvDE,OAAQA,CAF+C,CAGvD5B,QAASQ,EAAA,CAAcR,CAAd,CAH8C,CAIvD51B,OAAQA,CAJ+C,CAKvDu5B,WAAYA,CAL2C,CAAzD,CAJ6D,CAa/DO,QAASA,EAAwB,CAACj+B,CAAD,CAAS,CACxC49B,CAAA,CAAe59B,CAAA0F,KAAf,CAA4B1F,CAAA27B,OAA5B,CAA2Cl7B,EAAA,CAAYT,CAAA+5B,QAAA,EAAZ,CAA3C,CAA0E/5B,CAAA09B,WAA1E,CADwC,CAI1CQ,QAASA,EAAgB,EAAG,CAC1B,IAAI/S,EAAMjZ,CAAAisB,gBAAA5+B,QAAA,CAA8B4E,CAA9B,CACG;EAAb,GAAIgnB,CAAJ,EAAgBjZ,CAAAisB,gBAAA3+B,OAAA,CAA6B2rB,CAA7B,CAAkC,CAAlC,CAFU,CAzGgB,IACxC4S,EAAWjrB,CAAAkS,MAAA,EAD6B,CAExC4X,EAAUmB,CAAAnB,QAF8B,CAGxC3e,CAHwC,CAIxCmgB,CAJwC,CAKxC9b,EAAM+b,CAAA,CAASl6B,CAAAme,IAAT,CAAqBne,CAAAm6B,OAArB,CAEVpsB,EAAAisB,gBAAAp+B,KAAA,CAA2BoE,CAA3B,CACAy4B,EAAA3I,KAAA,CAAaiK,CAAb,CAA+BA,CAA/B,CAGKjgB,EAAA9Z,CAAA8Z,MAAL,EAAqBA,CAAA0c,CAAA1c,MAArB,EAAyD,CAAA,CAAzD,GAAwC9Z,CAAA8Z,MAAxC,EACuB,KADvB,GACK9Z,CAAAyF,OADL,EACkD,OADlD,GACgCzF,CAAAyF,OADhC,GAEEqU,CAFF,CAEUlgB,CAAA,CAASoG,CAAA8Z,MAAT,CAAA,CAAyB9Z,CAAA8Z,MAAzB,CACAlgB,CAAA,CAAS48B,CAAA1c,MAAT,CAAA,CAA2B0c,CAAA1c,MAA3B,CACAsgB,CAJV,CAOItgB,EAAJ,GACEmgB,CACA,CADangB,CAAA1X,IAAA,CAAU+b,CAAV,CACb,CAAIxkB,CAAA,CAAUsgC,CAAV,CAAJ,CACoBA,CAAlB,EA/sRMriC,CAAA,CA+sRYqiC,CA/sRDnK,KAAX,CA+sRN,CAEEmK,CAAAnK,KAAA,CAAgBgK,CAAhB,CAA0CA,CAA1C,CAFF,CAKMviC,CAAA,CAAQ0iC,CAAR,CAAJ,CACER,CAAA,CAAeQ,CAAA,CAAW,CAAX,CAAf,CAA8BA,CAAA,CAAW,CAAX,CAA9B,CAA6C39B,EAAA,CAAY29B,CAAA,CAAW,CAAX,CAAZ,CAA7C,CAAyEA,CAAA,CAAW,CAAX,CAAzE,CADF,CAGER,CAAA,CAAeQ,CAAf,CAA2B,GAA3B,CAAgC,EAAhC,CAAoC,IAApC,CATN,CAcEngB,CAAAnC,IAAA,CAAUwG,CAAV,CAAesa,CAAf,CAhBJ,CAuBI/+B,EAAA,CAAYugC,CAAZ,CAAJ,GAQE,CAPII,CAOJ,CAPgBC,EAAA,CAAgBt6B,CAAAme,IAAhB,CAAA,CACVpR,CAAAuT,QAAA,EAAA,CAAmBtgB,CAAA+2B,eAAnB,EAA4CP,CAAAO,eAA5C,CADU,CAEVjgC,CAKN,IAHE8gC,CAAA,CAAY53B,CAAAg3B,eAAZ,EAAqCR,CAAAQ,eAArC,CAGF,CAHmEqD,CAGnE,EAAApsB,CAAA,CAAajO,CAAAyF,OAAb,CAA4B0Y,CAA5B,CAAiCma,CAAjC,CAA0Ce,CAA1C,CAAgDzB,CAAhD,CAA4D53B,CAAAu6B,QAA5D,CACIv6B,CAAAu4B,gBADJ;AAC4Bv4B,CAAAw6B,aAD5B,CARF,CAYA,OAAO/B,EArDqC,CAgH9CyB,QAASA,EAAQ,CAAC/b,CAAD,CAAMgc,CAAN,CAAc,CAC7B,GAAKA,CAAAA,CAAL,CAAa,MAAOhc,EACpB,KAAIjf,EAAQ,EACZlH,GAAA,CAAcmiC,CAAd,CAAsB,QAAQ,CAAC5hC,CAAD,CAAQZ,CAAR,CAAa,CAC3B,IAAd,GAAIY,CAAJ,EAAsBmB,CAAA,CAAYnB,CAAZ,CAAtB,GACKhB,CAAA,CAAQgB,CAAR,CAEL,GAFqBA,CAErB,CAF6B,CAACA,CAAD,CAE7B,EAAAf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAACkiC,CAAD,CAAI,CACrB7gC,CAAA,CAAS6gC,CAAT,CAAJ,GAEIA,CAFJ,CACM3gC,EAAA,CAAO2gC,CAAP,CAAJ,CACMA,CAAAC,YAAA,EADN,CAGM/8B,EAAA,CAAO88B,CAAP,CAJR,CAOAv7B,EAAAtD,KAAA,CAAWwD,EAAA,CAAezH,CAAf,CAAX,CAAiC,GAAjC,CACWyH,EAAA,CAAeq7B,CAAf,CADX,CARyB,CAA3B,CAHA,CADyC,CAA3C,CAgBmB,EAAnB,CAAIv7B,CAAA/H,OAAJ,GACEgnB,CADF,GACgC,EAAtB,EAACA,CAAA/iB,QAAA,CAAY,GAAZ,CAAD,CAA2B,GAA3B,CAAiC,GAD3C,EACkD8D,CAAAG,KAAA,CAAW,GAAX,CADlD,CAGA,OAAO8e,EAtBsB,CA/4B/B,IAAIic,EAAentB,CAAA,CAAc,OAAd,CAAnB,CAOI0rB,EAAuB,EAE3BnhC,EAAA,CAAQ2/B,CAAR,CAA8B,QAAQ,CAACwD,CAAD,CAAqB,CACzDhC,CAAA93B,QAAA,CAA6BvJ,CAAA,CAASqjC,CAAT,CAAA,CACvBhgB,CAAAvY,IAAA,CAAcu4B,CAAd,CADuB,CACahgB,CAAAzZ,OAAA,CAAiBy5B,CAAjB,CAD1C,CADyD,CAA3D,CA2oBA5sB,EAAAisB,gBAAA,CAAwB,EA4GxBY,UAA2B,CAAChmB,CAAD,CAAQ,CACjCpd,CAAA,CAAQwB,SAAR,CAAmB,QAAQ,CAACkH,CAAD,CAAO,CAChC6N,CAAA,CAAM7N,CAAN,CAAA,CAAc,QAAQ,CAACie,CAAD,CAAMne,CAAN,CAAc,CAClC,MAAO+N,EAAA,CAAMlV,CAAA,CAAOmH,CAAP,EAAiB,EAAjB,CAAqB,CAChCyF,OAAQvF,CADwB,CAEhCie,IAAKA,CAF2B,CAArB,CAAN,CAD2B,CADJ,CAAlC,CADiC,CAAnCyc,CA1DA,CAAmB,KAAnB,CAA0B,QAA1B,CAAoC,MAApC,CAA4C,OAA5C,CAsEAC,UAAmC,CAAC36B,CAAD,CAAO,CACxC1I,CAAA,CAAQwB,SAAR;AAAmB,QAAQ,CAACkH,CAAD,CAAO,CAChC6N,CAAA,CAAM7N,CAAN,CAAA,CAAc,QAAQ,CAACie,CAAD,CAAM5c,CAAN,CAAYvB,CAAZ,CAAoB,CACxC,MAAO+N,EAAA,CAAMlV,CAAA,CAAOmH,CAAP,EAAiB,EAAjB,CAAqB,CAChCyF,OAAQvF,CADwB,CAEhCie,IAAKA,CAF2B,CAGhC5c,KAAMA,CAH0B,CAArB,CAAN,CADiC,CADV,CAAlC,CADwC,CAA1Cs5B,CA9BA,CAA2B,MAA3B,CAAmC,KAAnC,CAA0C,OAA1C,CAYA9sB,EAAAyoB,SAAA,CAAiBA,CAGjB,OAAOzoB,EA/vBsE,CADnE,CA9FW,CA2gCzB+sB,QAASA,GAAS,EAAG,CACjB,MAAO,KAAIlkC,CAAAmkC,eADM,CAoBrB7sB,QAASA,GAAoB,EAAG,CAC9B,IAAA6I,KAAA,CAAY,CAAC,UAAD,CAAa,SAAb,CAAwB,WAAxB,CAAqC,QAAQ,CAAChK,CAAD,CAAW8C,CAAX,CAAoBxC,CAApB,CAA+B,CACtF,MAAO2tB,GAAA,CAAkBjuB,CAAlB,CAA4B+tB,EAA5B,CAAuC/tB,CAAA8T,MAAvC,CAAuDhR,CAAAlO,QAAAs5B,UAAvD,CAAkF5tB,CAAA,CAAU,CAAV,CAAlF,CAD+E,CAA5E,CADkB,CAMhC2tB,QAASA,GAAiB,CAACjuB,CAAD,CAAW+tB,CAAX,CAAsBI,CAAtB,CAAqCD,CAArC,CAAgDzc,CAAhD,CAA6D,CA8GrF2c,QAASA,EAAQ,CAAChd,CAAD,CAAMid,CAAN,CAAkB/B,CAAlB,CAAwB,CAAA,IAInCzxB,EAAS4W,CAAArN,cAAA,CAA0B,QAA1B,CAJ0B,CAIW8N,EAAW,IAC7DrX,EAAAmL,KAAA,CAAc,iBACdnL,EAAArL,IAAA,CAAa4hB,CACbvW,EAAAyzB,MAAA,CAAe,CAAA,CAEfpc,EAAA,CAAWA,QAAQ,CAAC/I,CAAD,CAAQ,CACHtO,CAtyOtByL,oBAAA,CAsyO8BN,MAtyO9B,CAsyOsCkM,CAtyOtC,CAAsC,CAAA,CAAtC,CAuyOsBrX,EAvyOtByL,oBAAA,CAuyO8BN,OAvyO9B,CAuyOuCkM,CAvyOvC,CAAsC,CAAA,CAAtC,CAwyOAT;CAAA8c,KAAArmB,YAAA,CAA6BrN,CAA7B,CACAA,EAAA,CAAS,IACT,KAAI4vB,EAAU,EAAd,CACI9G,EAAO,SAEPxa,EAAJ,GACqB,MAInB,GAJIA,CAAAnD,KAIJ,EAJ8BkoB,CAAA,CAAUG,CAAV,CAAAG,OAI9B,GAHErlB,CAGF,CAHU,CAAEnD,KAAM,OAAR,CAGV,EADA2d,CACA,CADOxa,CAAAnD,KACP,CAAAykB,CAAA,CAAwB,OAAf,GAAAthB,CAAAnD,KAAA,CAAyB,GAAzB,CAA+B,GAL1C,CAQIsmB,EAAJ,EACEA,CAAA,CAAK7B,CAAL,CAAa9G,CAAb,CAjBuB,CAqBR9oB,EA7zOjB4zB,iBAAA,CA6zOyBzoB,MA7zOzB,CA6zOiCkM,CA7zOjC,CAAmC,CAAA,CAAnC,CA8zOiBrX,EA9zOjB4zB,iBAAA,CA8zOyBzoB,OA9zOzB,CA8zOkCkM,CA9zOlC,CAAmC,CAAA,CAAnC,CA+zOFT,EAAA8c,KAAApqB,YAAA,CAA6BtJ,CAA7B,CACA,OAAOqX,EAjCgC,CA5GzC,MAAO,SAAQ,CAACxZ,CAAD,CAAS0Y,CAAT,CAAcoM,CAAd,CAAoBtL,CAApB,CAA8B2W,CAA9B,CAAuC2E,CAAvC,CAAgDhC,CAAhD,CAAiEiC,CAAjE,CAA+E,CA2F5FiB,QAASA,EAAc,EAAG,CACxBC,CAAA,EAAaA,CAAA,EACbC,EAAA,EAAOA,CAAAC,MAAA,EAFiB,CAK1BC,QAASA,EAAe,CAAC5c,CAAD,CAAWuY,CAAX,CAAmBF,CAAnB,CAA6BgC,CAA7B,CAA4CC,CAA5C,CAAwD,CAE1EvY,CAAJ,GAAkBlqB,CAAlB,EACEokC,CAAAja,OAAA,CAAqBD,CAArB,CAEF0a,EAAA,CAAYC,CAAZ,CAAkB,IAElB1c,EAAA,CAASuY,CAAT,CAAiBF,CAAjB,CAA2BgC,CAA3B,CAA0CC,CAA1C,CACAxsB,EAAA6R,6BAAA,CAAsCtlB,CAAtC,CAR8E,CA/FhFyT,CAAA8R,6BAAA,EACAV,EAAA,CAAMA,CAAN,EAAapR,CAAAoR,IAAA,EAEb,IAAyB,OAAzB,EAAInjB,CAAA,CAAUyK,CAAV,CAAJ,CAAkC,CAChC,IAAI21B,EAAa,GAAbA,CAAmBrhC,CAACkhC,CAAAp0B,QAAA,EAAD9M,UAAA,CAA+B,EAA/B,CACvBkhC;CAAA,CAAUG,CAAV,CAAA,CAAwB,QAAQ,CAAC75B,CAAD,CAAO,CACrC05B,CAAA,CAAUG,CAAV,CAAA75B,KAAA,CAA6BA,CAC7B05B,EAAA,CAAUG,CAAV,CAAAG,OAAA,CAA+B,CAAA,CAFM,CAKvC,KAAIG,EAAYP,CAAA,CAAShd,CAAAxf,QAAA,CAAY,eAAZ,CAA6B,oBAA7B,CAAoDy8B,CAApD,CAAT,CACZA,CADY,CACA,QAAQ,CAAC5D,CAAD,CAAS9G,CAAT,CAAe,CACrCmL,CAAA,CAAgB5c,CAAhB,CAA0BuY,CAA1B,CAAkCyD,CAAA,CAAUG,CAAV,CAAA75B,KAAlC,CAA8D,EAA9D,CAAkEmvB,CAAlE,CACAuK,EAAA,CAAUG,CAAV,CAAA,CAAwB9hC,CAFa,CADvB,CAPgB,CAAlC,IAYO,CAEL,IAAIqiC,EAAMb,CAAA,EAEVa,EAAAG,KAAA,CAASr2B,CAAT,CAAiB0Y,CAAjB,CAAsB,CAAA,CAAtB,CACA3mB,EAAA,CAAQo+B,CAAR,CAAiB,QAAQ,CAACr9B,CAAD,CAAQZ,CAAR,CAAa,CAChCgC,CAAA,CAAUpB,CAAV,CAAJ,EACIojC,CAAAI,iBAAA,CAAqBpkC,CAArB,CAA0BY,CAA1B,CAFgC,CAAtC,CAMAojC,EAAAK,OAAA,CAAaC,QAAsB,EAAG,CACpC,IAAI1C,EAAaoC,CAAApC,WAAbA,EAA+B,EAAnC,CAIIjC,EAAY,UAAD,EAAeqE,EAAf,CAAsBA,CAAArE,SAAtB,CAAqCqE,CAAAO,aAJpD,CAOI1E,EAAwB,IAAf,GAAAmE,CAAAnE,OAAA,CAAsB,GAAtB,CAA4BmE,CAAAnE,OAK1B,EAAf,GAAIA,CAAJ,GACEA,CADF,CACWF,CAAA,CAAW,GAAX,CAA6C,MAA5B,EAAA6E,EAAA,CAAWhe,CAAX,CAAAie,SAAA,CAAqC,GAArC,CAA2C,CADvE,CAIAP,EAAA,CAAgB5c,CAAhB,CACIuY,CADJ,CAEIF,CAFJ,CAGIqE,CAAAU,sBAAA,EAHJ,CAII9C,CAJJ,CAjBoC,CAwBlCT,EAAAA,CAAeA,QAAQ,EAAG,CAG5B+C,CAAA,CAAgB5c,CAAhB,CAA2B,EAA3B,CAA8B,IAA9B,CAAoC,IAApC,CAA0C,EAA1C,CAH4B,CAM9B0c,EAAAW,QAAA,CAAcxD,CACd6C,EAAAY,QAAA,CAAczD,CAEVP,EAAJ,GACEoD,CAAApD,gBADF;AACwB,CAAA,CADxB,CAIA,IAAIiC,CAAJ,CACE,GAAI,CACFmB,CAAAnB,aAAA,CAAmBA,CADjB,CAEF,MAAOl8B,CAAP,CAAU,CAQV,GAAqB,MAArB,GAAIk8B,CAAJ,CACE,KAAMl8B,EAAN,CATQ,CAcdq9B,CAAAa,KAAA,CAASjS,CAAT,EAAiB,IAAjB,CAjEK,CAoEP,GAAc,CAAd,CAAIgQ,CAAJ,CACE,IAAIvZ,EAAYka,CAAA,CAAcO,CAAd,CAA8BlB,CAA9B,CADlB,KAEyBA,EAAlB,EAv7RK3iC,CAAA,CAu7Ra2iC,CAv7RFzK,KAAX,CAu7RL,EACLyK,CAAAzK,KAAA,CAAa2L,CAAb,CAvF0F,CAFT,CAwLvF7tB,QAASA,GAAoB,EAAG,CAC9B,IAAIomB,EAAc,IAAlB,CACIC,EAAY,IAWhB,KAAAD,YAAA,CAAmByI,QAAQ,CAAClkC,CAAD,CAAQ,CACjC,MAAIA,EAAJ,EACEy7B,CACO,CADOz7B,CACP,CAAA,IAFT,EAISy7B,CALwB,CAkBnC,KAAAC,UAAA,CAAiByI,QAAQ,CAACnkC,CAAD,CAAQ,CAC/B,MAAIA,EAAJ,EACE07B,CACO,CADK17B,CACL,CAAA,IAFT,EAIS07B,CALsB,CAUjC,KAAAld,KAAA,CAAY,CAAC,QAAD,CAAW,mBAAX,CAAgC,MAAhC,CAAwC,QAAQ,CAACxI,CAAD,CAAShB,CAAT,CAA4BwB,CAA5B,CAAkC,CAM5F4tB,QAASA,EAAM,CAACC,CAAD,CAAK,CAClB,MAAO,QAAP,CAAkBA,CADA,CAkGpBjvB,QAASA,EAAY,CAAC+iB,CAAD,CAAOmM,CAAP,CAA2BC,CAA3B,CAA2CpL,CAA3C,CAAyD,CAgH5EqL,QAASA,EAAY,CAACrM,CAAD,CAAO,CAC1B,MAAOA,EAAA/xB,QAAA,CAAaq+B,CAAb,CAAiChJ,CAAjC,CAAAr1B,QAAA,CACGs+B,CADH,CACqBhJ,CADrB,CADmB,CAK5BiJ,QAASA,EAAyB,CAAC3kC,CAAD,CAAQ,CACxC,GAAI,CACeA,IAAAA,EAAAA,CA/DjB,EAAA,CAAOukC,CAAA,CACL/tB,CAAAouB,WAAA,CAAgBL,CAAhB,CAAgCvkC,CAAhC,CADK,CAELwW,CAAAquB,QAAA,CAAa7kC,CAAb,CA8DK,KAAA,CAAA,IAAAm5B,CAAA,EAAiB,CAAA/3B,CAAA,CAAUpB,CAAV,CAAjB,CAAoCA,CAAAA;AAAAA,CAApC,KA1DP,IAAa,IAAb,EAAIA,CAAJ,CACE,CAAA,CAAO,EADT,KAAA,CAGA,OAAQ,MAAOA,EAAf,EACE,KAAK,QAAL,CACE,KACF,MAAK,QAAL,CACEA,CAAA,CAAQ,EAAR,CAAaA,CACb,MACF,SACEA,CAAA,CAAQoF,EAAA,CAAOpF,CAAP,CAPZ,CAUA,CAAA,CAAOA,CAbP,CA0DA,MAAO,EAFL,CAGF,MAAO4hB,CAAP,CAAY,CACRkjB,CAEJ,CAFaC,EAAA,CAAmB,QAAnB,CAA4D5M,CAA5D,CACXvW,CAAApgB,SAAA,EADW,CAEb,CAAAwT,CAAA,CAAkB8vB,CAAlB,CAHY,CAJ0B,CApH1C3L,CAAA,CAAe,CAAEA,CAAAA,CAWjB,KAZ4E,IAExEn0B,CAFwE,CAGxEggC,CAHwE,CAIxEpiC,EAAQ,CAJgE,CAKxEg2B,EAAc,EAL0D,CAMxEqM,EAAW,EAN6D,CAOxEC,EAAa/M,CAAAv5B,OAP2D,CASxE4F,EAAS,EAT+D,CAUxE2gC,EAAsB,EAE1B,CAAOviC,CAAP,CAAesiC,CAAf,CAAA,CACE,GAAyD,EAAzD,GAAMlgC,CAAN,CAAmBmzB,CAAAt1B,QAAA,CAAa44B,CAAb,CAA0B74B,CAA1B,CAAnB,GAC+E,EAD/E,GACOoiC,CADP,CACkB7M,CAAAt1B,QAAA,CAAa64B,CAAb,CAAwB12B,CAAxB,CAAqCogC,CAArC,CADlB,EAEMxiC,CAQJ,GARcoC,CAQd,EAPER,CAAAnB,KAAA,CAAYmhC,CAAA,CAAarM,CAAA9P,UAAA,CAAezlB,CAAf,CAAsBoC,CAAtB,CAAb,CAAZ,CAOF,CALAqgC,CAKA,CALMlN,CAAA9P,UAAA,CAAerjB,CAAf,CAA4BogC,CAA5B,CAA+CJ,CAA/C,CAKN,CAJApM,CAAAv1B,KAAA,CAAiBgiC,CAAjB,CAIA,CAHAJ,CAAA5hC,KAAA,CAAc2S,CAAA,CAAOqvB,CAAP,CAAYV,CAAZ,CAAd,CAGA,CAFA/hC,CAEA,CAFQoiC,CAER,CAFmBM,CAEnB,CADAH,CAAA9hC,KAAA,CAAyBmB,CAAA5F,OAAzB,CACA,CAAA4F,CAAAnB,KAAA,CAAY,EAAZ,CAVF,KAWO,CAEDT,CAAJ,GAAcsiC,CAAd,EACE1gC,CAAAnB,KAAA,CAAYmhC,CAAA,CAAarM,CAAA9P,UAAA,CAAezlB,CAAf,CAAb,CAAZ,CAEF,MALK,CAeT,GAAI2hC,CAAJ,EAAsC,CAAtC,CAAsB//B,CAAA5F,OAAtB,CACI,KAAMmmC,GAAA,CAAmB,UAAnB,CAGsD5M,CAHtD,CAAN,CAMJ,GAAKmM,CAAAA,CAAL,EAA2B1L,CAAAh6B,OAA3B,CAA+C,CAC7C,IAAI2mC,EAAUA,QAAQ,CAACrJ,CAAD,CAAS,CAC7B,IAD6B,IACpBr8B;AAAI,CADgB,CACbW,EAAKo4B,CAAAh6B,OAArB,CAAyCiB,CAAzC,CAA6CW,CAA7C,CAAiDX,CAAA,EAAjD,CAAsD,CACpD,GAAIs5B,CAAJ,EAAoBh4B,CAAA,CAAY+6B,CAAA,CAAOr8B,CAAP,CAAZ,CAApB,CAA4C,MAC5C2E,EAAA,CAAO2gC,CAAA,CAAoBtlC,CAApB,CAAP,CAAA,CAAiCq8B,CAAA,CAAOr8B,CAAP,CAFmB,CAItD,MAAO2E,EAAAsC,KAAA,CAAY,EAAZ,CALsB,CA+B/B,OAAOxG,EAAA,CAAOklC,QAAwB,CAACrmC,CAAD,CAAU,CAC5C,IAAIU,EAAI,CAAR,CACIW,EAAKo4B,CAAAh6B,OADT,CAEIs9B,EAAahZ,KAAJ,CAAU1iB,CAAV,CAEb,IAAI,CACF,IAAA,CAAOX,CAAP,CAAWW,CAAX,CAAeX,CAAA,EAAf,CACEq8B,CAAA,CAAOr8B,CAAP,CAAA,CAAYolC,CAAA,CAASplC,CAAT,CAAA,CAAYV,CAAZ,CAGd,OAAOomC,EAAA,CAAQrJ,CAAR,CALL,CAMF,MAAOta,CAAP,CAAY,CACRkjB,CAEJ,CAFaC,EAAA,CAAmB,QAAnB,CAA4D5M,CAA5D,CACTvW,CAAApgB,SAAA,EADS,CAEb,CAAAwT,CAAA,CAAkB8vB,CAAlB,CAHY,CAX8B,CAAzC,CAiBF,CAEHO,IAAKlN,CAFF,CAGHS,YAAaA,CAHV,CAIH6M,gBAAiBA,QAAQ,CAAC58B,CAAD,CAAQkd,CAAR,CAAkB2f,CAAlB,CAAkC,CACzD,IAAIjS,CACJ,OAAO5qB,EAAA88B,YAAA,CAAkBV,CAAlB,CAA4BW,QAA6B,CAAC1J,CAAD,CAAS2J,CAAT,CAAoB,CAClF,IAAIC,EAAYP,CAAA,CAAQrJ,CAAR,CACZ78B,EAAA,CAAW0mB,CAAX,CAAJ,EACEA,CAAAxmB,KAAA,CAAc,IAAd,CAAoBumC,CAApB,CAA+B5J,CAAA,GAAW2J,CAAX,CAAuBpS,CAAvB,CAAmCqS,CAAlE,CAA6Ej9B,CAA7E,CAEF4qB,EAAA,CAAYqS,CALsE,CAA7E,CAMJJ,CANI,CAFkD,CAJxD,CAjBE,CAhCsC,CA9C6B,CAxGc,IACxFN,EAAoB3J,CAAA78B,OADoE,CAExF0mC,EAAkB5J,CAAA98B,OAFsE,CAGxF6lC,EAAqB,IAAIhhC,MAAJ,CAAWg4B,CAAAr1B,QAAA,CAAoB,IAApB,CAA0Bg+B,CAA1B,CAAX,CAA8C,GAA9C,CAHmE,CAIxFM,EAAmB,IAAIjhC,MAAJ,CAAWi4B,CAAAt1B,QAAA,CAAkB,IAAlB,CAAwBg+B,CAAxB,CAAX,CAA4C,GAA5C,CAiPvBhvB,EAAAqmB,YAAA,CAA2BsK,QAAQ,EAAG,CACpC,MAAOtK,EAD6B,CAgBtCrmB,EAAAsmB,UAAA;AAAyBsK,QAAQ,EAAG,CAClC,MAAOtK,EAD2B,CAIpC,OAAOtmB,EAzQqF,CAAlF,CAzCkB,CAsThCG,QAASA,GAAiB,EAAG,CAC3B,IAAAiJ,KAAA,CAAY,CAAC,YAAD,CAAe,SAAf,CAA0B,IAA1B,CAAgC,KAAhC,CACP,QAAQ,CAACtI,CAAD,CAAeoB,CAAf,CAA0BlB,CAA1B,CAAgCE,CAAhC,CAAqC,CAgIhDyO,QAASA,EAAQ,CAACjgB,CAAD,CAAK0jB,CAAL,CAAYyd,CAAZ,CAAmBC,CAAnB,CAAgC,CAAA,IAC3CC,EAAc7uB,CAAA6uB,YAD6B,CAE3CC,EAAgB9uB,CAAA8uB,cAF2B,CAG3CC,EAAY,CAH+B,CAI3CC,EAAallC,CAAA,CAAU8kC,CAAV,CAAbI,EAAuC,CAACJ,CAJG,CAK3C7E,EAAW/Y,CAACge,CAAA,CAAYhwB,CAAZ,CAAkBF,CAAnBkS,OAAA,EALgC,CAM3C4X,EAAUmB,CAAAnB,QAEd+F,EAAA,CAAQ7kC,CAAA,CAAU6kC,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,CAEnC/F,EAAA3I,KAAA,CAAa,IAAb,CAAmB,IAAnB,CAAyBzyB,CAAzB,CAEAo7B,EAAAqG,aAAA,CAAuBJ,CAAA,CAAYK,QAAa,EAAG,CACjDnF,CAAAoF,OAAA,CAAgBJ,CAAA,EAAhB,CAEY,EAAZ,CAAIJ,CAAJ,EAAiBI,CAAjB,EAA8BJ,CAA9B,GACE5E,CAAAC,QAAA,CAAiB+E,CAAjB,CAEA,CADAD,CAAA,CAAclG,CAAAqG,aAAd,CACA,CAAA,OAAOG,CAAA,CAAUxG,CAAAqG,aAAV,CAHT,CAMKD,EAAL,EAAgBpwB,CAAAnN,OAAA,EATiC,CAA5B,CAWpByf,CAXoB,CAavBke,EAAA,CAAUxG,CAAAqG,aAAV,CAAA,CAAkClF,CAElC,OAAOnB,EA3BwC,CA/HjD,IAAIwG,EAAY,EAwKhB3hB,EAAA2D,OAAA,CAAkBie,QAAQ,CAACzG,CAAD,CAAU,CAClC,MAAIA,EAAJ,EAAeA,CAAAqG,aAAf,GAAuCG,EAAvC,EACEA,CAAA,CAAUxG,CAAAqG,aAAV,CAAArH,OAAA,CAAuC,UAAvC,CAGO,CAFP5nB,CAAA8uB,cAAA,CAAsBlG,CAAAqG,aAAtB,CAEO;AADP,OAAOG,CAAA,CAAUxG,CAAAqG,aAAV,CACA,CAAA,CAAA,CAJT,EAMO,CAAA,CAP2B,CAUpC,OAAOxhB,EAnLyC,CADtC,CADe,CAmM7BtW,QAASA,GAAe,EAAG,CACzB,IAAA+P,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO,CACLmL,GAAI,OADC,CAGLgd,eAAgB,CACdC,YAAa,GADC,CAEdC,UAAW,GAFG,CAGdC,SAAU,CACR,CACEC,OAAQ,CADV,CAEEC,QAAS,CAFX,CAGEC,QAAS,CAHX,CAIEC,OAAQ,EAJV,CAKEC,OAAQ,EALV,CAMEC,OAAQ,GANV,CAOEC,OAAQ,EAPV,CAQEC,MAAO,CART,CASEC,OAAQ,CATV,CADQ,CAWN,CACAR,OAAQ,CADR,CAEAC,QAAS,CAFT,CAGAC,QAAS,CAHT,CAIAC,OAAQ,QAJR,CAKAC,OAAQ,EALR,CAMAC,OAAQ,SANR,CAOAC,OAAQ,GAPR,CAQAC,MAAO,CARP,CASAC,OAAQ,CATR,CAXM,CAHI,CA0BdC,aAAc,GA1BA,CAHX,CAgCLC,iBAAkB,CAChBC,MACI,uFAAA,MAAA,CAAA,GAAA,CAFY,CAIhBC,WAAa,iDAAA,MAAA,CAAA,GAAA,CAJG;AAKhBC,IAAK,0DAAA,MAAA,CAAA,GAAA,CALW,CAMhBC,SAAU,6BAAA,MAAA,CAAA,GAAA,CANM,CAOhBC,MAAO,CAAC,IAAD,CAAM,IAAN,CAPS,CAQhBC,OAAQ,oBARQ,CAShB,QAAS,eATO,CAUhBC,SAAU,iBAVM,CAWhBC,SAAU,WAXM,CAYhBC,WAAY,UAZI,CAahBC,UAAW,QAbK,CAchBC,WAAY,WAdI,CAehBC,UAAW,QAfK,CAhCb,CAkDLC,UAAWA,QAAQ,CAACC,CAAD,CAAM,CACvB,MAAY,EAAZ,GAAIA,CAAJ,CACS,KADT,CAGO,OAJgB,CAlDpB,CADc,CADE,CAyE3BC,QAASA,GAAU,CAAC18B,CAAD,CAAO,CACpB28B,CAAAA,CAAW38B,CAAAzJ,MAAA,CAAW,GAAX,CAGf,KAHA,IACIzC,EAAI6oC,CAAA9pC,OAER,CAAOiB,CAAA,EAAP,CAAA,CACE6oC,CAAA,CAAS7oC,CAAT,CAAA,CAAckH,EAAA,CAAiB2hC,CAAA,CAAS7oC,CAAT,CAAjB,CAGhB,OAAO6oC,EAAA5hC,KAAA,CAAc,GAAd,CARiB,CAW1B6hC,QAASA,GAAgB,CAACC,CAAD,CAAcC,CAAd,CAA2B,CAClD,IAAIC,EAAYlF,EAAA,CAAWgF,CAAX,CAEhBC,EAAAE,WAAA;AAAyBD,CAAAjF,SACzBgF,EAAAG,OAAA,CAAqBF,CAAAG,SACrBJ,EAAAK,OAAA,CAAqBtoC,CAAA,CAAIkoC,CAAAK,KAAJ,CAArB,EAA4CC,EAAA,CAAcN,CAAAjF,SAAd,CAA5C,EAAiF,IAL/B,CASpDwF,QAASA,GAAW,CAACC,CAAD,CAAcT,CAAd,CAA2B,CAC7C,IAAIU,EAAsC,GAAtCA,GAAYD,CAAArlC,OAAA,CAAmB,CAAnB,CACZslC,EAAJ,GACED,CADF,CACgB,GADhB,CACsBA,CADtB,CAGA,KAAI5lC,EAAQkgC,EAAA,CAAW0F,CAAX,CACZT,EAAAW,OAAA,CAAqBljC,kBAAA,CAAmBijC,CAAA,EAAyC,GAAzC,GAAY7lC,CAAA+lC,SAAAxlC,OAAA,CAAsB,CAAtB,CAAZ,CACpCP,CAAA+lC,SAAAphB,UAAA,CAAyB,CAAzB,CADoC,CACN3kB,CAAA+lC,SADb,CAErBZ,EAAAa,SAAA,CAAuBnjC,EAAA,CAAc7C,CAAAimC,OAAd,CACvBd,EAAAe,OAAA,CAAqBtjC,kBAAA,CAAmB5C,CAAAqgB,KAAnB,CAGjB8kB,EAAAW,OAAJ,EAA0D,GAA1D,EAA0BX,CAAAW,OAAAvlC,OAAA,CAA0B,CAA1B,CAA1B,GACE4kC,CAAAW,OADF,CACuB,GADvB,CAC6BX,CAAAW,OAD7B,CAZ6C,CAyB/CK,QAASA,GAAU,CAACC,CAAD,CAAQC,CAAR,CAAe,CAChC,GAA6B,CAA7B,GAAIA,CAAAlnC,QAAA,CAAcinC,CAAd,CAAJ,CACE,MAAOC,EAAA3iB,OAAA,CAAa0iB,CAAAlrC,OAAb,CAFuB,CAOlCuoB,QAASA,GAAS,CAACvB,CAAD,CAAM,CACtB,IAAIhjB,EAAQgjB,CAAA/iB,QAAA,CAAY,GAAZ,CACZ,OAAiB,EAAV,EAAAD,CAAA,CAAcgjB,CAAd,CAAoBA,CAAAwB,OAAA,CAAW,CAAX,CAAcxkB,CAAd,CAFL,CAKxBonC,QAASA,GAAa,CAACpkB,CAAD,CAAM,CAC1B,MAAOA,EAAAxf,QAAA,CAAY,UAAZ;AAAwB,IAAxB,CADmB,CAK5B6jC,QAASA,GAAS,CAACrkB,CAAD,CAAM,CACtB,MAAOA,EAAAwB,OAAA,CAAW,CAAX,CAAcD,EAAA,CAAUvB,CAAV,CAAAskB,YAAA,CAA2B,GAA3B,CAAd,CAAgD,CAAhD,CADe,CAkBxBC,QAASA,GAAgB,CAACC,CAAD,CAAUC,CAAV,CAAsB,CAC7C,IAAAC,QAAA,CAAe,CAAA,CACfD,EAAA,CAAaA,CAAb,EAA2B,EAC3B,KAAIE,EAAgBN,EAAA,CAAUG,CAAV,CACpBzB,GAAA,CAAiByB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA,CAAeC,QAAQ,CAAC7kB,CAAD,CAAM,CAC3B,IAAI8kB,EAAUb,EAAA,CAAWU,CAAX,CAA0B3kB,CAA1B,CACd,IAAK,CAAA7mB,CAAA,CAAS2rC,CAAT,CAAL,CACE,KAAMC,GAAA,CAAgB,UAAhB,CAA6E/kB,CAA7E,CACF2kB,CADE,CAAN,CAIFlB,EAAA,CAAYqB,CAAZ,CAAqB,IAArB,CAEK,KAAAlB,OAAL,GACE,IAAAA,OADF,CACgB,GADhB,CAIA,KAAAoB,UAAA,EAb2B,CAoB7B,KAAAA,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBlB,EAASjjC,EAAA,CAAW,IAAAgjC,SAAX,CADa,CAEtB3lB,EAAO,IAAA6lB,OAAA,CAAc,GAAd,CAAoB7iC,EAAA,CAAiB,IAAA6iC,OAAjB,CAApB,CAAoD,EAE/D,KAAAkB,MAAA,CAAarC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsE5lB,CACtE,KAAAgnB,SAAA,CAAgBR,CAAhB,CAAgC,IAAAO,MAAA1jB,OAAA,CAAkB,CAAlB,CALN,CAQ5B,KAAA4jB,eAAA,CAAsBC,QAAQ,CAACrlB,CAAD,CAAMslB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAAnnB,KAAA,CAAUmnB,CAAAvmC,MAAA,CAAc,CAAd,CAAV,CACO;AAAA,CAAA,CALkC,KAOvCwmC,CAPuC,CAO/BC,CAGZ,EAAKD,CAAL,CAActB,EAAA,CAAWO,CAAX,CAAoBxkB,CAApB,CAAd,IAA4CrnB,CAA5C,EACE6sC,CAEE,CAFWD,CAEX,CAAAE,CAAA,CADF,CAAKF,CAAL,CAActB,EAAA,CAAWQ,CAAX,CAAuBc,CAAvB,CAAd,IAAkD5sC,CAAlD,CACiBgsC,CADjB,EACkCV,EAAA,CAAW,GAAX,CAAgBsB,CAAhB,CADlC,EAC6DA,CAD7D,EAGiBf,CAHjB,CAG2BgB,CAL7B,EAOO,CAAKD,CAAL,CAActB,EAAA,CAAWU,CAAX,CAA0B3kB,CAA1B,CAAd,IAAkDrnB,CAAlD,CACL8sC,CADK,CACUd,CADV,CAC0BY,CAD1B,CAEIZ,CAFJ,EAEqB3kB,CAFrB,CAE2B,GAF3B,GAGLylB,CAHK,CAGUd,CAHV,CAKHc,EAAJ,EACE,IAAAb,QAAA,CAAaa,CAAb,CAEF,OAAO,CAAEA,CAAAA,CAzBkC,CAxCA,CA+E/CC,QAASA,GAAmB,CAAClB,CAAD,CAAUmB,CAAV,CAAsB,CAChD,IAAIhB,EAAgBN,EAAA,CAAUG,CAAV,CAEpBzB,GAAA,CAAiByB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA,CAAeC,QAAQ,CAAC7kB,CAAD,CAAM,CACvB4lB,CAAAA,CAAiB3B,EAAA,CAAWO,CAAX,CAAoBxkB,CAApB,CAAjB4lB,EAA6C3B,EAAA,CAAWU,CAAX,CAA0B3kB,CAA1B,CACjD,KAAI6lB,CAE6B,IAAjC,GAAID,CAAAvnC,OAAA,CAAsB,CAAtB,CAAJ,EAIEwnC,CACA,CADiB5B,EAAA,CAAW0B,CAAX,CAAuBC,CAAvB,CACjB,CAAIrqC,CAAA,CAAYsqC,CAAZ,CAAJ,GAEEA,CAFF,CAEmBD,CAFnB,CALF,EAcEC,CAdF,CAcmB,IAAAnB,QAAA,CAAekB,CAAf,CAAgC,EAGnDnC,GAAA,CAAYoC,CAAZ,CAA4B,IAA5B,CAEqCjC,EAAAA,CAAAA,IAAAA,OAoBnC,KAAIkC,EAAqB,iBAKC,EAA1B,GAAI9lB,CAAA/iB,QAAA,CAzB4DunC,CAyB5D,CAAJ,GACExkB,CADF,CACQA,CAAAxf,QAAA,CA1BwDgkC,CA0BxD,CAAkB,EAAlB,CADR,CAKIsB,EAAA5yB,KAAA,CAAwB8M,CAAxB,CAAJ,GAKA,CALA,CAKO,CADP+lB,CACO,CADiBD,CAAA5yB,KAAA,CAAwB/M,CAAxB,CACjB,EAAwB4/B,CAAA,CAAsB,CAAtB,CAAxB,CAAmD5/B,CAL1D,CA9BF,KAAAy9B,OAAA,CAAc,CAEd,KAAAoB,UAAA,EAzB2B,CAkE7B,KAAAA,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBlB,EAASjjC,EAAA,CAAW,IAAAgjC,SAAX,CADa,CAEtB3lB,EAAO,IAAA6lB,OAAA;AAAc,GAAd,CAAoB7iC,EAAA,CAAiB,IAAA6iC,OAAjB,CAApB,CAAoD,EAE/D,KAAAkB,MAAA,CAAarC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsE5lB,CACtE,KAAAgnB,SAAA,CAAgBX,CAAhB,EAA2B,IAAAU,MAAA,CAAaS,CAAb,CAA0B,IAAAT,MAA1B,CAAuC,EAAlE,CAL0B,CAQ5B,KAAAE,eAAA,CAAsBC,QAAQ,CAACrlB,CAAD,CAAMslB,CAAN,CAAe,CAC3C,MAAI/jB,GAAA,CAAUijB,CAAV,CAAJ,EAA0BjjB,EAAA,CAAUvB,CAAV,CAA1B,EACE,IAAA4kB,QAAA,CAAa5kB,CAAb,CACO,CAAA,CAAA,CAFT,EAIO,CAAA,CALoC,CArFG,CAwGlDgmB,QAASA,GAA0B,CAACxB,CAAD,CAAUmB,CAAV,CAAsB,CACvD,IAAAjB,QAAA,CAAe,CAAA,CACfgB,GAAArmC,MAAA,CAA0B,IAA1B,CAAgCxE,SAAhC,CAEA,KAAI8pC,EAAgBN,EAAA,CAAUG,CAAV,CAEpB,KAAAY,eAAA,CAAsBC,QAAQ,CAACrlB,CAAD,CAAMslB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAAnnB,KAAA,CAAUmnB,CAAAvmC,MAAA,CAAc,CAAd,CAAV,CACO,CAAA,CAAA,CAGT,KAAI0mC,CAAJ,CACIF,CAEAf,EAAJ,EAAejjB,EAAA,CAAUvB,CAAV,CAAf,CACEylB,CADF,CACiBzlB,CADjB,CAEO,CAAKulB,CAAL,CAActB,EAAA,CAAWU,CAAX,CAA0B3kB,CAA1B,CAAd,EACLylB,CADK,CACUjB,CADV,CACoBmB,CADpB,CACiCJ,CADjC,CAEIZ,CAFJ,GAEsB3kB,CAFtB,CAE4B,GAF5B,GAGLylB,CAHK,CAGUd,CAHV,CAKHc,EAAJ,EACE,IAAAb,QAAA,CAAaa,CAAb,CAEF,OAAO,CAAEA,CAAAA,CArBkC,CAwB7C,KAAAT,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBlB,EAASjjC,EAAA,CAAW,IAAAgjC,SAAX,CADa,CAEtB3lB,EAAO,IAAA6lB,OAAA,CAAc,GAAd,CAAoB7iC,EAAA,CAAiB,IAAA6iC,OAAjB,CAApB;AAAoD,EAE/D,KAAAkB,MAAA,CAAarC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsE5lB,CAEtE,KAAAgnB,SAAA,CAAgBX,CAAhB,CAA0BmB,CAA1B,CAAuC,IAAAT,MANb,CA9B2B,CAoWzDe,QAASA,GAAc,CAACC,CAAD,CAAW,CAChC,MAAO,SAAQ,EAAG,CAChB,MAAO,KAAA,CAAKA,CAAL,CADS,CADc,CAOlCC,QAASA,GAAoB,CAACD,CAAD,CAAWE,CAAX,CAAuB,CAClD,MAAO,SAAQ,CAAChsC,CAAD,CAAQ,CACrB,GAAImB,CAAA,CAAYnB,CAAZ,CAAJ,CACE,MAAO,KAAA,CAAK8rC,CAAL,CAET,KAAA,CAAKA,CAAL,CAAA,CAAiBE,CAAA,CAAWhsC,CAAX,CACjB,KAAA4qC,UAAA,EAEA,OAAO,KAPc,CAD2B,CA6CpD/0B,QAASA,GAAiB,EAAG,CAAA,IACvB01B,EAAa,EADU,CAEvBU,EAAY,CACVxf,QAAS,CAAA,CADC,CAEVyf,YAAa,CAAA,CAFH,CAGVC,aAAc,CAAA,CAHJ,CAahB,KAAAZ,WAAA,CAAkBa,QAAQ,CAAC1kC,CAAD,CAAS,CACjC,MAAItG,EAAA,CAAUsG,CAAV,CAAJ,EACE6jC,CACO,CADM7jC,CACN,CAAA,IAFT,EAIS6jC,CALwB,CA4BnC,KAAAU,UAAA,CAAiBI,QAAQ,CAACrhB,CAAD,CAAO,CAC9B,MAAInpB,GAAA,CAAUmpB,CAAV,CAAJ,EACEihB,CAAAxf,QACO,CADazB,CACb,CAAA,IAFT,EAGW3pB,CAAA,CAAS2pB,CAAT,CAAJ,EAEDnpB,EAAA,CAAUmpB,CAAAyB,QAAV,CAYG,GAXLwf,CAAAxf,QAWK,CAXezB,CAAAyB,QAWf,EARH5qB,EAAA,CAAUmpB,CAAAkhB,YAAV,CAQG,GAPLD,CAAAC,YAOK,CAPmBlhB,CAAAkhB,YAOnB,EAJHrqC,EAAA,CAAUmpB,CAAAmhB,aAAV,CAIG;CAHLF,CAAAE,aAGK,CAHoBnhB,CAAAmhB,aAGpB,EAAA,IAdF,EAgBEF,CApBqB,CA+DhC,KAAAztB,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,UAA3B,CAAuC,cAAvC,CACR,QAAQ,CAACtI,CAAD,CAAa1B,CAAb,CAAuBoC,CAAvB,CAAiCsX,CAAjC,CAA+C,CAyBzDoe,QAASA,EAAyB,CAAC1mB,CAAD,CAAMxf,CAAN,CAAeqf,CAAf,CAAsB,CACtD,IAAI8mB,EAAS32B,CAAAgQ,IAAA,EAAb,CACI4mB,EAAW52B,CAAA62B,QACf,IAAI,CACFj4B,CAAAoR,IAAA,CAAaA,CAAb,CAAkBxf,CAAlB,CAA2Bqf,CAA3B,CAKA,CAAA7P,CAAA62B,QAAA,CAAoBj4B,CAAAiR,MAAA,EANlB,CAOF,MAAO1f,CAAP,CAAU,CAKV,KAHA6P,EAAAgQ,IAAA,CAAc2mB,CAAd,CAGMxmC,CAFN6P,CAAA62B,QAEM1mC,CAFcymC,CAEdzmC,CAAAA,CAAN,CALU,CAV0C,CA8IxD2mC,QAASA,EAAmB,CAACH,CAAD,CAASC,CAAT,CAAmB,CAC7Ct2B,CAAAy2B,WAAA,CAAsB,wBAAtB,CAAgD/2B,CAAAg3B,OAAA,EAAhD,CAAoEL,CAApE,CACE32B,CAAA62B,QADF,CACqBD,CADrB,CAD6C,CAvKU,IACrD52B,CADqD,CAErDi3B,CACAnlB,EAAAA,CAAWlT,CAAAkT,SAAA,EAH0C,KAIrDolB,EAAat4B,CAAAoR,IAAA,EAJwC,CAKrDwkB,CAEJ,IAAI6B,CAAAxf,QAAJ,CAAuB,CACrB,GAAK/E,CAAAA,CAAL,EAAiBukB,CAAAC,YAAjB,CACE,KAAMvB,GAAA,CAAgB,QAAhB,CAAN,CAGFP,CAAA,CAAqB0C,CAltBlBzkB,UAAA,CAAc,CAAd,CAktBkBykB,CAltBDjqC,QAAA,CAAY,GAAZ,CAktBCiqC,CAltBgBjqC,QAAA,CAAY,IAAZ,CAAjB,CAAqC,CAArC,CAAjB,CAktBH,EAAoC6kB,CAApC,EAAgD,GAAhD,CACAmlB,EAAA,CAAej2B,CAAA4O,QAAA,CAAmB2kB,EAAnB,CAAsCyB,EANhC,CAAvB,IAQExB,EACA,CADUjjB,EAAA,CAAU2lB,CAAV,CACV;AAAAD,CAAA,CAAevB,EAEjB11B,EAAA,CAAY,IAAIi3B,CAAJ,CAAiBzC,CAAjB,CAA0B,GAA1B,CAAgCmB,CAAhC,CACZ31B,EAAAo1B,eAAA,CAAyB8B,CAAzB,CAAqCA,CAArC,CAEAl3B,EAAA62B,QAAA,CAAoBj4B,CAAAiR,MAAA,EAEpB,KAAIsnB,EAAoB,2BAqBxB7e,EAAA1jB,GAAA,CAAgB,OAAhB,CAAyB,QAAQ,CAACmT,CAAD,CAAQ,CAIvC,GAAKsuB,CAAAE,aAAL,EAA+Ba,CAAArvB,CAAAqvB,QAA/B,EAAgDC,CAAAtvB,CAAAsvB,QAAhD,EAAgF,CAAhF,EAAiEtvB,CAAAuvB,MAAjE,CAAA,CAKA,IAHA,IAAIlpB,EAAMpe,CAAA,CAAO+X,CAAAwvB,OAAP,CAGV,CAA6B,GAA7B,GAAO5qC,EAAA,CAAUyhB,CAAA,CAAI,CAAJ,CAAV,CAAP,CAAA,CAEE,GAAIA,CAAA,CAAI,CAAJ,CAAJ,GAAekK,CAAA,CAAa,CAAb,CAAf,EAAmC,CAAA,CAAClK,CAAD,CAAOA,CAAAnH,OAAA,EAAP,EAAqB,CAArB,CAAnC,CAA4D,MAG9D,KAAIuwB,EAAUppB,CAAA/hB,KAAA,CAAS,MAAT,CAAd,CAGIipC,EAAUlnB,CAAA9hB,KAAA,CAAS,MAAT,CAAVgpC,EAA8BlnB,CAAA9hB,KAAA,CAAS,YAAT,CAE9Bb,EAAA,CAAS+rC,CAAT,CAAJ,EAAgD,4BAAhD,GAAyBA,CAAA5rC,SAAA,EAAzB,GAGE4rC,CAHF,CAGYxJ,EAAA,CAAWwJ,CAAAC,QAAX,CAAAxmB,KAHZ,CAOIkmB,EAAA5jC,KAAA,CAAuBikC,CAAvB,CAAJ,EAEIA,CAAAA,CAFJ,EAEgBppB,CAAA9hB,KAAA,CAAS,QAAT,CAFhB,EAEuCyb,CAAAC,mBAAA,EAFvC,EAGM,CAAAhI,CAAAo1B,eAAA,CAAyBoC,CAAzB,CAAkClC,CAAlC,CAHN,GAOIvtB,CAAA2vB,eAAA,EAEA,CAAI13B,CAAAg3B,OAAA,EAAJ;AAA0Bp4B,CAAAoR,IAAA,EAA1B,GACE1P,CAAAnN,OAAA,EAEA,CAAA1K,CAAA+K,QAAA,CAAe,0BAAf,CAAA,CAA6C,CAAA,CAH/C,CATJ,CAtBA,CAJuC,CAAzC,CA8CIwM,EAAAg3B,OAAA,EAAJ,EAA0BE,CAA1B,EACEt4B,CAAAoR,IAAA,CAAahQ,CAAAg3B,OAAA,EAAb,CAAiC,CAAA,CAAjC,CAGF,KAAIW,EAAe,CAAA,CAGnB/4B,EAAA+S,YAAA,CAAqB,QAAQ,CAACimB,CAAD,CAASC,CAAT,CAAmB,CAC9Cv3B,CAAAvU,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAI4qC,EAAS32B,CAAAg3B,OAAA,EAAb,CACIJ,EAAW52B,CAAA62B,QADf,CAEI3uB,CAEJlI,EAAA40B,QAAA,CAAkBgD,CAAlB,CACA53B,EAAA62B,QAAA,CAAoBgB,CAEpB3vB,EAAA,CAAmB5H,CAAAy2B,WAAA,CAAsB,sBAAtB,CAA8Ca,CAA9C,CAAsDjB,CAAtD,CACfkB,CADe,CACLjB,CADK,CAAA1uB,iBAKflI,EAAAg3B,OAAA,EAAJ,GAA2BY,CAA3B,GAEI1vB,CAAJ,EACElI,CAAA40B,QAAA,CAAkB+B,CAAlB,CAEA,CADA32B,CAAA62B,QACA,CADoBD,CACpB,CAAAF,CAAA,CAA0BC,CAA1B,CAAkC,CAAA,CAAlC,CAAyCC,CAAzC,CAHF,GAKEe,CACA,CADe,CAAA,CACf,CAAAb,CAAA,CAAoBH,CAApB,CAA4BC,CAA5B,CANF,CAFA,CAb+B,CAAjC,CAwBKt2B,EAAAkrB,QAAL,EAAyBlrB,CAAAw3B,QAAA,EAzBqB,CAAhD,CA6BAx3B,EAAAtU,OAAA,CAAkB+rC,QAAuB,EAAG,CAC1C,IAAIpB,EAASvC,EAAA,CAAcx1B,CAAAoR,IAAA,EAAd,CAAb,CACI4nB,EAASxD,EAAA,CAAcp0B,CAAAg3B,OAAA,EAAd,CADb,CAEIJ,EAAWh4B,CAAAiR,MAAA,EAFf,CAGImoB,EAAiBh4B,CAAAi4B,UAHrB,CAIIC,EAAoBvB,CAApBuB,GAA+BN,CAA/BM,EACDl4B,CAAA00B,QADCwD,EACoBl3B,CAAA4O,QADpBsoB,EACwCtB,CADxCsB,GACqDl4B,CAAA62B,QAEzD;GAAIc,CAAJ,EAAoBO,CAApB,CACEP,CAEA,CAFe,CAAA,CAEf,CAAAr3B,CAAAvU,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAI6rC,EAAS53B,CAAAg3B,OAAA,EAAb,CACI9uB,EAAmB5H,CAAAy2B,WAAA,CAAsB,sBAAtB,CAA8Ca,CAA9C,CAAsDjB,CAAtD,CACnB32B,CAAA62B,QADmB,CACAD,CADA,CAAA1uB,iBAKnBlI,EAAAg3B,OAAA,EAAJ,GAA2BY,CAA3B,GAEI1vB,CAAJ,EACElI,CAAA40B,QAAA,CAAkB+B,CAAlB,CACA,CAAA32B,CAAA62B,QAAA,CAAoBD,CAFtB,GAIMsB,CAIJ,EAHExB,CAAA,CAA0BkB,CAA1B,CAAkCI,CAAlC,CAC0BpB,CAAA,GAAa52B,CAAA62B,QAAb,CAAiC,IAAjC,CAAwC72B,CAAA62B,QADlE,CAGF,CAAAC,CAAA,CAAoBH,CAApB,CAA4BC,CAA5B,CARF,CAFA,CAP+B,CAAjC,CAsBF52B,EAAAi4B,UAAA,CAAsB,CAAA,CAjCoB,CAA5C,CAuCA,OAAOj4B,EArKkD,CAD/C,CA1Ge,CAoU7BG,QAASA,GAAY,EAAG,CAAA,IAClBg4B,EAAQ,CAAA,CADU,CAElBlpC,EAAO,IASX,KAAAmpC,aAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAO,CACjC,MAAI9sC,EAAA,CAAU8sC,CAAV,CAAJ,EACEH,CACK,CADGG,CACH,CAAA,IAFP,EAISH,CALwB,CASnC,KAAAvvB,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAAClH,CAAD,CAAU,CAwDxC62B,QAASA,EAAW,CAAC3iC,CAAD,CAAM,CACpBA,CAAJ,WAAmB4iC,MAAnB,GACM5iC,CAAA6V,MAAJ,CACE7V,CADF,CACSA,CAAA4V,QAAD,EAAoD,EAApD,GAAgB5V,CAAA6V,MAAAxe,QAAA,CAAkB2I,CAAA4V,QAAlB,CAAhB,CACA,SADA,CACY5V,CAAA4V,QADZ,CAC0B,IAD1B,CACiC5V,CAAA6V,MADjC,CAEA7V,CAAA6V,MAHR,CAIW7V,CAAA6iC,UAJX;CAKE7iC,CALF,CAKQA,CAAA4V,QALR,CAKsB,IALtB,CAK6B5V,CAAA6iC,UAL7B,CAK6C,GAL7C,CAKmD7iC,CAAAoyB,KALnD,CADF,CASA,OAAOpyB,EAViB,CAa1B8iC,QAASA,EAAU,CAAC9zB,CAAD,CAAO,CAAA,IACpB+zB,EAAUj3B,CAAAi3B,QAAVA,EAA6B,EADT,CAEpBC,EAAQD,CAAA,CAAQ/zB,CAAR,CAARg0B,EAAyBD,CAAAE,IAAzBD,EAAwCztC,CACxC2tC,EAAAA,CAAW,CAAA,CAIf,IAAI,CACFA,CAAA,CAAW,CAAEzpC,CAAAupC,CAAAvpC,MADX,CAEF,MAAOc,CAAP,CAAU,EAEZ,MAAI2oC,EAAJ,CACS,QAAQ,EAAG,CAChB,IAAIpvB,EAAO,EACXrgB,EAAA,CAAQwB,SAAR,CAAmB,QAAQ,CAAC+K,CAAD,CAAM,CAC/B8T,CAAAjc,KAAA,CAAU8qC,CAAA,CAAY3iC,CAAZ,CAAV,CAD+B,CAAjC,CAGA,OAAOgjC,EAAAvpC,MAAA,CAAYspC,CAAZ,CAAqBjvB,CAArB,CALS,CADpB,CAYO,QAAQ,CAACqvB,CAAD,CAAOC,CAAP,CAAa,CAC1BJ,CAAA,CAAMG,CAAN,CAAoB,IAAR,EAAAC,CAAA,CAAe,EAAf,CAAoBA,CAAhC,CAD0B,CAvBJ,CApE1B,MAAO,CAQLH,IAAKH,CAAA,CAAW,KAAX,CARA,CAiBLjkB,KAAMikB,CAAA,CAAW,MAAX,CAjBD,CA0BLnmB,KAAMmmB,CAAA,CAAW,MAAX,CA1BD,CAmCLzpB,MAAOypB,CAAA,CAAW,OAAX,CAnCF,CA4CLP,MAAQ,QAAQ,EAAG,CACjB,IAAIjpC,EAAKwpC,CAAA,CAAW,OAAX,CAET,OAAO,SAAQ,EAAG,CACZP,CAAJ,EACEjpC,CAAAG,MAAA,CAASJ,CAAT,CAAepE,SAAf,CAFc,CAHD,CAAX,EA5CH,CADiC,CAA9B,CApBU,CAiJxBouC,QAASA,GAAoB,CAAClnC,CAAD,CAAOmnC,CAAP,CAAuB,CAClD,GAAa,kBAAb,GAAInnC,CAAJ,EAA4C,kBAA5C,GAAmCA,CAAnC,EACgB,kBADhB,GACOA,CADP,EAC+C,kBAD/C;AACsCA,CADtC,EAEgB,WAFhB,GAEOA,CAFP,CAGE,KAAMonC,GAAA,CAAa,SAAb,CAEmBD,CAFnB,CAAN,CAIF,MAAOnnC,EAR2C,CAWpDqnC,QAASA,GAAgB,CAACtwC,CAAD,CAAMowC,CAAN,CAAsB,CAE7C,GAAIpwC,CAAJ,CAAS,CACP,GAAIA,CAAAkN,YAAJ,GAAwBlN,CAAxB,CACE,KAAMqwC,GAAA,CAAa,QAAb,CAEFD,CAFE,CAAN,CAGK,GACHpwC,CAAAL,OADG,GACYK,CADZ,CAEL,KAAMqwC,GAAA,CAAa,YAAb,CAEFD,CAFE,CAAN,CAGK,GACHpwC,CAAAuwC,SADG,GACcvwC,CAAAsD,SADd,EAC+BtD,CAAAuD,KAD/B,EAC2CvD,CAAAwD,KAD3C,EACuDxD,CAAAyD,KADvD,EAEL,KAAM4sC,GAAA,CAAa,SAAb,CAEFD,CAFE,CAAN,CAGK,GACHpwC,CADG,GACKiB,MADL,CAEL,KAAMovC,GAAA,CAAa,SAAb,CAEFD,CAFE,CAAN,CAjBK,CAsBT,MAAOpwC,EAxBsC,CAqR/CwwC,QAASA,GAAU,CAAC7J,CAAD,CAAM,CACvB,MAAOA,EAAAx3B,SADgB,CAqezBshC,QAASA,GAAM,CAACzwC,CAAD,CAAMqN,CAAN,CAAYqjC,CAAZ,CAAsBC,CAAtB,CAA+B,CAC5CL,EAAA,CAAiBtwC,CAAjB,CAAsB2wC,CAAtB,CAEI7sC,EAAAA,CAAUuJ,CAAAzJ,MAAA,CAAW,GAAX,CACd,KADA,IAA+BlD,CAA/B,CACSS,EAAI,CAAb,CAAiC,CAAjC,CAAgB2C,CAAA5D,OAAhB,CAAoCiB,CAAA,EAApC,CAAyC,CACvCT,CAAA,CAAMyvC,EAAA,CAAqBrsC,CAAAqf,MAAA,EAArB,CAAsCwtB,CAAtC,CACN,KAAIC,EAAcN,EAAA,CAAiBtwC,CAAA,CAAIU,CAAJ,CAAjB,CAA2BiwC,CAA3B,CACbC,EAAL,GACEA,CACA,CADc,EACd,CAAA5wC,CAAA,CAAIU,CAAJ,CAAA,CAAWkwC,CAFb,CAIA5wC,EAAA,CAAM4wC,CAPiC,CASzClwC,CAAA,CAAMyvC,EAAA,CAAqBrsC,CAAAqf,MAAA,EAArB,CAAsCwtB,CAAtC,CACNL,GAAA,CAAiBtwC,CAAA,CAAIU,CAAJ,CAAjB,CAA2BiwC,CAA3B,CAEA,OADA3wC,EAAA,CAAIU,CAAJ,CACA,CADWgwC,CAfiC,CAsB9CG,QAASA,GAA6B,CAAC5nC,CAAD,CAAO,CAC3C,MAAe,aAAf;AAAOA,CADoC,CAS7C6nC,QAASA,GAAe,CAACC,CAAD,CAAOC,CAAP,CAAaC,CAAb,CAAmBC,CAAnB,CAAyBC,CAAzB,CAA+BR,CAA/B,CAAwCS,CAAxC,CAAyD,CAC/EjB,EAAA,CAAqBY,CAArB,CAA2BJ,CAA3B,CACAR,GAAA,CAAqBa,CAArB,CAA2BL,CAA3B,CACAR,GAAA,CAAqBc,CAArB,CAA2BN,CAA3B,CACAR,GAAA,CAAqBe,CAArB,CAA2BP,CAA3B,CACAR,GAAA,CAAqBgB,CAArB,CAA2BR,CAA3B,CACA,KAAIU,EAAMA,QAAQ,CAACC,CAAD,CAAI,CACpB,MAAOhB,GAAA,CAAiBgB,CAAjB,CAAoBX,CAApB,CADa,CAAtB,CAGIY,EAAQH,CAAD,EAAoBP,EAAA,CAA8BE,CAA9B,CAApB,CAA2DM,CAA3D,CAAiE/uC,EAH5E,CAIIkvC,EAAQJ,CAAD,EAAoBP,EAAA,CAA8BG,CAA9B,CAApB,CAA2DK,CAA3D,CAAiE/uC,EAJ5E,CAKImvC,EAAQL,CAAD,EAAoBP,EAAA,CAA8BI,CAA9B,CAApB,CAA2DI,CAA3D,CAAiE/uC,EAL5E,CAMIovC,EAAQN,CAAD,EAAoBP,EAAA,CAA8BK,CAA9B,CAApB,CAA2DG,CAA3D,CAAiE/uC,EAN5E,CAOIqvC,EAAQP,CAAD,EAAoBP,EAAA,CAA8BM,CAA9B,CAApB,CAA2DE,CAA3D,CAAiE/uC,EAE5E,OAAOsvC,SAAsB,CAACznC,CAAD,CAAQiZ,CAAR,CAAgB,CAC3C,IAAIyuB,EAAWzuB,CAAD,EAAWA,CAAAxiB,eAAA,CAAsBmwC,CAAtB,CAAX,CAA0C3tB,CAA1C,CAAmDjZ,CAEjE,IAAe,IAAf,EAAI0nC,CAAJ,CAAqB,MAAOA,EAC5BA,EAAA,CAAUN,CAAA,CAAKM,CAAA,CAAQd,CAAR,CAAL,CAEV,IAAKC,CAAAA,CAAL,CAAW,MAAOa,EAClB,IAAe,IAAf,EAAIA,CAAJ,CAAqB,MAAOhyC,EAC5BgyC,EAAA,CAAUL,CAAA,CAAKK,CAAA,CAAQb,CAAR,CAAL,CAEV,IAAKC,CAAAA,CAAL,CAAW,MAAOY,EAClB,IAAe,IAAf,EAAIA,CAAJ,CAAqB,MAAOhyC,EAC5BgyC,EAAA,CAAUJ,CAAA,CAAKI,CAAA,CAAQZ,CAAR,CAAL,CAEV,IAAKC,CAAAA,CAAL,CAAW,MAAOW,EAClB,IAAe,IAAf,EAAIA,CAAJ,CAAqB,MAAOhyC,EAC5BgyC,EAAA,CAAUH,CAAA,CAAKG,CAAA,CAAQX,CAAR,CAAL,CAEV,OAAKC,EAAL,CACe,IAAf,EAAIU,CAAJ,CAA4BhyC,CAA5B,CACAgyC,CADA,CACUF,CAAA,CAAKE,CAAA,CAAQV,CAAR,CAAL,CAFV,CAAkBU,CAlByB,CAfkC,CAyCjFC,QAASA,GAA4B,CAAC1rC,CAAD,CAAKgqC,CAAL,CAAqB,CACxD,MAAO,SAAQ,CAAC2B,CAAD,CAAIn2B,CAAJ,CAAO,CACpB,MAAOxV,EAAA,CAAG2rC,CAAH,CAAMn2B,CAAN,CAAS00B,EAAT,CAA2BF,CAA3B,CADa,CADkC,CAM1D4B,QAASA,GAAQ,CAAC3kC,CAAD;AAAOgd,CAAP,CAAgBsmB,CAAhB,CAAyB,CACxC,IAAIS,EAAkB/mB,CAAA+mB,gBAAtB,CACIa,EAAiBb,CAAA,CAAkBc,EAAlB,CAA2CC,EADhE,CAEI/rC,EAAK6rC,CAAA,CAAc5kC,CAAd,CACT,IAAIjH,CAAJ,CAAQ,MAAOA,EAJyB,KAOpCgsC,EAAW/kC,CAAAzJ,MAAA,CAAW,GAAX,CAPyB,CAQpCyuC,EAAiBD,CAAAlyC,OAGrB,IAAImqB,CAAAxa,IAAJ,CAEIzJ,CAAA,CADmB,CAArB,CAAIisC,CAAJ,CACOvB,EAAA,CAAgBsB,CAAA,CAAS,CAAT,CAAhB,CAA6BA,CAAA,CAAS,CAAT,CAA7B,CAA0CA,CAAA,CAAS,CAAT,CAA1C,CAAuDA,CAAA,CAAS,CAAT,CAAvD,CAAoEA,CAAA,CAAS,CAAT,CAApE,CAAiFzB,CAAjF,CAA0FS,CAA1F,CADP,CAGOhrC,QAAsB,CAAC+D,CAAD,CAAQiZ,CAAR,CAAgB,CAAA,IACrCjiB,EAAI,CADiC,CAC9BsF,CACX,GACEA,EAIA,CAJMqqC,EAAA,CAAgBsB,CAAA,CAASjxC,CAAA,EAAT,CAAhB,CAA+BixC,CAAA,CAASjxC,CAAA,EAAT,CAA/B,CAA8CixC,CAAA,CAASjxC,CAAA,EAAT,CAA9C,CAA6DixC,CAAA,CAASjxC,CAAA,EAAT,CAA7D,CACgBixC,CAAA,CAASjxC,CAAA,EAAT,CADhB,CAC+BwvC,CAD/B,CACwCS,CADxC,CAAA,CACyDjnC,CADzD,CACgEiZ,CADhE,CAIN,CADAA,CACA,CADSvjB,CACT,CAAAsK,CAAA,CAAQ1D,CALV,OAMStF,CANT,CAMakxC,CANb,CAOA,OAAO5rC,EATkC,CAJ/C,KAgBO,CACL,IAAI6rC,EAAO,EACPlB,EAAJ,GACEkB,CADF,EACU,oCADV,CAGA,KAAIC,EAAwBnB,CAC5B7wC,EAAA,CAAQ6xC,CAAR,CAAkB,QAAQ,CAAC1xC,CAAD,CAAMwD,CAAN,CAAa,CACrCisC,EAAA,CAAqBzvC,CAArB,CAA0BiwC,CAA1B,CACA,KAAI6B,GAAYtuC,CAAA,CAEE,GAFF,CAIE,yBAJF,CAI8BxD,CAJ9B,CAIoC,UAJhD8xC,EAI8D,GAJ9DA,CAIoE9xC,CACxE,IAAI0wC,CAAJ,EAAuBP,EAAA,CAA8BnwC,CAA9B,CAAvB,CACE8xC,CACA,CADW,MACX,CADoBA,CACpB,CAD+B,OAC/B,CAAAD,CAAA,CAAwB,CAAA,CAE1BD,EAAA,EAAQ,qCAAR,CACeE,CADf,CAC0B,KAZW,CAAvC,CAcAF,EAAA,EAAQ,WAGJG,EAAAA,CAAiB,IAAIC,QAAJ,CAAa,GAAb;AAAkB,GAAlB,CAAuB,KAAvB,CAA8B,IAA9B,CAAoCJ,CAApC,CAErBG,EAAA3vC,SAAA,CAA0BN,EAAA,CAAQ8vC,CAAR,CACtBC,EAAJ,GACEE,CADF,CACmBX,EAAA,CAA6BW,CAA7B,CAA6C9B,CAA7C,CADnB,CAGAvqC,EAAA,CAAKqsC,CA7BA,CAgCPrsC,CAAAusC,aAAA,CAAkB,CAAA,CAClBvsC,EAAAovB,OAAA,CAAYod,QAAQ,CAACzsC,CAAD,CAAO7E,CAAP,CAAc,CAChC,MAAOmvC,GAAA,CAAOtqC,CAAP,CAAakH,CAAb,CAAmB/L,CAAnB,CAA0B+L,CAA1B,CADyB,CAIlC,OADA4kC,EAAA,CAAc5kC,CAAd,CACA,CADsBjH,CA/DkB,CAqE1CysC,QAASA,GAAU,CAACvxC,CAAD,CAAQ,CACzB,MAAOX,EAAA,CAAWW,CAAA6kC,QAAX,CAAA,CAA4B7kC,CAAA6kC,QAAA,EAA5B,CAA8C2M,EAAAjyC,KAAA,CAAmBS,CAAnB,CAD5B,CAuD3BiW,QAASA,GAAc,EAAG,CACxB,IAAIw7B,EAAejlC,EAAA,EAAnB,CACIklC,EAAiBllC,EAAA,EAIrB,KAAAgS,KAAA,CAAY,CAAC,SAAD,CAAY,UAAZ,CAAwB,QAAQ,CAACtJ,CAAD,CAAU0B,CAAV,CAAoB,CAU9D+6B,QAASA,EAAoB,CAACtM,CAAD,CAAM,CACjC,IAAIuM,EAAUvM,CAEVA,EAAAgM,aAAJ,GACEO,CAKA,CALUA,QAAsB,CAAC/sC,CAAD,CAAOid,CAAP,CAAe,CAC7C,MAAOujB,EAAA,CAAIxgC,CAAJ,CAAUid,CAAV,CADsC,CAK/C,CAFA8vB,CAAA5d,QAEA,CAFkBqR,CAAArR,QAElB,CADA4d,CAAA/jC,SACA,CADmBw3B,CAAAx3B,SACnB,CAAA+jC,CAAA1d,OAAA,CAAiBmR,CAAAnR,OANnB,CASA,OAAO0d,EAZ0B,CA4DnCC,QAASA,EAAuB,CAACC,CAAD,CAAS7uB,CAAT,CAAe,CAC7C,IAD6C,IACpCpjB,EAAI,CADgC,CAC7BW,EAAKsxC,CAAAlzC,OAArB,CAAoCiB,CAApC,CAAwCW,CAAxC,CAA4CX,CAAA,EAA5C,CAAiD,CAC/C,IAAImP,EAAQ8iC,CAAA,CAAOjyC,CAAP,CACPmP,EAAAnB,SAAL,GACMmB,CAAA8iC,OAAJ,CACED,CAAA,CAAwB7iC,CAAA8iC,OAAxB,CAAsC7uB,CAAtC,CADF,CAEoC,EAFpC;AAEWA,CAAApgB,QAAA,CAAamM,CAAb,CAFX,EAGEiU,CAAA5f,KAAA,CAAU2L,CAAV,CAJJ,CAF+C,CAWjD,MAAOiU,EAZsC,CAe/C8uB,QAASA,EAAyB,CAACzY,CAAD,CAAW0Y,CAAX,CAA4B,CAE5D,MAAgB,KAAhB,EAAI1Y,CAAJ,EAA2C,IAA3C,EAAwB0Y,CAAxB,CACS1Y,CADT,GACsB0Y,CADtB,CAIwB,QAAxB,GAAI,MAAO1Y,EAAX,GAKEA,CAEI,CAFOiY,EAAA,CAAWjY,CAAX,CAEP,CAAoB,QAApB,GAAA,MAAOA,EAPb,EASW,CAAA,CATX,CAgBOA,CAhBP,GAgBoB0Y,CAhBpB,EAgBwC1Y,CAhBxC,GAgBqDA,CAhBrD,EAgBiE0Y,CAhBjE,GAgBqFA,CAtBzB,CAyB9DC,QAASA,EAAmB,CAACppC,CAAD,CAAQkd,CAAR,CAAkB2f,CAAlB,CAAkCwM,CAAlC,CAAoD,CAC9E,IAAIC,EAAmBD,CAAAE,SAAnBD,GACWD,CAAAE,SADXD,CACuCN,CAAA,CAAwBK,CAAAJ,OAAxB,CAAiD,EAAjD,CADvCK,CAAJ,CAGIE,CAEJ,IAAgC,CAAhC,GAAIF,CAAAvzC,OAAJ,CAAmC,CACjC,IAAI0zC,EAAgBP,CAApB,CACAI,EAAmBA,CAAA,CAAiB,CAAjB,CACnB,OAAOtpC,EAAAjH,OAAA,CAAa2wC,QAA6B,CAAC1pC,CAAD,CAAQ,CACvD,IAAI2pC,EAAgBL,CAAA,CAAiBtpC,CAAjB,CACfkpC,EAAA,CAA0BS,CAA1B,CAAyCF,CAAzC,CAAL,GACED,CACA,CADaH,CAAA,CAAiBrpC,CAAjB,CACb,CAAAypC,CAAA,CAAgBE,CAAhB,EAAiCjB,EAAA,CAAWiB,CAAX,CAFnC,CAIA,OAAOH,EANgD,CAAlD,CAOJtsB,CAPI,CAOM2f,CAPN,CAH0B,CAcnC,IADA,IAAI+M,EAAwB,EAA5B,CACS5yC,EAAI,CADb,CACgBW,EAAK2xC,CAAAvzC,OAArB,CAA8CiB,CAA9C,CAAkDW,CAAlD,CAAsDX,CAAA,EAAtD,CACE4yC,CAAA,CAAsB5yC,CAAtB,CAAA,CAA2BkyC,CAG7B,OAAOlpC,EAAAjH,OAAA,CAAa8wC,QAA8B,CAAC7pC,CAAD,CAAQ,CAGxD,IAFA,IAAI8pC,EAAU,CAAA,CAAd,CAES9yC,EAAI,CAFb,CAEgBW,EAAK2xC,CAAAvzC,OAArB,CAA8CiB,CAA9C,CAAkDW,CAAlD,CAAsDX,CAAA,EAAtD,CAA2D,CACzD,IAAI2yC,EAAgBL,CAAA,CAAiBtyC,CAAjB,CAAA,CAAoBgJ,CAApB,CACpB,IAAI8pC,CAAJ,GAAgBA,CAAhB,CAA0B,CAACZ,CAAA,CAA0BS,CAA1B,CAAyCC,CAAA,CAAsB5yC,CAAtB,CAAzC,CAA3B,EACE4yC,CAAA,CAAsB5yC,CAAtB,CAAA,CAA2B2yC,CAA3B,EAA4CjB,EAAA,CAAWiB,CAAX,CAHW,CAOvDG,CAAJ,GACEN,CADF,CACeH,CAAA,CAAiBrpC,CAAjB,CADf,CAIA;MAAOwpC,EAdiD,CAAnD,CAeJtsB,CAfI,CAeM2f,CAfN,CAxBuE,CA0ChFkN,QAASA,EAAoB,CAAC/pC,CAAD,CAAQkd,CAAR,CAAkB2f,CAAlB,CAAkCwM,CAAlC,CAAoD,CAAA,IAC3E5d,CAD2E,CAClEb,CACb,OAAOa,EAAP,CAAiBzrB,CAAAjH,OAAA,CAAaixC,QAAqB,CAAChqC,CAAD,CAAQ,CACzD,MAAOqpC,EAAA,CAAiBrpC,CAAjB,CADkD,CAA1C,CAEdiqC,QAAwB,CAAC9yC,CAAD,CAAQ+yC,CAAR,CAAalqC,CAAb,CAAoB,CAC7C4qB,CAAA,CAAYzzB,CACRX,EAAA,CAAW0mB,CAAX,CAAJ,EACEA,CAAA9gB,MAAA,CAAe,IAAf,CAAqBxE,SAArB,CAEEW,EAAA,CAAUpB,CAAV,CAAJ,EACE6I,CAAAmqC,aAAA,CAAmB,QAAQ,EAAG,CACxB5xC,CAAA,CAAUqyB,CAAV,CAAJ,EACEa,CAAA,EAF0B,CAA9B,CAN2C,CAF9B,CAcdoR,CAdc,CAF8D,CAmBjFuN,QAASA,EAA2B,CAACpqC,CAAD,CAAQkd,CAAR,CAAkB2f,CAAlB,CAAkCwM,CAAlC,CAAoD,CAgBtFgB,QAASA,EAAY,CAAClzC,CAAD,CAAQ,CAC3B,IAAImzC,EAAa,CAAA,CACjBl0C,EAAA,CAAQe,CAAR,CAAe,QAAQ,CAACmF,CAAD,CAAM,CACtB/D,CAAA,CAAU+D,CAAV,CAAL,GAAqBguC,CAArB,CAAkC,CAAA,CAAlC,CAD2B,CAA7B,CAGA,OAAOA,EALoB,CAhByD,IAClF7e,CADkF,CACzEb,CACb,OAAOa,EAAP,CAAiBzrB,CAAAjH,OAAA,CAAaixC,QAAqB,CAAChqC,CAAD,CAAQ,CACzD,MAAOqpC,EAAA,CAAiBrpC,CAAjB,CADkD,CAA1C,CAEdiqC,QAAwB,CAAC9yC,CAAD,CAAQ+yC,CAAR,CAAalqC,CAAb,CAAoB,CAC7C4qB,CAAA,CAAYzzB,CACRX,EAAA,CAAW0mB,CAAX,CAAJ,EACEA,CAAAxmB,KAAA,CAAc,IAAd,CAAoBS,CAApB,CAA2B+yC,CAA3B,CAAgClqC,CAAhC,CAEEqqC,EAAA,CAAalzC,CAAb,CAAJ,EACE6I,CAAAmqC,aAAA,CAAmB,QAAQ,EAAG,CACxBE,CAAA,CAAazf,CAAb,CAAJ,EAA6Ba,CAAA,EADD,CAA9B,CAN2C,CAF9B,CAYdoR,CAZc,CAFqE,CAyBxF0N,QAASA,EAAqB,CAACvqC,CAAD,CAAQkd,CAAR,CAAkB2f,CAAlB,CAAkCwM,CAAlC,CAAoD,CAChF,IAAI5d,CACJ,OAAOA,EAAP,CAAiBzrB,CAAAjH,OAAA,CAAayxC,QAAsB,CAACxqC,CAAD,CAAQ,CAC1D,MAAOqpC,EAAA,CAAiBrpC,CAAjB,CADmD,CAA3C,CAEdyqC,QAAyB,CAACtzC,CAAD,CAAQ+yC,CAAR,CAAalqC,CAAb,CAAoB,CAC1CxJ,CAAA,CAAW0mB,CAAX,CAAJ;AACEA,CAAA9gB,MAAA,CAAe,IAAf,CAAqBxE,SAArB,CAEF6zB,EAAA,EAJ8C,CAF/B,CAOdoR,CAPc,CAF+D,CAYlF6N,QAASA,EAAc,CAACrB,CAAD,CAAmBsB,CAAnB,CAAkC,CACvD,GAAKA,CAAAA,CAAL,CAAoB,MAAOtB,EAC3B,KAAIuB,EAAgBvB,CAAAzM,gBAApB,CAMI3gC,EAHA2uC,CAGK,GAHaR,CAGb,EAFLQ,CAEK,GAFab,CAEb,CAAec,QAAqC,CAAC7qC,CAAD,CAAQiZ,CAAR,CAAgB,CAC3E,IAAI9hB,EAAQkyC,CAAA,CAAiBrpC,CAAjB,CAAwBiZ,CAAxB,CACZ,OAAO0xB,EAAA,CAAcxzC,CAAd,CAAqB6I,CAArB,CAA4BiZ,CAA5B,CAFoE,CAApE,CAGL6xB,QAAqC,CAAC9qC,CAAD,CAAQiZ,CAAR,CAAgB,CACvD,IAAI9hB,EAAQkyC,CAAA,CAAiBrpC,CAAjB,CAAwBiZ,CAAxB,CAAZ,CACIxe,EAASkwC,CAAA,CAAcxzC,CAAd,CAAqB6I,CAArB,CAA4BiZ,CAA5B,CAGb,OAAO1gB,EAAA,CAAUpB,CAAV,CAAA,CAAmBsD,CAAnB,CAA4BtD,CALoB,CASrDkyC,EAAAzM,gBAAJ,EACIyM,CAAAzM,gBADJ,GACyCwM,CADzC,CAEEntC,CAAA2gC,gBAFF,CAEuByM,CAAAzM,gBAFvB,CAGY+N,CAAAnf,UAHZ,GAMEvvB,CAAA2gC,gBACA,CADqBwM,CACrB,CAAAntC,CAAAgtC,OAAA,CAAY,CAACI,CAAD,CAPd,CAUA,OAAOptC,EA9BgD,CAhNK,IAC1D8uC,EAAgB,CACdrlC,IAAKqI,CAAArI,IADS,CAEduhC,gBAAiB,CAAA,CAFH,CAD0C,CAK1D+D,EAAyB,CACvBtlC,IAAKqI,CAAArI,IADkB,CAEvBuhC,gBAAiB,CAAA,CAFM,CAoB7B,OAAO95B,SAAe,CAACqvB,CAAD,CAAMmO,CAAN,CAAqB1D,CAArB,CAAsC,CAAA,IACtDoC,CADsD,CACpC4B,CADoC,CAC3BC,CAE/B,QAAQ,MAAO1O,EAAf,EACE,KAAK,QAAL,CACE0O,CAAA,CAAW1O,CAAX,CAAiBA,CAAA3rB,KAAA,EAEjB,KAAI6H,EAASuuB,CAAA,CAAkB4B,CAAlB,CAAmCD,CAChDS,EAAA,CAAmB3wB,CAAA,CAAMwyB,CAAN,CAEd7B;CAAL,GACwB,GAsBtB,GAtBI7M,CAAAphC,OAAA,CAAW,CAAX,CAsBJ,EAtB+C,GAsB/C,GAtB6BohC,CAAAphC,OAAA,CAAW,CAAX,CAsB7B,GArBE6vC,CACA,CADU,CAAA,CACV,CAAAzO,CAAA,CAAMA,CAAAhd,UAAA,CAAc,CAAd,CAoBR,EAjBI2rB,CAiBJ,CAjBmBlE,CAAA,CAAkB+D,CAAlB,CAA2CD,CAiB9D,CAhBIK,CAgBJ,CAhBY,IAAIC,EAAJ,CAAUF,CAAV,CAgBZ,CAdA9B,CAcA,CAdmBxsC,CADNyuC,IAAIC,EAAJD,CAAWF,CAAXE,CAAkBj/B,CAAlBi/B,CAA2BH,CAA3BG,CACMzuC,OAAA,CAAa2/B,CAAb,CAcnB,CAZI6M,CAAArkC,SAAJ,CACEqkC,CAAAzM,gBADF,CACqC2N,CADrC,CAEWU,CAAJ,EAGL5B,CACA,CADmBP,CAAA,CAAqBO,CAArB,CACnB,CAAAA,CAAAzM,gBAAA,CAAmCyM,CAAAle,QAAA,CACjCif,CADiC,CACHL,CAL3B,EAMIV,CAAAJ,OANJ,GAOLI,CAAAzM,gBAPK,CAO8BwM,CAP9B,CAUP,CAAA1wB,CAAA,CAAMwyB,CAAN,CAAA,CAAkB7B,CAvBpB,CAyBA,OAAOqB,EAAA,CAAerB,CAAf,CAAiCsB,CAAjC,CAET,MAAK,UAAL,CACE,MAAOD,EAAA,CAAelO,CAAf,CAAoBmO,CAApB,CAET,SACE,MAAOD,EAAA,CAAexyC,CAAf,CAAqByyC,CAArB,CAtCX,CAH0D,CAzBE,CAApD,CANY,CA6c1Bn9B,QAASA,GAAU,EAAG,CAEpB,IAAAmI,KAAA,CAAY,CAAC,YAAD,CAAe,mBAAf,CAAoC,QAAQ,CAACtI,CAAD,CAAalB,CAAb,CAAgC,CACtF,MAAOq/B,GAAA,CAAS,QAAQ,CAAC3tB,CAAD,CAAW,CACjCxQ,CAAAvU,WAAA,CAAsB+kB,CAAtB,CADiC,CAA5B,CAEJ1R,CAFI,CAD+E,CAA5E,CAFQ,CAStBuB,QAASA,GAAW,EAAG,CACrB,IAAAiI,KAAA,CAAY,CAAC,UAAD,CAAa,mBAAb,CAAkC,QAAQ,CAAChK,CAAD,CAAWQ,CAAX,CAA8B,CAClF,MAAOq/B,GAAA,CAAS,QAAQ,CAAC3tB,CAAD,CAAW,CACjClS,CAAA8T,MAAA,CAAe5B,CAAf,CADiC,CAA5B;AAEJ1R,CAFI,CAD2E,CAAxE,CADS,CAgBvBq/B,QAASA,GAAQ,CAACC,CAAD,CAAWC,CAAX,CAA6B,CAE5CC,QAASA,EAAQ,CAAC3vC,CAAD,CAAO4vC,CAAP,CAAkB/T,CAAlB,CAA4B,CAE3C3nB,QAASA,EAAI,CAACjU,CAAD,CAAK,CAChB,MAAO,SAAQ,CAAC9E,CAAD,CAAQ,CACjBgjC,CAAJ,GACAA,CACA,CADS,CAAA,CACT,CAAAl+B,CAAAvF,KAAA,CAAQsF,CAAR,CAAc7E,CAAd,CAFA,CADqB,CADP,CADlB,IAAIgjC,EAAS,CAAA,CASb,OAAO,CAACjqB,CAAA,CAAK07B,CAAL,CAAD,CAAkB17B,CAAA,CAAK2nB,CAAL,CAAlB,CAVoC,CA2B7CgU,QAASA,EAAO,EAAG,CACjB,IAAAjI,QAAA,CAAe,CAAExN,OAAQ,CAAV,CADE,CA6BnB0V,QAASA,EAAU,CAACx1C,CAAD,CAAU2F,CAAV,CAAc,CAC/B,MAAO,SAAQ,CAAC9E,CAAD,CAAQ,CACrB8E,CAAAvF,KAAA,CAAQJ,CAAR,CAAiBa,CAAjB,CADqB,CADQ,CA8BjC40C,QAASA,EAAoB,CAACnvB,CAAD,CAAQ,CAC/BovB,CAAApvB,CAAAovB,iBAAJ,EAA+BpvB,CAAAqvB,QAA/B,GACArvB,CAAAovB,iBACA,CADyB,CAAA,CACzB,CAAAP,CAAA,CAAS,QAAQ,EAAG,CA3BO,IACvBxvC,CADuB,CACnBo7B,CADmB,CACV4U,CAEjBA,EAAA,CAwBmCrvB,CAxBzBqvB,QAwByBrvB,EAvBnCovB,iBAAA,CAAyB,CAAA,CAuBUpvB,EAtBnCqvB,QAAA,CAAgBv2C,CAChB,KAN2B,IAMlBsB,EAAI,CANc,CAMXW,EAAKs0C,CAAAl2C,OAArB,CAAqCiB,CAArC,CAAyCW,CAAzC,CAA6C,EAAEX,CAA/C,CAAkD,CAChDqgC,CAAA,CAAU4U,CAAA,CAAQj1C,CAAR,CAAA,CAAW,CAAX,CACViF,EAAA,CAAKgwC,CAAA,CAAQj1C,CAAR,CAAA,CAmB4B4lB,CAnBjBwZ,OAAX,CACL,IAAI,CACE5/B,CAAA,CAAWyF,CAAX,CAAJ,CACEo7B,CAAAoB,QAAA,CAAgBx8B,CAAA,CAgBa2gB,CAhBVzlB,MAAH,CAAhB,CADF,CAE4B,CAArB,GAewBylB,CAfpBwZ,OAAJ,CACLiB,CAAAoB,QAAA,CAc6B7b,CAdbzlB,MAAhB,CADK,CAGLkgC,CAAAhB,OAAA,CAY6BzZ,CAZdzlB,MAAf,CANA,CAQF,MAAO+F,CAAP,CAAU,CACVm6B,CAAAhB,OAAA,CAAen5B,CAAf,CACA;AAAAwuC,CAAA,CAAiBxuC,CAAjB,CAFU,CAXoC,CAqB9B,CAApB,CAFA,CADmC,CAMrCgvC,QAASA,EAAQ,EAAG,CAClB,IAAA7U,QAAA,CAAe,IAAIwU,CAEnB,KAAApT,QAAA,CAAeqT,CAAA,CAAW,IAAX,CAAiB,IAAArT,QAAjB,CACf,KAAApC,OAAA,CAAcyV,CAAA,CAAW,IAAX,CAAiB,IAAAzV,OAAjB,CACd,KAAAuH,OAAA,CAAckO,CAAA,CAAW,IAAX,CAAiB,IAAAlO,OAAjB,CALI,CA7FpB,IAAIuO,EAAWx2C,CAAA,CAAO,IAAP,CAAay2C,SAAb,CAgCfP,EAAAzyB,UAAA,CAAoB,CAClBsV,KAAMA,QAAQ,CAAC2d,CAAD,CAAcC,CAAd,CAA0BC,CAA1B,CAAwC,CACpD,IAAI9xC,EAAS,IAAIyxC,CAEjB,KAAAtI,QAAAqI,QAAA,CAAuB,IAAArI,QAAAqI,QAAvB,EAA+C,EAC/C,KAAArI,QAAAqI,QAAAzxC,KAAA,CAA0B,CAACC,CAAD,CAAS4xC,CAAT,CAAsBC,CAAtB,CAAkCC,CAAlC,CAA1B,CAC0B,EAA1B,CAAI,IAAA3I,QAAAxN,OAAJ,EAA6B2V,CAAA,CAAqB,IAAAnI,QAArB,CAE7B,OAAOnpC,EAAA48B,QAP6C,CADpC,CAWlB,QAASmV,QAAQ,CAAC3uB,CAAD,CAAW,CAC1B,MAAO,KAAA6Q,KAAA,CAAU,IAAV,CAAgB7Q,CAAhB,CADmB,CAXV,CAelB,UAAW4uB,QAAQ,CAAC5uB,CAAD,CAAW0uB,CAAX,CAAyB,CAC1C,MAAO,KAAA7d,KAAA,CAAU,QAAQ,CAACv3B,CAAD,CAAQ,CAC/B,MAAOu1C,EAAA,CAAev1C,CAAf,CAAsB,CAAA,CAAtB,CAA4B0mB,CAA5B,CADwB,CAA1B,CAEJ,QAAQ,CAAC7B,CAAD,CAAQ,CACjB,MAAO0wB,EAAA,CAAe1wB,CAAf,CAAsB,CAAA,CAAtB,CAA6B6B,CAA7B,CADU,CAFZ,CAIJ0uB,CAJI,CADmC,CAf1B,CAqEpBL;CAAA9yB,UAAA,CAAqB,CACnBqf,QAASA,QAAQ,CAACn8B,CAAD,CAAM,CACjB,IAAA+6B,QAAAuM,QAAAxN,OAAJ,GACI95B,CAAJ,GAAY,IAAA+6B,QAAZ,CACE,IAAAsV,SAAA,CAAcR,CAAA,CACZ,QADY,CAGZ7vC,CAHY,CAAd,CADF,CAOE,IAAAswC,UAAA,CAAetwC,CAAf,CARF,CADqB,CADJ,CAenBswC,UAAWA,QAAQ,CAACtwC,CAAD,CAAM,CAAA,IACnBoyB,CADmB,CACbyG,CAEVA,EAAA,CAAMwW,CAAA,CAAS,IAAT,CAAe,IAAAiB,UAAf,CAA+B,IAAAD,SAA/B,CACN,IAAI,CACF,GAAKn0C,CAAA,CAAS8D,CAAT,CAAL,EAAsB9F,CAAA,CAAW8F,CAAX,CAAtB,CAAwCoyB,CAAA,CAAOpyB,CAAP,EAAcA,CAAAoyB,KAClDl4B,EAAA,CAAWk4B,CAAX,CAAJ,EACE,IAAA2I,QAAAuM,QAAAxN,OACA,CAD+B,EAC/B,CAAA1H,CAAAh4B,KAAA,CAAU4F,CAAV,CAAe64B,CAAA,CAAI,CAAJ,CAAf,CAAuBA,CAAA,CAAI,CAAJ,CAAvB,CAA+B,IAAAyI,OAA/B,CAFF,GAIE,IAAAvG,QAAAuM,QAAAzsC,MAEA,CAF6BmF,CAE7B,CADA,IAAA+6B,QAAAuM,QAAAxN,OACA,CAD8B,CAC9B,CAAA2V,CAAA,CAAqB,IAAA1U,QAAAuM,QAArB,CANF,CAFE,CAUF,MAAO1mC,CAAP,CAAU,CACVi4B,CAAA,CAAI,CAAJ,CAAA,CAAOj4B,CAAP,CACA,CAAAwuC,CAAA,CAAiBxuC,CAAjB,CAFU,CAdW,CAfN,CAmCnBm5B,OAAQA,QAAQ,CAACzzB,CAAD,CAAS,CACnB,IAAAy0B,QAAAuM,QAAAxN,OAAJ,EACA,IAAAuW,SAAA,CAAc/pC,CAAd,CAFuB,CAnCN,CAwCnB+pC,SAAUA,QAAQ,CAAC/pC,CAAD,CAAS,CACzB,IAAAy0B,QAAAuM,QAAAzsC,MAAA;AAA6ByL,CAC7B,KAAAy0B,QAAAuM,QAAAxN,OAAA,CAA8B,CAC9B2V,EAAA,CAAqB,IAAA1U,QAAAuM,QAArB,CAHyB,CAxCR,CA8CnBhG,OAAQA,QAAQ,CAACiP,CAAD,CAAW,CACzB,IAAIhT,EAAY,IAAAxC,QAAAuM,QAAAqI,QAEoB,EAApC,EAAK,IAAA5U,QAAAuM,QAAAxN,OAAL,EAA0CyD,CAA1C,EAAuDA,CAAA9jC,OAAvD,EACE01C,CAAA,CAAS,QAAQ,EAAG,CAElB,IAFkB,IACd5tB,CADc,CACJpjB,CADI,CAETzD,EAAI,CAFK,CAEFW,EAAKkiC,CAAA9jC,OAArB,CAAuCiB,CAAvC,CAA2CW,CAA3C,CAA+CX,CAAA,EAA/C,CAAoD,CAClDyD,CAAA,CAASo/B,CAAA,CAAU7iC,CAAV,CAAA,CAAa,CAAb,CACT6mB,EAAA,CAAWgc,CAAA,CAAU7iC,CAAV,CAAA,CAAa,CAAb,CACX,IAAI,CACFyD,CAAAmjC,OAAA,CAAcpnC,CAAA,CAAWqnB,CAAX,CAAA,CAAuBA,CAAA,CAASgvB,CAAT,CAAvB,CAA4CA,CAA1D,CADE,CAEF,MAAO3vC,CAAP,CAAU,CACVwuC,CAAA,CAAiBxuC,CAAjB,CADU,CALsC,CAFlC,CAApB,CAJuB,CA9CR,CA4GrB,KAAI4vC,EAAcA,QAAoB,CAAC31C,CAAD,CAAQ41C,CAAR,CAAkB,CACtD,IAAItyC,EAAS,IAAIyxC,CACba,EAAJ,CACEtyC,CAAAg+B,QAAA,CAAethC,CAAf,CADF,CAGEsD,CAAA47B,OAAA,CAAcl/B,CAAd,CAEF,OAAOsD,EAAA48B,QAP+C,CAAxD,CAUIqV,EAAiBA,QAAuB,CAACv1C,CAAD,CAAQ61C,CAAR,CAAoBnvB,CAApB,CAA8B,CACxE,IAAIovB,EAAiB,IACrB,IAAI,CACEz2C,CAAA,CAAWqnB,CAAX,CAAJ,GAA0BovB,CAA1B,CAA2CpvB,CAAA,EAA3C,CADE,CAEF,MAAO3gB,CAAP,CAAU,CACV,MAAO4vC,EAAA,CAAY5vC,CAAZ,CAAe,CAAA,CAAf,CADG,CAGZ,MAAkB+vC,EAAlB,EAr2YYz2C,CAAA,CAq2YMy2C,CAr2YKve,KAAX,CAq2YZ,CACSue,CAAAve,KAAA,CAAoB,QAAQ,EAAG,CACpC,MAAOoe,EAAA,CAAY31C,CAAZ,CAAmB61C,CAAnB,CAD6B,CAA/B,CAEJ,QAAQ,CAAChxB,CAAD,CAAQ,CACjB,MAAO8wB,EAAA,CAAY9wB,CAAZ,CAAmB,CAAA,CAAnB,CADU,CAFZ,CADT;AAOS8wB,CAAA,CAAY31C,CAAZ,CAAmB61C,CAAnB,CAd+D,CAV1E,CA2CI1V,EAAOA,QAAQ,CAACngC,CAAD,CAAQ0mB,CAAR,CAAkBqvB,CAAlB,CAA2BX,CAA3B,CAAyC,CAC1D,IAAI9xC,EAAS,IAAIyxC,CACjBzxC,EAAAg+B,QAAA,CAAethC,CAAf,CACA,OAAOsD,EAAA48B,QAAA3I,KAAA,CAAoB7Q,CAApB,CAA8BqvB,CAA9B,CAAuCX,CAAvC,CAHmD,CA3C5D,CAyFIY,EAAKA,QAASC,EAAC,CAACC,CAAD,CAAW,CAC5B,GAAK,CAAA72C,CAAA,CAAW62C,CAAX,CAAL,CACE,KAAMlB,EAAA,CAAS,SAAT,CAAsDkB,CAAtD,CAAN,CAGF,GAAM,EAAA,IAAA,WAAgBD,EAAhB,CAAN,CAEE,MAAO,KAAIA,CAAJ,CAAMC,CAAN,CAGT,KAAI7U,EAAW,IAAI0T,CAUnBmB,EAAA,CARAzB,QAAkB,CAACz0C,CAAD,CAAQ,CACxBqhC,CAAAC,QAAA,CAAiBthC,CAAjB,CADwB,CAQ1B,CAJA0gC,QAAiB,CAACj1B,CAAD,CAAS,CACxB41B,CAAAnC,OAAA,CAAgBzzB,CAAhB,CADwB,CAI1B,CAEA,OAAO41B,EAAAnB,QAtBqB,CAyB9B8V,EAAA1tB,MAAA,CA3SYA,QAAQ,EAAG,CACrB,MAAO,KAAIysB,CADU,CA4SvBiB,EAAA9W,OAAA,CAzHaA,QAAQ,CAACzzB,CAAD,CAAS,CAC5B,IAAInI,EAAS,IAAIyxC,CACjBzxC,EAAA47B,OAAA,CAAczzB,CAAd,CACA,OAAOnI,EAAA48B,QAHqB,CA0H9B8V,EAAA7V,KAAA,CAAUA,CACV6V,EAAAj2B,IAAA,CApDAA,QAAY,CAACo2B,CAAD,CAAW,CAAA,IACjB9U,EAAW,IAAI0T,CADE,CAEjBzmC,EAAU,CAFO,CAGjB8nC,EAAUp3C,CAAA,CAAQm3C,CAAR,CAAA,CAAoB,EAApB,CAAyB,EAEvCl3C,EAAA,CAAQk3C,CAAR,CAAkB,QAAQ,CAACjW,CAAD,CAAU9gC,CAAV,CAAe,CACvCkP,CAAA,EACA6xB,EAAA,CAAKD,CAAL,CAAA3I,KAAA,CAAmB,QAAQ,CAACv3B,CAAD,CAAQ,CAC7Bo2C,CAAA92C,eAAA,CAAuBF,CAAvB,CAAJ,GACAg3C,CAAA,CAAQh3C,CAAR,CACA,CADeY,CACf,CAAM,EAAEsO,CAAR,EAAkB+yB,CAAAC,QAAA,CAAiB8U,CAAjB,CAFlB,CADiC,CAAnC,CAIG,QAAQ,CAAC3qC,CAAD,CAAS,CACd2qC,CAAA92C,eAAA,CAAuBF,CAAvB,CAAJ;AACAiiC,CAAAnC,OAAA,CAAgBzzB,CAAhB,CAFkB,CAJpB,CAFuC,CAAzC,CAYgB,EAAhB,GAAI6C,CAAJ,EACE+yB,CAAAC,QAAA,CAAiB8U,CAAjB,CAGF,OAAO/U,EAAAnB,QArBc,CAsDvB,OAAO8V,EAzUqC,CA4U9Cv+B,QAASA,GAAa,EAAG,CACvB,IAAA+G,KAAA,CAAY,CAAC,SAAD,CAAY,UAAZ,CAAwB,QAAQ,CAAClH,CAAD,CAAUF,CAAV,CAAoB,CAC9D,IAAIi/B,EAAwB/+B,CAAA++B,sBAAxBA,EACwB/+B,CAAAg/B,4BADxBD,EAEwB/+B,CAAAi/B,yBAF5B,CAIIC,EAAuBl/B,CAAAk/B,qBAAvBA,EACuBl/B,CAAAm/B,2BADvBD,EAEuBl/B,CAAAo/B,wBAFvBF,EAGuBl/B,CAAAq/B,kCAP3B,CASIC,EAAe,CAAEP,CAAAA,CATrB,CAUIQ,EAAMD,CAAA,CACN,QAAQ,CAAC9xC,CAAD,CAAK,CACX,IAAI8kB,EAAKysB,CAAA,CAAsBvxC,CAAtB,CACT,OAAO,SAAQ,EAAG,CAChB0xC,CAAA,CAAqB5sB,CAArB,CADgB,CAFP,CADP,CAON,QAAQ,CAAC9kB,CAAD,CAAK,CACX,IAAIgyC,EAAQ1/B,CAAA,CAAStS,CAAT,CAAa,KAAb,CAAoB,CAAA,CAApB,CACZ,OAAO,SAAQ,EAAG,CAChBsS,CAAAsR,OAAA,CAAgBouB,CAAhB,CADgB,CAFP,CAOjBD,EAAAtyB,UAAA,CAAgBqyB,CAEhB,OAAOC,EA3BuD,CAApD,CADW,CAmGzB1gC,QAASA,GAAkB,EAAG,CAC5B,IAAI4gC,EAAM,EAAV;AACIC,EAAmBx4C,CAAA,CAAO,YAAP,CADvB,CAEIy4C,EAAiB,IAFrB,CAGIC,EAAe,IAEnB,KAAAC,UAAA,CAAiBC,QAAQ,CAACp3C,CAAD,CAAQ,CAC3BS,SAAA7B,OAAJ,GACEm4C,CADF,CACQ/2C,CADR,CAGA,OAAO+2C,EAJwB,CAOjC,KAAAv4B,KAAA,CAAY,CAAC,WAAD,CAAc,mBAAd,CAAmC,QAAnC,CAA6C,UAA7C,CACR,QAAQ,CAAC4D,CAAD,CAAYpN,CAAZ,CAA+BgB,CAA/B,CAAuCxB,CAAvC,CAAiD,CA8C3D6iC,QAASA,EAAK,EAAG,CACf,IAAAC,IAAA,CA/3ZG,EAAEp3C,EAg4ZL,KAAAkhC,QAAA,CAAe,IAAAmW,QAAf,CAA8B,IAAAC,WAA9B,CACe,IAAAC,cADf,CACoC,IAAAC,cADpC,CAEe,IAAAC,YAFf,CAEkC,IAAAC,YAFlC,CAEqD,IACrD,KAAAC,MAAA,CAAa,IACb,KAAAjgB,YAAA,CAAmB,CAAA,CACnB,KAAAkgB,YAAA,CAAmB,EACnB,KAAAC,gBAAA,CAAuB,EACvB,KAAA7rB,kBAAA,CAAyB,IATV,CA+nCjB8rB,QAASA,EAAU,CAACC,CAAD,CAAQ,CACzB,GAAI/hC,CAAAkrB,QAAJ,CACE,KAAM4V,EAAA,CAAiB,QAAjB,CAAsD9gC,CAAAkrB,QAAtD,CAAN,CAGFlrB,CAAAkrB,QAAA,CAAqB6W,CALI,CAa3BC,QAASA,EAAsB,CAACC,CAAD;AAAUlS,CAAV,CAAiBt+B,CAAjB,CAAuB,CACpD,EACEwwC,EAAAJ,gBAAA,CAAwBpwC,CAAxB,CAEA,EAFiCs+B,CAEjC,CAAsC,CAAtC,GAAIkS,CAAAJ,gBAAA,CAAwBpwC,CAAxB,CAAJ,EACE,OAAOwwC,CAAAJ,gBAAA,CAAwBpwC,CAAxB,CAJX,OAMUwwC,CANV,CAMoBA,CAAAZ,QANpB,CADoD,CActDa,QAASA,EAAY,EAAG,EAExBC,QAASA,EAAe,EAAG,CACzB,IAAA,CAAOC,CAAA15C,OAAP,CAAA,CACE,GAAI,CACF05C,CAAAz2B,MAAA,EAAA,EADE,CAEF,MAAO9b,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAIdmxC,CAAA,CAAe,IARU,CAW3BqB,QAASA,EAAkB,EAAG,CACP,IAArB,GAAIrB,CAAJ,GACEA,CADF,CACiB1iC,CAAA8T,MAAA,CAAe,QAAQ,EAAG,CACvCpS,CAAAnN,OAAA,CAAkBsvC,CAAlB,CADuC,CAA1B,CADjB,CAD4B,CAnoC9BhB,CAAAp1B,UAAA,CAAkB,CAChBrW,YAAayrC,CADG,CA+BhB1oB,KAAMA,QAAQ,CAAC6pB,CAAD,CAAU37B,CAAV,CAAkB,CA0C9B47B,QAASA,EAAY,EAAG,CACtBC,CAAA9gB,YAAA,CAAoB,CAAA,CADE,CAzCxB,IAAI8gB,CAEJ77B,EAAA,CAASA,CAAT,EAAmB,IAEf27B,EAAJ,EACEE,CACA,CADQ,IAAIrB,CACZ,CAAAqB,CAAAb,MAAA,CAAc,IAAAA,MAFhB,GAMO,IAAAc,aAWL,GAVE,IAAAA,aAQA,CARoBC,QAAmB,EAAG,CACxC,IAAApB,WAAA,CAAkB,IAAAC,cAAlB,CACI,IAAAE,YADJ,CACuB,IAAAC,YADvB,CAC0C,IAC1C,KAAAE,YAAA;AAAmB,EACnB,KAAAC,gBAAA,CAAuB,EACvB,KAAAT,IAAA,CAl9ZL,EAAEp3C,EAm9ZG,KAAAy4C,aAAA,CAAoB,IANoB,CAQ1C,CAAA,IAAAA,aAAA12B,UAAA,CAA8B,IAEhC,EAAAy2B,CAAA,CAAQ,IAAI,IAAAC,aAjBd,CAmBAD,EAAAnB,QAAA,CAAgB16B,CAChB67B,EAAAhB,cAAA,CAAsB76B,CAAA+6B,YAClB/6B,EAAA86B,YAAJ,EACE96B,CAAA+6B,YAAAH,cACA,CADmCiB,CACnC,CAAA77B,CAAA+6B,YAAA,CAAqBc,CAFvB,EAIE77B,CAAA86B,YAJF,CAIuB96B,CAAA+6B,YAJvB,CAI4Cc,CAQ5C,EAAIF,CAAJ,EAAe37B,CAAf,EAAyB,IAAzB,GAA+B67B,CAAAlkB,IAAA,CAAU,UAAV,CAAsBikB,CAAtB,CAE/B,OAAOC,EAxCuB,CA/BhB,CAkMhB92C,OAAQA,QAAQ,CAACi3C,CAAD,CAAW9yB,CAAX,CAAqB2f,CAArB,CAAqC,CACnD,IAAI77B,EAAMmM,CAAA,CAAO6iC,CAAP,CAEV,IAAIhvC,CAAA47B,gBAAJ,CACE,MAAO57B,EAAA47B,gBAAA,CAAoB,IAApB,CAA0B1f,CAA1B,CAAoC2f,CAApC,CAAoD77B,CAApD,CAJ0C,KAO/ClH,EADQkG,IACA2uC,WAPuC,CAQ/CsB,EAAU,CACRh0C,GAAIihB,CADI,CAER9F,KAAMm4B,CAFE,CAGRvuC,IAAKA,CAHG,CAIRw7B,IAAKwT,CAJG,CAKRE,GAAI,CAAErT,CAAAA,CALE,CAQduR,EAAA,CAAiB,IAEZ53C,EAAA,CAAW0mB,CAAX,CAAL,GACE+yB,CAAAh0C,GADF,CACe/D,CADf,CAIK4B,EAAL,GACEA,CADF,CAhBYkG,IAiBF2uC,WADV,CAC6B,EAD7B,CAKA70C,EAAA2F,QAAA,CAAcwwC,CAAd,CAEA;MAAOE,SAAwB,EAAG,CAChCt2C,EAAA,CAAYC,CAAZ,CAAmBm2C,CAAnB,CACA7B,EAAA,CAAiB,IAFe,CA7BiB,CAlMrC,CA8PhBtR,YAAaA,QAAQ,CAACsT,CAAD,CAAmBlzB,CAAnB,CAA6B,CAwChDmzB,QAASA,EAAgB,EAAG,CAC1BC,CAAA,CAA0B,CAAA,CAEtBC,EAAJ,EACEA,CACA,CADW,CAAA,CACX,CAAArzB,CAAA,CAASszB,CAAT,CAAoBA,CAApB,CAA+Bx0C,CAA/B,CAFF,EAIEkhB,CAAA,CAASszB,CAAT,CAAoBxT,CAApB,CAA+BhhC,CAA/B,CAPwB,CAvC5B,IAAIghC,EAAgB3iB,KAAJ,CAAU+1B,CAAAr6C,OAAV,CAAhB,CACIy6C,EAAgBn2B,KAAJ,CAAU+1B,CAAAr6C,OAAV,CADhB,CAEI06C,EAAgB,EAFpB,CAGIz0C,EAAO,IAHX,CAIIs0C,EAA0B,CAAA,CAJ9B,CAKIC,EAAW,CAAA,CAEf,IAAKx6C,CAAAq6C,CAAAr6C,OAAL,CAA8B,CAE5B,IAAI26C,EAAa,CAAA,CACjB10C,EAAAlD,WAAA,CAAgB,QAAQ,EAAG,CACrB43C,CAAJ,EAAgBxzB,CAAA,CAASszB,CAAT,CAAoBA,CAApB,CAA+Bx0C,CAA/B,CADS,CAA3B,CAGA,OAAO20C,SAA6B,EAAG,CACrCD,CAAA,CAAa,CAAA,CADwB,CANX,CAW9B,GAAgC,CAAhC,GAAIN,CAAAr6C,OAAJ,CAEE,MAAO,KAAAgD,OAAA,CAAYq3C,CAAA,CAAiB,CAAjB,CAAZ,CAAiCC,QAAyB,CAACl5C,CAAD,CAAQu5B,CAAR,CAAkB1wB,CAAlB,CAAyB,CACxFwwC,CAAA,CAAU,CAAV,CAAA,CAAer5C,CACf6lC,EAAA,CAAU,CAAV,CAAA,CAAetM,CACfxT,EAAA,CAASszB,CAAT,CAAqBr5C,CAAD,GAAWu5B,CAAX,CAAuB8f,CAAvB,CAAmCxT,CAAvD,CAAkEh9B,CAAlE,CAHwF,CAAnF,CAOT5J,EAAA,CAAQg6C,CAAR,CAA0B,QAAQ,CAACQ,CAAD,CAAO55C,CAAP,CAAU,CAC1C,IAAI65C,EAAY70C,CAAAjD,OAAA,CAAY63C,CAAZ,CAAkBE,QAA4B,CAAC35C,CAAD,CAAQu5B,CAAR,CAAkB,CAC9E8f,CAAA,CAAUx5C,CAAV,CAAA,CAAeG,CACf6lC,EAAA,CAAUhmC,CAAV,CAAA,CAAe05B,CACV4f,EAAL,GACEA,CACA,CAD0B,CAAA,CAC1B,CAAAt0C,CAAAlD,WAAA,CAAgBu3C,CAAhB,CAFF,CAH8E,CAAhE,CAQhBI,EAAAj2C,KAAA,CAAmBq2C,CAAnB,CAT0C,CAA5C,CAuBA,OAAOF,SAA6B,EAAG,CACrC,IAAA,CAAOF,CAAA16C,OAAP,CAAA,CACE06C,CAAAz3B,MAAA,EAAA,EAFmC,CAnDS,CA9PlC,CAgXhB0S,iBAAkBA,QAAQ,CAAC71B,CAAD;AAAMqnB,CAAN,CAAgB,CAoBxC6zB,QAASA,EAA2B,CAACC,CAAD,CAAS,CAC3CvgB,CAAA,CAAWugB,CADgC,KAE5Bz6C,CAF4B,CAEvB06C,CAFuB,CAEdC,CAFc,CAELC,CAGtC,IAAI,CAAA74C,CAAA,CAAYm4B,CAAZ,CAAJ,CAAA,CAEA,GAAKj4B,CAAA,CAASi4B,CAAT,CAAL,CAKO,GAAI76B,EAAA,CAAY66B,CAAZ,CAAJ,CAgBL,IAfIC,CAeK15B,GAfQo6C,CAeRp6C,GAbP05B,CAEA,CAFW0gB,CAEX,CADAC,CACA,CADY3gB,CAAA36B,OACZ,CAD8B,CAC9B,CAAAu7C,CAAA,EAWOt6C,EARTu6C,CAQSv6C,CARGy5B,CAAA16B,OAQHiB,CANLq6C,CAMKr6C,GANSu6C,CAMTv6C,GAJPs6C,CAAA,EACA,CAAA5gB,CAAA36B,OAAA,CAAkBs7C,CAAlB,CAA8BE,CAGvBv6C,EAAAA,CAAAA,CAAI,CAAb,CAAgBA,CAAhB,CAAoBu6C,CAApB,CAA+Bv6C,CAAA,EAA/B,CACEm6C,CAIA,CAJUzgB,CAAA,CAAS15B,CAAT,CAIV,CAHAk6C,CAGA,CAHUzgB,CAAA,CAASz5B,CAAT,CAGV,CADAi6C,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAA5gB,CAAA,CAAS15B,CAAT,CAAA,CAAck6C,CAFhB,CArBG,KA0BA,CACDxgB,CAAJ,GAAiB8gB,CAAjB,GAEE9gB,CAEA,CAFW8gB,CAEX,CAF4B,EAE5B,CADAH,CACA,CADY,CACZ,CAAAC,CAAA,EAJF,CAOAC,EAAA,CAAY,CACZ,KAAKh7C,CAAL,GAAYk6B,EAAZ,CACMA,CAAAh6B,eAAA,CAAwBF,CAAxB,CAAJ,GACEg7C,CAAA,EAIA,CAHAL,CAGA,CAHUzgB,CAAA,CAASl6B,CAAT,CAGV,CAFA46C,CAEA,CAFUzgB,CAAA,CAASn6B,CAAT,CAEV,CAAIA,CAAJ,GAAWm6B,EAAX,EACEugB,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAA5gB,CAAA,CAASn6B,CAAT,CAAA,CAAgB26C,CAFlB,CAFF,GAOEG,CAAA,EAEA,CADA3gB,CAAA,CAASn6B,CAAT,CACA,CADgB26C,CAChB,CAAAI,CAAA,EATF,CALF,CAkBF,IAAID,CAAJ,CAAgBE,CAAhB,CAGE,IAAKh7C,CAAL,GADA+6C,EAAA,EACY5gB,CAAAA,CAAZ,CACOD,CAAAh6B,eAAA,CAAwBF,CAAxB,CAAL,GACE86C,CAAA,EACA,CAAA,OAAO3gB,CAAA,CAASn6B,CAAT,CAFT,CAhCC,CA/BP,IACMm6B,EAAJ,GAAiBD,CAAjB,GACEC,CACA,CADWD,CACX,CAAA6gB,CAAA,EAFF,CAqEF,OAAOA,EAxEP,CAL2C,CAnB7CP,CAAAvlB,UAAA,CAAwC,CAAA,CAExC,KAAIxvB,EAAO,IAAX,CAEIy0B,CAFJ,CAKIC,CALJ,CAOI+gB,CAPJ,CASIC,EAAuC,CAAvCA,CAAqBx0B,CAAAnnB,OATzB,CAUIu7C,EAAiB,CAVrB,CAWIK,EAAiBxkC,CAAA,CAAOtX,CAAP,CAAYk7C,CAAZ,CAXrB,CAYIK,EAAgB,EAZpB,CAaII;AAAiB,EAbrB,CAcII,EAAU,CAAA,CAdd,CAeIP,EAAY,CA+GhB,OAAO,KAAAt4C,OAAA,CAAY44C,CAAZ,CA7BPE,QAA+B,EAAG,CAC5BD,CAAJ,EACEA,CACA,CADU,CAAA,CACV,CAAA10B,CAAA,CAASuT,CAAT,CAAmBA,CAAnB,CAA6Bz0B,CAA7B,CAFF,EAIEkhB,CAAA,CAASuT,CAAT,CAAmBghB,CAAnB,CAAiCz1C,CAAjC,CAIF,IAAI01C,CAAJ,CACE,GAAKl5C,CAAA,CAASi4B,CAAT,CAAL,CAGO,GAAI76B,EAAA,CAAY66B,CAAZ,CAAJ,CAA2B,CAChCghB,CAAA,CAAmBp3B,KAAJ,CAAUoW,CAAA16B,OAAV,CACf,KAAS,IAAAiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBy5B,CAAA16B,OAApB,CAAqCiB,CAAA,EAArC,CACEy6C,CAAA,CAAaz6C,CAAb,CAAA,CAAkBy5B,CAAA,CAASz5B,CAAT,CAHY,CAA3B,IAOL,KAAST,CAAT,GADAk7C,EACgBhhB,CADD,EACCA,CAAAA,CAAhB,CACMh6B,EAAAC,KAAA,CAAoB+5B,CAApB,CAA8Bl6B,CAA9B,CAAJ,GACEk7C,CAAA,CAAal7C,CAAb,CADF,CACsBk6B,CAAA,CAASl6B,CAAT,CADtB,CAXJ,KAEEk7C,EAAA,CAAehhB,CAZa,CA6B3B,CAjIiC,CAhX1B,CAuiBhBoU,QAASA,QAAQ,EAAG,CAAA,IACdiN,CADc,CACP36C,CADO,CACAigB,CADA,CAEd26B,CAFc,CAGdh8C,CAHc,CAIdi8C,CAJc,CAIPC,EAAM/D,CAJC,CAKRoB,CALQ,CAMd4C,EAAW,EANG,CAOdC,CAPc,CAOEC,CAEpBjD,EAAA,CAAW,SAAX,CAEAxjC,EAAAiT,iBAAA,EAEI,KAAJ,GAAavR,CAAb,EAA4C,IAA5C,GAA2BghC,CAA3B,GAGE1iC,CAAA8T,MAAAI,OAAA,CAAsBwuB,CAAtB,CACA,CAAAmB,CAAA,EAJF,CAOApB,EAAA,CAAiB,IAEjB,GAAG,CACD4D,CAAA,CAAQ,CAAA,CAGR,KAFA1C,CAEA,CArB0BhL,IAqB1B,CAAO+N,CAAAt8C,OAAP,CAAA,CAA0B,CACxB,GAAI,CACFq8C,CACA,CADYC,CAAAr5B,MAAA,EACZ,CAAAo5B,CAAApyC,MAAAsyC,MAAA,CAAsBF,CAAAne,WAAtB,CAFE,CAGF,MAAO/2B,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAGZkxC,CAAA,CAAiB,IAPO,CAU1B,CAAA,CACA,EAAG,CACD,GAAK2D,CAAL,CAAgBzC,CAAAX,WAAhB,CAGE,IADA54C,CACA,CADSg8C,CAAAh8C,OACT,CAAOA,CAAA,EAAP,CAAA,CACE,GAAI,CAIF,GAHA+7C,CAGA,CAHQC,CAAA,CAASh8C,CAAT,CAGR,CACE,IAAKoB,CAAL;AAAa26C,CAAA9wC,IAAA,CAAUsuC,CAAV,CAAb,KAAsCl4B,CAAtC,CAA6C06B,CAAA16B,KAA7C,GACM,EAAA06B,CAAA5B,GAAA,CACI70C,EAAA,CAAOlE,CAAP,CAAcigB,CAAd,CADJ,CAEsB,QAFtB,GAEK,MAAOjgB,EAFZ,EAEkD,QAFlD,GAEkC,MAAOigB,EAFzC,EAGQm7B,KAAA,CAAMp7C,CAAN,CAHR,EAGwBo7C,KAAA,CAAMn7B,CAAN,CAHxB,CADN,CAKE46B,CAIA,CAJQ,CAAA,CAIR,CAHA5D,CAGA,CAHiB0D,CAGjB,CAFAA,CAAA16B,KAEA,CAFa06B,CAAA5B,GAAA,CAAWh2C,EAAA,CAAK/C,CAAL,CAAY,IAAZ,CAAX,CAA+BA,CAE5C,CADA26C,CAAA71C,GAAA,CAAS9E,CAAT,CAAkBigB,CAAD,GAAUm4B,CAAV,CAA0Bp4C,CAA1B,CAAkCigB,CAAnD,CAA0Dk4B,CAA1D,CACA,CAAU,CAAV,CAAI2C,CAAJ,GACEE,CAEA,CAFS,CAET,CAFaF,CAEb,CADKC,CAAA,CAASC,CAAT,CACL,GADuBD,CAAA,CAASC,CAAT,CACvB,CAD0C,EAC1C,EAAAD,CAAA,CAASC,CAAT,CAAA33C,KAAA,CAAsB,CACpBg4C,IAAKh8C,CAAA,CAAWs7C,CAAAtV,IAAX,CAAA,CAAwB,MAAxB,EAAkCsV,CAAAtV,IAAA19B,KAAlC,EAAoDgzC,CAAAtV,IAAA7jC,SAAA,EAApD,EAA4Em5C,CAAAtV,IAD7D,CAEpBhhB,OAAQrkB,CAFY,CAGpBskB,OAAQrE,CAHY,CAAtB,CAHF,CATF,KAkBO,IAAI06B,CAAJ,GAAc1D,CAAd,CAA8B,CAGnC4D,CAAA,CAAQ,CAAA,CACR,OAAM,CAJ6B,CAvBrC,CA8BF,MAAO90C,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAShB,GAAM,EAAAu1C,CAAA,CAAQnD,CAAAR,YAAR,EACDQ,CADC,GA5EkBhL,IA4ElB,EACqBgL,CAAAV,cADrB,CAAN,CAEE,IAAA,CAAOU,CAAP,GA9EsBhL,IA8EtB,EAA+B,EAAAmO,CAAA,CAAOnD,CAAAV,cAAP,CAA/B,CAAA,CACEU,CAAA,CAAUA,CAAAZ,QA/Cb,CAAH,MAkDUY,CAlDV,CAkDoBmD,CAlDpB,CAsDA,KAAKT,CAAL,EAAcK,CAAAt8C,OAAd,GAAsC,CAAAk8C,CAAA,EAAtC,CAEE,KAgeN5kC,EAAAkrB,QAheY,CAgeS,IAheT,CAAA4V,CAAA,CAAiB,QAAjB,CAGFD,CAHE,CAGGgE,CAHH,CAAN,CAvED,CAAH,MA6ESF,CA7ET,EA6EkBK,CAAAt8C,OA7ElB,CAiFA;IAsdFsX,CAAAkrB,QAtdE,CAsdmB,IAtdnB,CAAOma,CAAA38C,OAAP,CAAA,CACE,GAAI,CACF28C,CAAA15B,MAAA,EAAA,EADE,CAEF,MAAO9b,EAAP,CAAU,CACViP,CAAA,CAAkBjP,EAAlB,CADU,CA1GI,CAviBJ,CA0rBhBqF,SAAUA,QAAQ,EAAG,CAEnB,GAAIwsB,CAAA,IAAAA,YAAJ,CAAA,CACA,IAAI/a,EAAS,IAAA06B,QAEb,KAAA5K,WAAA,CAAgB,UAAhB,CACA,KAAA/U,YAAA,CAAmB,CAAA,CACnB,IAAI,IAAJ,GAAa1hB,CAAb,CAAA,CAEA,IAASslC,IAAAA,CAAT,GAAsB,KAAAzD,gBAAtB,CACEG,CAAA,CAAuB,IAAvB,CAA6B,IAAAH,gBAAA,CAAqByD,CAArB,CAA7B,CAA8DA,CAA9D,CAKE3+B,EAAA86B,YAAJ,EAA0B,IAA1B,GAAgC96B,CAAA86B,YAAhC,CAAqD,IAAAF,cAArD,CACI56B,EAAA+6B,YAAJ,EAA0B,IAA1B,GAAgC/6B,CAAA+6B,YAAhC,CAAqD,IAAAF,cAArD,CACI,KAAAA,cAAJ,GAAwB,IAAAA,cAAAD,cAAxB,CAA2D,IAAAA,cAA3D,CACI,KAAAA,cAAJ,GAAwB,IAAAA,cAAAC,cAAxB,CAA2D,IAAAA,cAA3D,CAGA;IAAAtsC,SAAA,CAAgB,IAAAsiC,QAAhB,CAA+B,IAAA3kC,OAA/B,CAA6C,IAAApH,WAA7C,CAA+D,IAAAw/B,YAA/D,CAAkFpgC,CAClF,KAAAyzB,IAAA,CAAW,IAAA5yB,OAAX,CAAyB,IAAA+jC,YAAzB,CAA4C8V,QAAQ,EAAG,CAAE,MAAO16C,EAAT,CACvD,KAAA+2C,YAAA,CAAmB,EAUnB,KAAAP,QAAA,CAAe,IAAAE,cAAf,CAAoC,IAAAC,cAApC,CAAyD,IAAAC,YAAzD,CACI,IAAAC,YADJ,CACuB,IAAAC,MADvB,CACoC,IAAAL,WADpC,CACsD,IA3BtD,CALA,CAFmB,CA1rBL,CA2vBhB2D,MAAOA,QAAQ,CAAC1B,CAAD,CAAO33B,CAAP,CAAe,CAC5B,MAAO9L,EAAA,CAAOyjC,CAAP,CAAA,CAAa,IAAb,CAAmB33B,CAAnB,CADqB,CA3vBd,CA4xBhBngB,WAAYA,QAAQ,CAAC83C,CAAD,CAAO,CAGpBvjC,CAAAkrB,QAAL,EAA4B8Z,CAAAt8C,OAA5B,EACE4V,CAAA8T,MAAA,CAAe,QAAQ,EAAG,CACpB4yB,CAAAt8C,OAAJ,EACEsX,CAAAw3B,QAAA,EAFsB,CAA1B,CAOFwN,EAAA73C,KAAA,CAAgB,CAACwF,MAAO,IAAR,CAAci0B,WAAY2c,CAA1B,CAAhB,CAXyB,CA5xBX,CA0yBhBzG,aAAcA,QAAQ,CAACluC,CAAD,CAAK,CACzBy2C,CAAAl4C,KAAA,CAAqByB,CAArB,CADyB,CA1yBX,CA21BhBiE,OAAQA,QAAQ,CAAC0wC,CAAD,CAAO,CACrB,GAAI,CAEF,MADAzB,EAAA,CAAW,QAAX,CACO;AAAA,IAAAmD,MAAA,CAAW1B,CAAX,CAFL,CAGF,MAAO1zC,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAHZ,OAKU,CAmQZmQ,CAAAkrB,QAAA,CAAqB,IAjQjB,IAAI,CACFlrB,CAAAw3B,QAAA,EADE,CAEF,MAAO3nC,CAAP,CAAU,CAEV,KADAiP,EAAA,CAAkBjP,CAAlB,CACMA,CAAAA,CAAN,CAFU,CAJJ,CANW,CA31BP,CA63BhBo7B,YAAaA,QAAQ,CAACsY,CAAD,CAAO,CAK1BiC,QAASA,EAAqB,EAAG,CAC/B7yC,CAAAsyC,MAAA,CAAY1B,CAAZ,CAD+B,CAJjC,IAAI5wC,EAAQ,IACZ4wC,EAAA,EAAQnB,CAAAj1C,KAAA,CAAqBq4C,CAArB,CACRnD,EAAA,EAH0B,CA73BZ,CAk6BhB/jB,IAAKA,QAAQ,CAAC7sB,CAAD,CAAOoe,CAAP,CAAiB,CAC5B,IAAI41B,EAAiB,IAAA7D,YAAA,CAAiBnwC,CAAjB,CAChBg0C,EAAL,GACE,IAAA7D,YAAA,CAAiBnwC,CAAjB,CADF,CAC2Bg0C,CAD3B,CAC4C,EAD5C,CAGAA,EAAAt4C,KAAA,CAAoB0iB,CAApB,CAEA,KAAIoyB,EAAU,IACd,GACOA,EAAAJ,gBAAA,CAAwBpwC,CAAxB,CAGL,GAFEwwC,CAAAJ,gBAAA,CAAwBpwC,CAAxB,CAEF,CAFkC,CAElC,EAAAwwC,CAAAJ,gBAAA,CAAwBpwC,CAAxB,CAAA,EAJF,OAKUwwC,CALV,CAKoBA,CAAAZ,QALpB,CAOA,KAAI1yC,EAAO,IACX,OAAO,SAAQ,EAAG,CAChB,IAAI+2C,EAAkBD,CAAA94C,QAAA,CAAuBkjB,CAAvB,CACG,GAAzB,GAAI61B,CAAJ,GACED,CAAA,CAAeC,CAAf,CACA,CADkC,IAClC,CAAA1D,CAAA,CAAuBrzC,CAAvB,CAA6B,CAA7B,CAAgC8C,CAAhC,CAFF,CAFgB,CAhBU,CAl6Bd,CAk9BhBk0C,MAAOA,QAAQ,CAACl0C,CAAD,CAAO2X,CAAP,CAAa,CAAA,IACtBxZ,EAAQ,EADc,CAEtB61C,CAFsB,CAGtB9yC,EAAQ,IAHc,CAItBwV,EAAkB,CAAA,CAJI,CAKtBV,EAAQ,CACNhW,KAAMA,CADA,CAENm0C,YAAajzC,CAFP;AAGNwV,gBAAiBA,QAAQ,EAAG,CAACA,CAAA,CAAkB,CAAA,CAAnB,CAHtB,CAINivB,eAAgBA,QAAQ,EAAG,CACzB3vB,CAAAG,iBAAA,CAAyB,CAAA,CADA,CAJrB,CAONA,iBAAkB,CAAA,CAPZ,CALc,CActBi+B,EAAev3C,EAAA,CAAO,CAACmZ,CAAD,CAAP,CAAgBld,SAAhB,CAA2B,CAA3B,CAdO,CAetBZ,CAfsB,CAenBjB,CAEP,GAAG,CACD+8C,CAAA,CAAiB9yC,CAAAivC,YAAA,CAAkBnwC,CAAlB,CAAjB,EAA4C7B,CAC5C6X,EAAAq+B,aAAA,CAAqBnzC,CAChBhJ,EAAA,CAAI,CAAT,KAAYjB,CAAZ,CAAqB+8C,CAAA/8C,OAArB,CAA4CiB,CAA5C,CAAgDjB,CAAhD,CAAwDiB,CAAA,EAAxD,CAGE,GAAK87C,CAAA,CAAe97C,CAAf,CAAL,CAMA,GAAI,CAEF87C,CAAA,CAAe97C,CAAf,CAAAoF,MAAA,CAAwB,IAAxB,CAA8B82C,CAA9B,CAFE,CAGF,MAAOh2C,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CATZ,IACE41C,EAAA74C,OAAA,CAAsBjD,CAAtB,CAAyB,CAAzB,CAEA,CADAA,CAAA,EACA,CAAAjB,CAAA,EAWJ,IAAIyf,CAAJ,CAEE,MADAV,EAAAq+B,aACOr+B,CADc,IACdA,CAAAA,CAGT9U,EAAA,CAAQA,CAAA0uC,QAzBP,CAAH,MA0BS1uC,CA1BT,CA4BA8U,EAAAq+B,aAAA,CAAqB,IAErB,OAAOr+B,EA/CmB,CAl9BZ,CA0hChBgvB,WAAYA,QAAQ,CAAChlC,CAAD,CAAO2X,CAAP,CAAa,CAAA,IAE3B64B,EADShL,IADkB,CAG3BmO,EAFSnO,IADkB,CAI3BxvB,EAAQ,CACNhW,KAAMA,CADA,CAENm0C,YALO3O,IAGD,CAGNG,eAAgBA,QAAQ,EAAG,CACzB3vB,CAAAG,iBAAA,CAAyB,CAAA,CADA,CAHrB,CAMNA,iBAAkB,CAAA,CANZ,CASZ,IAAK,CAZQqvB,IAYR4K,gBAAA,CAAuBpwC,CAAvB,CAAL,CAAmC,MAAOgW,EAM1C;IAnB+B,IAe3Bo+B,EAAev3C,EAAA,CAAO,CAACmZ,CAAD,CAAP,CAAgBld,SAAhB,CAA2B,CAA3B,CAfY,CAgBhBZ,CAhBgB,CAgBbjB,CAGlB,CAAQu5C,CAAR,CAAkBmD,CAAlB,CAAA,CAAyB,CACvB39B,CAAAq+B,aAAA,CAAqB7D,CACrB3c,EAAA,CAAY2c,CAAAL,YAAA,CAAoBnwC,CAApB,CAAZ,EAAyC,EACpC9H,EAAA,CAAI,CAAT,KAAYjB,CAAZ,CAAqB48B,CAAA58B,OAArB,CAAuCiB,CAAvC,CAA2CjB,CAA3C,CAAmDiB,CAAA,EAAnD,CAEE,GAAK27B,CAAA,CAAU37B,CAAV,CAAL,CAOA,GAAI,CACF27B,CAAA,CAAU37B,CAAV,CAAAoF,MAAA,CAAmB,IAAnB,CAAyB82C,CAAzB,CADE,CAEF,MAAOh2C,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CATZ,IACEy1B,EAAA14B,OAAA,CAAiBjD,CAAjB,CAAoB,CAApB,CAEA,CADAA,CAAA,EACA,CAAAjB,CAAA,EAeJ,IAAM,EAAA08C,CAAA,CAASnD,CAAAJ,gBAAA,CAAwBpwC,CAAxB,CAAT,EAA0CwwC,CAAAR,YAA1C,EACDQ,CADC,GAzCKhL,IAyCL,EACqBgL,CAAAV,cADrB,CAAN,CAEE,IAAA,CAAOU,CAAP,GA3CShL,IA2CT,EAA+B,EAAAmO,CAAA,CAAOnD,CAAAV,cAAP,CAA/B,CAAA,CACEU,CAAA,CAAUA,CAAAZ,QA1BS,CA+BzB55B,CAAAq+B,aAAA,CAAqB,IACrB,OAAOr+B,EAnDwB,CA1hCjB,CAilClB,KAAIzH,EAAa,IAAImhC,CAArB,CAGI6D,EAAahlC,CAAA+lC,aAAbf,CAAuC,EAH3C,CAIIK,EAAkBrlC,CAAAgmC,kBAAlBX,CAAiD,EAJrD,CAKIjD,EAAkBpiC,CAAAimC,kBAAlB7D,CAAiD,EAErD,OAAOpiC,EA1qCoD,CADjD,CAbgB,CAivC9BtH,QAASA,GAAqB,EAAG,CAAA,IAC3Bud,EAA6B,mCADF,CAE7BG,EAA8B,4CAkBhC;IAAAH,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAIjrB,EAAA,CAAUirB,CAAV,CAAJ,EACEF,CACO,CADsBE,CACtB,CAAA,IAFT,EAIOF,CAL0C,CAyBnD,KAAAG,4BAAA,CAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAIjrB,EAAA,CAAUirB,CAAV,CAAJ,EACEC,CACO,CADuBD,CACvB,CAAA,IAFT,EAIOC,CAL2C,CAQpD,KAAA9N,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO29B,SAAoB,CAACC,CAAD,CAAMC,CAAN,CAAe,CACxC,IAAIC,EAAQD,CAAA,CAAUhwB,CAAV,CAAwCH,CAApD,CACIqwB,CACJA,EAAA,CAAgB5Y,EAAA,CAAWyY,CAAX,CAAAx1B,KAChB,OAAsB,EAAtB,GAAI21B,CAAJ,EAA6BA,CAAA94C,MAAA,CAAoB64C,CAApB,CAA7B,CAGOF,CAHP,CACS,SADT,CACqBG,CALmB,CADrB,CArDQ,CAgFjCC,QAASA,GAAa,CAACC,CAAD,CAAU,CAC9B,GAAgB,MAAhB,GAAIA,CAAJ,CACE,MAAOA,EACF,IAAI39C,CAAA,CAAS29C,CAAT,CAAJ,CAAuB,CAK5B,GAA8B,EAA9B,CAAIA,CAAA75C,QAAA,CAAgB,KAAhB,CAAJ,CACE,KAAM85C,GAAA,CAAW,QAAX,CACsDD,CADtD,CAAN,CAGFA,CAAA,CAAUE,EAAA,CAAgBF,CAAhB,CAAAt2C,QAAA,CACY,QADZ,CACsB,IADtB,CAAAA,QAAA,CAEY,KAFZ,CAEmB,YAFnB,CAGV,OAAO,KAAI3C,MAAJ,CAAW,GAAX,CAAiBi5C,CAAjB,CAA2B,GAA3B,CAZqB,CAavB,GAAIj7C,EAAA,CAASi7C,CAAT,CAAJ,CAIL,MAAO,KAAIj5C,MAAJ,CAAW,GAAX,CAAiBi5C,CAAA15C,OAAjB,CAAkC,GAAlC,CAEP,MAAM25C,GAAA,CAAW,UAAX,CAAN,CAtB4B,CA4BhCE,QAASA,GAAc,CAACC,CAAD,CAAW,CAChC,IAAIC;AAAmB,EACnB37C,EAAA,CAAU07C,CAAV,CAAJ,EACE79C,CAAA,CAAQ69C,CAAR,CAAkB,QAAQ,CAACJ,CAAD,CAAU,CAClCK,CAAA15C,KAAA,CAAsBo5C,EAAA,CAAcC,CAAd,CAAtB,CADkC,CAApC,CAIF,OAAOK,EAPyB,CA8ElCpmC,QAASA,GAAoB,EAAG,CAC9B,IAAAqmC,aAAA,CAAoBA,EADU,KAI1BC,EAAuB,CAAC,MAAD,CAJG,CAK1BC,EAAuB,EAwB3B,KAAAD,qBAAA,CAA4BE,QAAQ,CAACn9C,CAAD,CAAQ,CACtCS,SAAA7B,OAAJ,GACEq+C,CADF,CACyBJ,EAAA,CAAe78C,CAAf,CADzB,CAGA,OAAOi9C,EAJmC,CAkC5C,KAAAC,qBAAA,CAA4BE,QAAQ,CAACp9C,CAAD,CAAQ,CACtCS,SAAA7B,OAAJ,GACEs+C,CADF,CACyBL,EAAA,CAAe78C,CAAf,CADzB,CAGA,OAAOk9C,EAJmC,CAO5C,KAAA1+B,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAAC4D,CAAD,CAAY,CAW5Ci7B,QAASA,EAAQ,CAACX,CAAD,CAAU5T,CAAV,CAAqB,CACpC,MAAgB,MAAhB,GAAI4T,CAAJ,CACS3a,EAAA,CAAgB+G,CAAhB,CADT,CAIS,CAAE,CAAA4T,CAAA5jC,KAAA,CAAagwB,CAAAjiB,KAAb,CALyB,CA+BtCy2B,QAASA,EAAkB,CAACC,CAAD,CAAO,CAChC,IAAIC,EAAaA,QAA+B,CAACC,CAAD,CAAe,CAC7D,IAAAC,qBAAA,CAA4BC,QAAQ,EAAG,CACrC,MAAOF,EAD8B,CADsB,CAK3DF,EAAJ,GACEC,CAAAv7B,UADF,CACyB,IAAIs7B,CAD7B,CAGAC,EAAAv7B,UAAA4iB,QAAA,CAA+B+Y,QAAmB,EAAG,CACnD,MAAO,KAAAF,qBAAA,EAD4C,CAGrDF;CAAAv7B,UAAAzgB,SAAA,CAAgCq8C,QAAoB,EAAG,CACrD,MAAO,KAAAH,qBAAA,EAAAl8C,SAAA,EAD8C,CAGvD,OAAOg8C,EAfyB,CAxClC,IAAIM,EAAgBA,QAAsB,CAAC53C,CAAD,CAAO,CAC/C,KAAMy2C,GAAA,CAAW,QAAX,CAAN,CAD+C,CAI7Cv6B,EAAAD,IAAA,CAAc,WAAd,CAAJ,GACE27B,CADF,CACkB17B,CAAAvY,IAAA,CAAc,WAAd,CADlB,CAN4C,KA4DxCk0C,EAAyBT,CAAA,EA5De,CA6DxCU,EAAS,EAEbA,EAAA,CAAOhB,EAAA/jB,KAAP,CAAA,CAA4BqkB,CAAA,CAAmBS,CAAnB,CAC5BC,EAAA,CAAOhB,EAAAiB,IAAP,CAAA,CAA2BX,CAAA,CAAmBS,CAAnB,CAC3BC,EAAA,CAAOhB,EAAAkB,IAAP,CAAA,CAA2BZ,CAAA,CAAmBS,CAAnB,CAC3BC,EAAA,CAAOhB,EAAAmB,GAAP,CAAA,CAA0Bb,CAAA,CAAmBS,CAAnB,CAC1BC,EAAA,CAAOhB,EAAA9jB,aAAP,CAAA,CAAoCokB,CAAA,CAAmBU,CAAA,CAAOhB,EAAAkB,IAAP,CAAnB,CAyGpC,OAAO,CAAEE,QAtFTA,QAAgB,CAAC5jC,CAAD,CAAOijC,CAAP,CAAqB,CACnC,IAAIY,EAAeL,CAAA1+C,eAAA,CAAsBkb,CAAtB,CAAA,CAA8BwjC,CAAA,CAAOxjC,CAAP,CAA9B,CAA6C,IAChE,IAAK6jC,CAAAA,CAAL,CACE,KAAM1B,GAAA,CAAW,UAAX,CAEFniC,CAFE,CAEIijC,CAFJ,CAAN,CAIF,GAAqB,IAArB,GAAIA,CAAJ,EAA6BA,CAA7B,GAA8Cl/C,CAA9C,EAA4E,EAA5E,GAA2Dk/C,CAA3D,CACE,MAAOA,EAIT,IAA4B,QAA5B,GAAI,MAAOA,EAAX,CACE,KAAMd,GAAA,CAAW,OAAX,CAEFniC,CAFE,CAAN,CAIF,MAAO,KAAI6jC,CAAJ,CAAgBZ,CAAhB,CAjB4B,CAsF9B,CACE7Y,WA1BTA,QAAmB,CAACpqB,CAAD,CAAO8jC,CAAP,CAAqB,CACtC,GAAqB,IAArB;AAAIA,CAAJ,EAA6BA,CAA7B,GAA8C//C,CAA9C,EAA4E,EAA5E,GAA2D+/C,CAA3D,CACE,MAAOA,EAET,KAAI1yC,EAAeoyC,CAAA1+C,eAAA,CAAsBkb,CAAtB,CAAA,CAA8BwjC,CAAA,CAAOxjC,CAAP,CAA9B,CAA6C,IAChE,IAAI5O,CAAJ,EAAmB0yC,CAAnB,WAA2C1yC,EAA3C,CACE,MAAO0yC,EAAAZ,qBAAA,EAKT,IAAIljC,CAAJ,GAAawiC,EAAA9jB,aAAb,CAAwC,CAzIpC4P,IAAAA,EAAYlF,EAAA,CA0ImB0a,CA1IR98C,SAAA,EAAX,CAAZsnC,CACAjpC,CADAipC,CACG1f,CADH0f,CACMyV,EAAU,CAAA,CAEf1+C,EAAA,CAAI,CAAT,KAAYupB,CAAZ,CAAgB6zB,CAAAr+C,OAAhB,CAA6CiB,CAA7C,CAAiDupB,CAAjD,CAAoDvpB,CAAA,EAApD,CACE,GAAIw9C,CAAA,CAASJ,CAAA,CAAqBp9C,CAArB,CAAT,CAAkCipC,CAAlC,CAAJ,CAAkD,CAChDyV,CAAA,CAAU,CAAA,CACV,MAFgD,CAKpD,GAAIA,CAAJ,CAEE,IAAK1+C,CAAO,CAAH,CAAG,CAAAupB,CAAA,CAAI8zB,CAAAt+C,OAAhB,CAA6CiB,CAA7C,CAAiDupB,CAAjD,CAAoDvpB,CAAA,EAApD,CACE,GAAIw9C,CAAA,CAASH,CAAA,CAAqBr9C,CAArB,CAAT,CAAkCipC,CAAlC,CAAJ,CAAkD,CAChDyV,CAAA,CAAU,CAAA,CACV,MAFgD,CA8HpD,GAxHKA,CAwHL,CACE,MAAOD,EAEP,MAAM3B,GAAA,CAAW,UAAX,CAEF2B,CAAA98C,SAAA,EAFE,CAAN,CAJoC,CAQjC,GAAIgZ,CAAJ,GAAawiC,EAAA/jB,KAAb,CACL,MAAO6kB,EAAA,CAAcQ,CAAd,CAET,MAAM3B,GAAA,CAAW,QAAX,CAAN,CAtBsC,CAyBjC,CAEE9X,QAlDTA,QAAgB,CAACyZ,CAAD,CAAe,CAC7B,MAAIA,EAAJ,WAA4BP,EAA5B,CACSO,CAAAZ,qBAAA,EADT,CAGSY,CAJoB,CAgDxB,CA5KqC,CAAlC,CAtEkB,CAkhBhC7nC,QAASA,GAAY,EAAG,CACtB,IAAIgW,EAAU,CAAA,CAad,KAAAA,QAAA,CAAe+xB,QAAQ,CAACx+C,CAAD,CAAQ,CACzBS,SAAA7B,OAAJ;CACE6tB,CADF,CACY,CAAEzsB,CAAAA,CADd,CAGA,OAAOysB,EAJsB,CAsD/B,KAAAjO,KAAA,CAAY,CAAC,QAAD,CAAW,cAAX,CAA2B,QAAQ,CACjCxI,CADiC,CACvBU,CADuB,CACT,CAGpC,GAAI+V,CAAJ,EAAsB,CAAtB,CAAegyB,EAAf,CACE,KAAM9B,GAAA,CAAW,UAAX,CAAN,CAMF,IAAI+B,EAAM36C,EAAA,CAAYi5C,EAAZ,CAaV0B,EAAAC,UAAA,CAAgBC,QAAQ,EAAG,CACzB,MAAOnyB,EADkB,CAG3BiyB,EAAAN,QAAA,CAAc1nC,CAAA0nC,QACdM,EAAA9Z,WAAA,CAAiBluB,CAAAkuB,WACjB8Z,EAAA7Z,QAAA,CAAcnuB,CAAAmuB,QAETpY,EAAL,GACEiyB,CAAAN,QACA,CADcM,CAAA9Z,WACd,CAD+Bia,QAAQ,CAACrkC,CAAD,CAAOxa,CAAP,CAAc,CAAE,MAAOA,EAAT,CACrD,CAAA0+C,CAAA7Z,QAAA,CAAc7jC,EAFhB,CAwBA09C,EAAAI,QAAA,CAAcC,QAAmB,CAACvkC,CAAD,CAAOi/B,CAAP,CAAa,CAC5C,IAAI7/B,EAAS5D,CAAA,CAAOyjC,CAAP,CACb,OAAI7/B,EAAAoa,QAAJ,EAAsBpa,CAAA/L,SAAtB,CACS+L,CADT,CAGS5D,CAAA,CAAOyjC,CAAP,CAAa,QAAQ,CAACz5C,CAAD,CAAQ,CAClC,MAAO0+C,EAAA9Z,WAAA,CAAepqB,CAAf,CAAqBxa,CAArB,CAD2B,CAA7B,CALmC,CAtDV,KAoThC0F,EAAQg5C,CAAAI,QApTwB,CAqThCla,EAAa8Z,CAAA9Z,WArTmB,CAsThCwZ,EAAUM,CAAAN,QAEdn/C,EAAA,CAAQ+9C,EAAR,CAAsB,QAAQ,CAACgC,CAAD,CAAYr3C,CAAZ,CAAkB,CAC9C,IAAIs3C,EAAQx8C,CAAA,CAAUkF,CAAV,CACZ+2C,EAAA,CAAI5mC,EAAA,CAAU,WAAV,CAAwBmnC,CAAxB,CAAJ,CAAA,CAAsC,QAAQ,CAACxF,CAAD,CAAO,CACnD,MAAO/zC,EAAA,CAAMs5C,CAAN;AAAiBvF,CAAjB,CAD4C,CAGrDiF,EAAA,CAAI5mC,EAAA,CAAU,cAAV,CAA2BmnC,CAA3B,CAAJ,CAAA,CAAyC,QAAQ,CAACj/C,CAAD,CAAQ,CACvD,MAAO4kC,EAAA,CAAWoa,CAAX,CAAsBh/C,CAAtB,CADgD,CAGzD0+C,EAAA,CAAI5mC,EAAA,CAAU,WAAV,CAAwBmnC,CAAxB,CAAJ,CAAA,CAAsC,QAAQ,CAACj/C,CAAD,CAAQ,CACpD,MAAOo+C,EAAA,CAAQY,CAAR,CAAmBh/C,CAAnB,CAD6C,CARR,CAAhD,CAaA,OAAO0+C,EArU6B,CAD1B,CApEU,CA4ZxB7nC,QAASA,GAAgB,EAAG,CAC1B,IAAA2H,KAAA,CAAY,CAAC,SAAD,CAAY,WAAZ,CAAyB,QAAQ,CAAClH,CAAD,CAAUxC,CAAV,CAAqB,CAAA,IAC5DoqC,EAAe,EAD6C,CAE5DC,EACEv+C,CAAA,CAAI,CAAC,eAAAkY,KAAA,CAAqBrW,CAAA,CAAU28C,CAAC9nC,CAAA+nC,UAADD,EAAsB,EAAtBA,WAAV,CAArB,CAAD,EAAyE,EAAzE,EAA6E,CAA7E,CAAJ,CAH0D,CAI5DE,EAAQ,QAAAn2C,KAAA,CAAci2C,CAAC9nC,CAAA+nC,UAADD,EAAsB,EAAtBA,WAAd,CAJoD,CAK5D9gD,EAAWwW,CAAA,CAAU,CAAV,CAAXxW,EAA2B,EALiC,CAM5DihD,CAN4D,CAO5DC,EAAc,2BAP8C,CAQ5DC,EAAYnhD,CAAAykC,KAAZ0c,EAA6BnhD,CAAAykC,KAAAtzB,MAR+B,CAS5DiwC,EAAc,CAAA,CAT8C,CAU5DC,EAAa,CAAA,CAGjB,IAAIF,CAAJ,CAAe,CACb,IAASx9C,IAAAA,CAAT,GAAiBw9C,EAAjB,CACE,GAAI/7C,CAAJ,CAAY87C,CAAA1mC,KAAA,CAAiB7W,CAAjB,CAAZ,CAAoC,CAClCs9C,CAAA,CAAe77C,CAAA,CAAM,CAAN,CACf67C,EAAA,CAAeA,CAAAn4B,OAAA,CAAoB,CAApB,CAAuB,CAAvB,CAAAlP,YAAA,EAAf,CAAyDqnC,CAAAn4B,OAAA,CAAoB,CAApB,CACzD,MAHkC,CAOjCm4B,CAAL,GACEA,CADF,CACkB,eADlB,EACqCE,EADrC,EACmD,QADnD,CAIAC;CAAA,CAAc,CAAG,EAAC,YAAD,EAAiBD,EAAjB,EAAgCF,CAAhC,CAA+C,YAA/C,EAA+DE,EAA/D,CACjBE,EAAA,CAAc,CAAG,EAAC,WAAD,EAAgBF,EAAhB,EAA+BF,CAA/B,CAA8C,WAA9C,EAA6DE,EAA7D,CAEbN,EAAAA,CAAJ,EAAiBO,CAAjB,EAAkCC,CAAlC,GACED,CACA,CADc3gD,CAAA,CAAST,CAAAykC,KAAAtzB,MAAAmwC,iBAAT,CACd,CAAAD,CAAA,CAAa5gD,CAAA,CAAST,CAAAykC,KAAAtzB,MAAAowC,gBAAT,CAFf,CAhBa,CAuBf,MAAO,CAULr6B,QAAS,EAAGA,CAAAlO,CAAAkO,QAAH,EAAsBs6B,CAAAxoC,CAAAkO,QAAAs6B,UAAtB,EAA+D,CAA/D,CAAqDX,CAArD,EAAsEG,CAAtE,CAVJ,CAYLS,SAAUA,QAAQ,CAACpiC,CAAD,CAAQ,CAMxB,GAAc,OAAd,GAAIA,CAAJ,EAAiC,EAAjC,EAAyB8gC,EAAzB,CAAqC,MAAO,CAAA,CAE5C,IAAIt9C,CAAA,CAAY+9C,CAAA,CAAavhC,CAAb,CAAZ,CAAJ,CAAsC,CACpC,IAAIqiC,EAAS1hD,CAAAsa,cAAA,CAAuB,KAAvB,CACbsmC,EAAA,CAAavhC,CAAb,CAAA,CAAsB,IAAtB,CAA6BA,CAA7B,GAAsCqiC,EAFF,CAKtC,MAAOd,EAAA,CAAavhC,CAAb,CAbiB,CAZrB,CA2BLpP,IAAKA,EAAA,EA3BA,CA4BLgxC,aAAcA,CA5BT,CA6BLG,YAAaA,CA7BR,CA8BLC,WAAYA,CA9BP,CA+BLR,QAASA,CA/BJ,CApCyD,CAAtD,CADc,CA4F5BloC,QAASA,GAAwB,EAAG,CAClC,IAAAuH,KAAA,CAAY,CAAC,gBAAD,CAAmB,OAAnB,CAA4B,IAA5B,CAAkC,QAAQ,CAAC1H,CAAD,CAAiBtB,CAAjB,CAAwBY,CAAxB,CAA4B,CAChF6pC,QAASA,EAAe,CAACC,CAAD,CAAMC,CAAN,CAA0B,CACrCF,CACXG,qBAAA,EAEA;IAAIliB,EAAoB1oB,CAAAyoB,SAApBC,EAAsC1oB,CAAAyoB,SAAAC,kBAEtCl/B,EAAA,CAAQk/B,CAAR,CAAJ,CACEA,CADF,CACsBA,CAAAnwB,OAAA,CAAyB,QAAQ,CAACsyC,CAAD,CAAc,CACjE,MAAOA,EAAP,GAAuBjjB,EAD0C,CAA/C,CADtB,CAIWc,CAJX,GAIiCd,EAJjC,GAKEc,CALF,CAKsB,IALtB,CAaA,OAAO1oB,EAAA3L,IAAA,CAAUq2C,CAAV,CALWI,CAChB/+B,MAAOzK,CADSwpC,CAEhBpiB,kBAAmBA,CAFHoiB,CAKX,CAAA/oB,KAAA,CACC,QAAQ,CAACwH,CAAD,CAAW,CAnBhBkhB,CAoBPG,qBAAA,EACA,OAAOrhB,EAAA/1B,KAFgB,CADpB,CAMPu3C,QAAoB,CAACvhB,CAAD,CAAO,CAxBhBihB,CAyBTG,qBAAA,EACA,IAAKD,CAAAA,CAAL,CACE,KAAMp1B,GAAA,CAAe,QAAf,CAAyDm1B,CAAzD,CAAN,CAEF,MAAO9pC,EAAA8oB,OAAA,CAAUF,CAAV,CALkB,CANpB,CAnByC,CAkClDihB,CAAAG,qBAAA,CAAuC,CAEvC,OAAOH,EArCyE,CAAtE,CADsB,CA0CpC9oC,QAASA,GAAqB,EAAG,CAC/B,IAAAqH,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,WAA3B,CACP,QAAQ,CAACtI,CAAD,CAAe1B,CAAf,CAA2BoB,CAA3B,CAAsC,CA6GjD,MApGkB4qC,CAcN,aAAeC,QAAQ,CAACj+C,CAAD,CAAUs6B,CAAV,CAAsB4jB,CAAtB,CAAsC,CACnE91B,CAAAA,CAAWpoB,CAAAm+C,uBAAA,CAA+B,YAA/B,CACf,KAAIC,EAAU,EACd3hD,EAAA,CAAQ2rB,CAAR,CAAkB,QAAQ,CAAC+Q,CAAD,CAAU,CAClC,IAAIklB;AAAcz3C,EAAA5G,QAAA,CAAgBm5B,CAAhB,CAAA3yB,KAAA,CAA8B,UAA9B,CACd63C,EAAJ,EACE5hD,CAAA,CAAQ4hD,CAAR,CAAqB,QAAQ,CAACC,CAAD,CAAc,CACrCJ,CAAJ,CAEMv3C,CADUuzC,IAAIj5C,MAAJi5C,CAAW,SAAXA,CAAuBE,EAAA,CAAgB9f,CAAhB,CAAvB4f,CAAqD,aAArDA,CACVvzC,MAAA,CAAa23C,CAAb,CAFN,EAGIF,CAAAv9C,KAAA,CAAas4B,CAAb,CAHJ,CAM0C,EAN1C,EAMMmlB,CAAAj+C,QAAA,CAAoBi6B,CAApB,CANN,EAOI8jB,CAAAv9C,KAAA,CAAas4B,CAAb,CARqC,CAA3C,CAHgC,CAApC,CAiBA,OAAOilB,EApBgE,CAdvDJ,CAiDN,WAAaO,QAAQ,CAACv+C,CAAD,CAAUs6B,CAAV,CAAsB4jB,CAAtB,CAAsC,CAErE,IADA,IAAIM,EAAW,CAAC,KAAD,CAAQ,UAAR,CAAoB,OAApB,CAAf,CACS13B,EAAI,CAAb,CAAgBA,CAAhB,CAAoB03B,CAAApiD,OAApB,CAAqC,EAAE0qB,CAAvC,CAA0C,CAGxC,IAAIrN,EAAWzZ,CAAA4X,iBAAA,CADA,GACA,CADM4mC,CAAA,CAAS13B,CAAT,CACN,CADoB,OACpB,EAFOo3B,CAAAO,CAAiB,GAAjBA,CAAuB,IAE9B,EADgD,GAChD,CADsDnkB,CACtD,CADmE,IACnE,CACf,IAAI7gB,CAAArd,OAAJ,CACE,MAAOqd,EAL+B,CAF2B,CAjDrDukC,CAoEN,YAAcU,QAAQ,EAAG,CACnC,MAAOtrC,EAAAgQ,IAAA,EAD4B,CApEnB46B,CAiFN,YAAcW,QAAQ,CAACv7B,CAAD,CAAM,CAClCA,CAAJ,GAAYhQ,CAAAgQ,IAAA,EAAZ,GACEhQ,CAAAgQ,IAAA,CAAcA,CAAd,CACA,CAAA1P,CAAAw3B,QAAA,EAFF,CADsC,CAjFtB8S,CAgGN,WAAaY,QAAQ,CAAC16B,CAAD,CAAW,CAC1ClS,CAAAgS,gCAAA,CAAyCE,CAAzC,CAD0C,CAhG1B85B,CAT+B,CADvC,CADmB,CAmHjCnpC,QAASA,GAAgB,EAAG,CAC1B,IAAAmH,KAAA;AAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,IAA3B,CAAiC,KAAjC,CAAwC,mBAAxC,CACP,QAAQ,CAACtI,CAAD,CAAe1B,CAAf,CAA2B4B,CAA3B,CAAiCE,CAAjC,CAAwCtB,CAAxC,CAA2D,CA6BtEgtB,QAASA,EAAO,CAACl9B,CAAD,CAAK0jB,CAAL,CAAY0d,CAAZ,CAAyB,CAAA,IACnCI,EAAallC,CAAA,CAAU8kC,CAAV,CAAbI,EAAuC,CAACJ,CADL,CAEnC7E,EAAW/Y,CAACge,CAAA,CAAYhwB,CAAZ,CAAkBF,CAAnBkS,OAAA,EAFwB,CAGnC4X,EAAUmB,CAAAnB,QAGdzX,EAAA,CAAYjU,CAAA8T,MAAA,CAAe,QAAQ,EAAG,CACpC,GAAI,CACF+Y,CAAAC,QAAA,CAAiBx8B,CAAA,EAAjB,CADE,CAEF,MAAOiB,CAAP,CAAU,CACVs7B,CAAAnC,OAAA,CAAgBn5B,CAAhB,CACA,CAAAiP,CAAA,CAAkBjP,CAAlB,CAFU,CAFZ,OAMQ,CACN,OAAOs7C,CAAA,CAAUnhB,CAAAohB,YAAV,CADD,CAIHhb,CAAL,EAAgBpwB,CAAAnN,OAAA,EAXoB,CAA1B,CAYTyf,CAZS,CAcZ0X,EAAAohB,YAAA,CAAsB74B,CACtB44B,EAAA,CAAU54B,CAAV,CAAA,CAAuB4Y,CAEvB,OAAOnB,EAvBgC,CA5BzC,IAAImhB,EAAY,EAmEhBrf,EAAAtZ,OAAA,CAAiB64B,QAAQ,CAACrhB,CAAD,CAAU,CACjC,MAAIA,EAAJ,EAAeA,CAAAohB,YAAf,GAAsCD,EAAtC,EACEA,CAAA,CAAUnhB,CAAAohB,YAAV,CAAApiB,OAAA,CAAsC,UAAtC,CAEO,CADP,OAAOmiB,CAAA,CAAUnhB,CAAAohB,YAAV,CACA,CAAA9sC,CAAA8T,MAAAI,OAAA,CAAsBwX,CAAAohB,YAAtB,CAHT,EAKO,CAAA,CAN0B,CASnC,OAAOtf,EA7E+D,CAD5D,CADc,CAkJ5B4B,QAASA,GAAU,CAAChe,CAAD,CAAM,CAGnB64B,EAAJ,GAGE+C,CAAA5lC,aAAA,CAA4B,MAA5B,CAAoCiL,CAApC,CACA,CAAAA,CAAA,CAAO26B,CAAA36B,KAJT,CAOA26B;CAAA5lC,aAAA,CAA4B,MAA5B,CAAoCiL,CAApC,CAGA,OAAO,CACLA,KAAM26B,CAAA36B,KADD,CAELgd,SAAU2d,CAAA3d,SAAA,CAA0B2d,CAAA3d,SAAAz9B,QAAA,CAAgC,IAAhC,CAAsC,EAAtC,CAA1B,CAAsE,EAF3E,CAGLoW,KAAMglC,CAAAhlC,KAHD,CAILmtB,OAAQ6X,CAAA7X,OAAA,CAAwB6X,CAAA7X,OAAAvjC,QAAA,CAA8B,KAA9B,CAAqC,EAArC,CAAxB,CAAmE,EAJtE,CAKL2d,KAAMy9B,CAAAz9B,KAAA,CAAsBy9B,CAAAz9B,KAAA3d,QAAA,CAA4B,IAA5B,CAAkC,EAAlC,CAAtB,CAA8D,EAL/D,CAML6iC,SAAUuY,CAAAvY,SANL,CAOLE,KAAMqY,CAAArY,KAPD,CAQLM,SAAiD,GAAvC,GAAC+X,CAAA/X,SAAAxlC,OAAA,CAA+B,CAA/B,CAAD,CACNu9C,CAAA/X,SADM,CAEN,GAFM,CAEA+X,CAAA/X,SAVL,CAbgB,CAkCzB1H,QAASA,GAAe,CAAC0f,CAAD,CAAa,CAC/B7nC,CAAAA,CAAU7a,CAAA,CAAS0iD,CAAT,CAAD,CAAyB7d,EAAA,CAAW6d,CAAX,CAAzB,CAAkDA,CAC/D,OAAQ7nC,EAAAiqB,SAAR,GAA4B6d,EAAA7d,SAA5B,EACQjqB,CAAA4C,KADR,GACwBklC,EAAAllC,KAHW,CA+CrCjF,QAASA,GAAe,EAAG,CACzB,IAAAiH,KAAA,CAAYtd,EAAA,CAAQ7C,CAAR,CADa,CAiG3B8W,QAASA,GAAe,CAAC5M,CAAD,CAAW,CAWjCk0B,QAASA,EAAQ,CAAC90B,CAAD,CAAOgF,CAAP,CAAgB,CAC/B,GAAItL,CAAA,CAASsG,CAAT,CAAJ,CAAoB,CAClB,IAAIg6C,EAAU,EACd1iD,EAAA,CAAQ0I,CAAR,CAAc,QAAQ,CAACoG,CAAD,CAAS3O,CAAT,CAAc,CAClCuiD,CAAA,CAAQviD,CAAR,CAAA,CAAeq9B,CAAA,CAASr9B,CAAT,CAAc2O,CAAd,CADmB,CAApC,CAGA,OAAO4zC,EALW,CAOlB,MAAOp5C,EAAAoE,QAAA,CAAiBhF,CAAjB;AAlBEi6C,QAkBF,CAAgCj1C,CAAhC,CARsB,CAWjC,IAAA8vB,SAAA,CAAgBA,CAEhB,KAAAje,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAAC4D,CAAD,CAAY,CAC5C,MAAO,SAAQ,CAACza,CAAD,CAAO,CACpB,MAAOya,EAAAvY,IAAA,CAAclC,CAAd,CAzBEi6C,QAyBF,CADa,CADsB,CAAlC,CAoBZnlB,EAAA,CAAS,UAAT,CAAqBolB,EAArB,CACAplB,EAAA,CAAS,MAAT,CAAiBqlB,EAAjB,CACArlB,EAAA,CAAS,QAAT,CAAmBslB,EAAnB,CACAtlB,EAAA,CAAS,MAAT,CAAiBulB,EAAjB,CACAvlB,EAAA,CAAS,SAAT,CAAoBwlB,EAApB,CACAxlB,EAAA,CAAS,WAAT,CAAsBylB,EAAtB,CACAzlB,EAAA,CAAS,QAAT,CAAmB0lB,EAAnB,CACA1lB,EAAA,CAAS,SAAT,CAAoB2lB,EAApB,CACA3lB,EAAA,CAAS,WAAT,CAAsB4lB,EAAtB,CApDiC,CA0KnCN,QAASA,GAAY,EAAG,CACtB,MAAO,SAAQ,CAACp/C,CAAD,CAAQm6B,CAAR,CAAoBwlB,CAApB,CAAgC,CAC7C,GAAK,CAAAtjD,CAAA,CAAQ2D,CAAR,CAAL,CAAqB,MAAOA,EAG5B,KAAI4/C,CAEJ,QAAQ,MAAOzlB,EAAf,EACE,KAAK,UAAL,CAEE,KACF,MAAK,SAAL,CACA,KAAK,QAAL,CACA,KAAK,QAAL,CACEylB,CAAA,CAAsB,CAAA,CAExB,MAAK,QAAL,CAEEC,CAAA,CAAcC,EAAA,CAAkB3lB,CAAlB,CAA8BwlB,CAA9B,CAA0CC,CAA1C,CACd,MACF,SACE,MAAO5/C,EAdX,CAiBA,MAAOA,EAAAoL,OAAA,CAAay0C,CAAb,CAvBsC,CADzB,CA6BxBC,QAASA,GAAiB,CAAC3lB,CAAD,CAAawlB,CAAb,CAAyBC,CAAzB,CAA8C,CAGnD,CAAA,CAAnB,GAAID,CAAJ,CACEA,CADF,CACep+C,EADf,CAEY7E,CAAA,CAAWijD,CAAX,CAFZ;CAGEA,CAHF,CAGeA,QAAQ,CAACI,CAAD,CAASC,CAAT,CAAmB,CACtC,GAAIthD,CAAA,CAASqhD,CAAT,CAAJ,EAAwBrhD,CAAA,CAASshD,CAAT,CAAxB,CAEE,MAAO,CAAA,CAGTD,EAAA,CAASjgD,CAAA,CAAU,EAAV,CAAeigD,CAAf,CACTC,EAAA,CAAWlgD,CAAA,CAAU,EAAV,CAAekgD,CAAf,CACX,OAAqC,EAArC,GAAOD,CAAA7/C,QAAA,CAAe8/C,CAAf,CAR+B,CAH1C,CAmBA,OAJcH,SAAQ,CAACI,CAAD,CAAO,CAC3B,MAAOC,GAAA,CAAYD,CAAZ,CAAkB9lB,CAAlB,CAA8BwlB,CAA9B,CAA0CC,CAA1C,CADoB,CAlByC,CAyBxEM,QAASA,GAAW,CAACH,CAAD,CAASC,CAAT,CAAmBL,CAAnB,CAA+BC,CAA/B,CAAoD,CACtE,IAAIO,EAAa,MAAOJ,EAAxB,CACIK,EAAe,MAAOJ,EAE1B,IAAsB,QAAtB,GAAKI,CAAL,EAA2D,GAA3D,GAAoCJ,CAAA1+C,OAAA,CAAgB,CAAhB,CAApC,CACE,MAAO,CAAC4+C,EAAA,CAAYH,CAAZ,CAAoBC,CAAAt6B,UAAA,CAAmB,CAAnB,CAApB,CAA2Ci6B,CAA3C,CAAuDC,CAAvD,CACH,IAAmB,OAAnB,GAAIO,CAAJ,CAGL,MAAOJ,EAAAv/B,KAAA,CAAY,QAAQ,CAACy/B,CAAD,CAAO,CAChC,MAAOC,GAAA,CAAYD,CAAZ,CAAkBD,CAAlB,CAA4BL,CAA5B,CAAwCC,CAAxC,CADyB,CAA3B,CAKT,QAAQO,CAAR,EACE,KAAK,QAAL,CACE,IAAI1jD,CACJ,IAAImjD,CAAJ,CAAyB,CACvB,IAAKnjD,CAAL,GAAYsjD,EAAZ,CACE,GAAuB,GAAvB,GAAKtjD,CAAA6E,OAAA,CAAW,CAAX,CAAL,EAA+B4+C,EAAA,CAAYH,CAAA,CAAOtjD,CAAP,CAAZ,CAAyBujD,CAAzB,CAAmCL,CAAnC,CAA/B,CACE,MAAO,CAAA,CAGX,OAAO,CAAA,CANgB,CAOlB,GAAqB,QAArB,GAAIS,CAAJ,CAA+B,CACpC,IAAK3jD,CAAL,GAAYujD,EAAZ,CAEE,GADIK,CACA,CADcL,CAAA,CAASvjD,CAAT,CACd,CAAA,CAAAC,CAAA,CAAW2jD,CAAX,CAAA,GAIAC,CAEC,CAFqB,GAErB,GAFa7jD,CAEb,CAAA,CAAAyjD,EAAA,CADWI,CAAAC,CAAcR,CAAdQ,CAAuBR,CAAA,CAAOtjD,CAAP,CAClC,CAAuB4jD,CAAvB,CAAoCV,CAApC,CAAgDW,CAAhD,CAND,CAAJ,CAOE,MAAO,CAAA,CAGX,OAAO,CAAA,CAb6B,CAepC,MAAOX,EAAA,CAAWI,CAAX;AAAmBC,CAAnB,CAGX,MAAK,UAAL,CACE,MAAO,CAAA,CACT,SACE,MAAOL,EAAA,CAAWI,CAAX,CAAmBC,CAAnB,CA/BX,CAdsE,CAsGxEd,QAASA,GAAc,CAACsB,CAAD,CAAU,CAC/B,IAAIC,EAAUD,CAAAvc,eACd,OAAO,SAAQ,CAACyc,CAAD,CAASC,CAAT,CAAyBC,CAAzB,CAAuC,CAChDpiD,CAAA,CAAYmiD,CAAZ,CAAJ,GACEA,CADF,CACmBF,CAAA3b,aADnB,CAIItmC,EAAA,CAAYoiD,CAAZ,CAAJ,GACEA,CADF,CACiBH,CAAArc,SAAA,CAAiB,CAAjB,CAAAG,QADjB,CAKA,OAAkB,KAAX,EAACmc,CAAD,CACDA,CADC,CAEDG,EAAA,CAAaH,CAAb,CAAqBD,CAAArc,SAAA,CAAiB,CAAjB,CAArB,CAA0Cqc,CAAAtc,UAA1C,CAA6Dsc,CAAAvc,YAA7D,CAAkF0c,CAAlF,CAAAn9C,QAAA,CACU,SADV,CACqBk9C,CADrB,CAZ8C,CAFvB,CAuEjCnB,QAASA,GAAY,CAACgB,CAAD,CAAU,CAC7B,IAAIC,EAAUD,CAAAvc,eACd,OAAO,SAAQ,CAAC6c,CAAD,CAASF,CAAT,CAAuB,CAGpC,MAAkB,KAAX,EAACE,CAAD,CACDA,CADC,CAEDD,EAAA,CAAaC,CAAb,CAAqBL,CAAArc,SAAA,CAAiB,CAAjB,CAArB,CAA0Cqc,CAAAtc,UAA1C,CAA6Dsc,CAAAvc,YAA7D,CACa0c,CADb,CAL8B,CAFT,CAa/BC,QAASA,GAAY,CAACC,CAAD,CAASxwC,CAAT,CAAkBywC,CAAlB,CAA4BC,CAA5B,CAAwCJ,CAAxC,CAAsD,CACzE,GAAK,CAAAK,QAAA,CAASH,CAAT,CAAL,EAAyBpiD,CAAA,CAASoiD,CAAT,CAAzB,CAA2C,MAAO,EAElD,KAAII,EAAsB,CAAtBA,CAAaJ,CACjBA,EAAA,CAASntB,IAAAwtB,IAAA,CAASL,CAAT,CAJgE,KAKrEM,EAASN,CAATM,CAAkB,EALmD,CAMrEC,EAAe,EANsD,CAOrEr9C,EAAQ,EAP6D,CASrEs9C,EAAc,CAAA,CAClB,IAA6B,EAA7B,GAAIF,CAAAlhD,QAAA,CAAe,GAAf,CAAJ,CAAgC,CAC9B,IAAIa;AAAQqgD,CAAArgD,MAAA,CAAa,qBAAb,CACRA,EAAJ,EAAyB,GAAzB,EAAaA,CAAA,CAAM,CAAN,CAAb,EAAgCA,CAAA,CAAM,CAAN,CAAhC,CAA2C6/C,CAA3C,CAA0D,CAA1D,CACEE,CADF,CACW,CADX,EAGEO,CACA,CADeD,CACf,CAAAE,CAAA,CAAc,CAAA,CAJhB,CAF8B,CAUhC,GAAKA,CAAL,CA6CqB,CAAnB,CAAIV,CAAJ,EAAiC,CAAjC,CAAwBE,CAAxB,GACEO,CACA,CADeP,CAAAS,QAAA,CAAeX,CAAf,CACf,CAAAE,CAAA,CAASU,UAAA,CAAWH,CAAX,CAFX,CA7CF,KAAkB,CACZI,CAAAA,CAAcxlD,CAACmlD,CAAAzhD,MAAA,CAAaukC,EAAb,CAAA,CAA0B,CAA1B,CAADjoC,EAAiC,EAAjCA,QAGduC,EAAA,CAAYoiD,CAAZ,CAAJ,GACEA,CADF,CACiBjtB,IAAA+tB,IAAA,CAAS/tB,IAAAC,IAAA,CAAStjB,CAAAg0B,QAAT,CAA0Bmd,CAA1B,CAAT,CAAiDnxC,CAAAi0B,QAAjD,CADjB,CAOAuc,EAAA,CAAS,EAAEntB,IAAAguB,MAAA,CAAW,EAAEb,CAAAjiD,SAAA,EAAF,CAAsB,GAAtB,CAA4B+hD,CAA5B,CAAX,CAAA/hD,SAAA,EAAF,CAAqE,GAArE,CAA2E,CAAC+hD,CAA5E,CAELgB,KAAAA,EAAWjiD,CAAC,EAADA,CAAMmhD,CAANnhD,OAAA,CAAoBukC,EAApB,CAAX0d,CACAxa,EAAQwa,CAAA,CAAS,CAAT,CADRA,CAEJA,EAAWA,CAAA,CAAS,CAAT,CAAXA,EAA0B,EAFtBA,CAIGr6C,EAAM,CAJTq6C,CAKAC,EAASvxC,CAAAu0B,OALT+c,CAMAE,EAAQxxC,CAAAs0B,MAEZ,IAAIwC,CAAAnrC,OAAJ,EAAqB4lD,CAArB,CAA8BC,CAA9B,CAEE,IADAv6C,CACK,CADC6/B,CAAAnrC,OACD,CADgB4lD,CAChB,CAAA3kD,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgBqK,CAAhB,CAAqBrK,CAAA,EAArB,CAC4B,CAG1B,IAHKqK,CAGL,CAHWrK,CAGX,EAHgB4kD,CAGhB,EAHqC,CAGrC,GAH+B5kD,CAG/B,GAFEmkD,CAEF,EAFkBN,CAElB,EAAAM,CAAA,EAAgBja,CAAA9lC,OAAA,CAAapE,CAAb,CAIpB,KAAKA,CAAL,CAASqK,CAAT,CAAcrK,CAAd,CAAkBkqC,CAAAnrC,OAAlB,CAAgCiB,CAAA,EAAhC,CACsC,CAGpC,IAHKkqC,CAAAnrC,OAGL,CAHoBiB,CAGpB,EAHyB2kD,CAGzB,EAH+C,CAG/C,GAHyC3kD,CAGzC,GAFEmkD,CAEF,EAFkBN,CAElB,EAAAM,CAAA,EAAgBja,CAAA9lC,OAAA,CAAapE,CAAb,CAIlB,KAAA,CAAO0kD,CAAA3lD,OAAP;AAAyB2kD,CAAzB,CAAA,CACEgB,CAAA,EAAY,GAGVhB,EAAJ,EAAqC,GAArC,GAAoBA,CAApB,GAA0CS,CAA1C,EAA0DL,CAA1D,CAAuEY,CAAAn9B,OAAA,CAAgB,CAAhB,CAAmBm8B,CAAnB,CAAvE,CA3CgB,CAmDH,CAAf,GAAIE,CAAJ,GACEI,CADF,CACe,CAAA,CADf,CAIAl9C,EAAAtD,KAAA,CAAWwgD,CAAA,CAAa5wC,CAAAo0B,OAAb,CAA8Bp0B,CAAAk0B,OAAzC,CACW6c,CADX,CAEWH,CAAA,CAAa5wC,CAAAq0B,OAAb,CAA8Br0B,CAAAm0B,OAFzC,CAGA,OAAOzgC,EAAAG,KAAA,CAAW,EAAX,CA9EkE,CAiF3E49C,QAASA,GAAS,CAAClc,CAAD,CAAMmc,CAAN,CAAcjrC,CAAd,CAAoB,CACpC,IAAIkrC,EAAM,EACA,EAAV,CAAIpc,CAAJ,GACEoc,CACA,CADO,GACP,CAAApc,CAAA,CAAM,CAACA,CAFT,CAKA,KADAA,CACA,CADM,EACN,CADWA,CACX,CAAOA,CAAA5pC,OAAP,CAAoB+lD,CAApB,CAAA,CAA4Bnc,CAAA,CAAM,GAAN,CAAYA,CACpC9uB,EAAJ,GACE8uB,CADF,CACQA,CAAAphB,OAAA,CAAWohB,CAAA5pC,OAAX,CAAwB+lD,CAAxB,CADR,CAEA,OAAOC,EAAP,CAAapc,CAVuB,CActCqc,QAASA,EAAU,CAACl9C,CAAD,CAAO+hB,CAAP,CAAazR,CAAb,CAAqByB,CAArB,CAA2B,CAC5CzB,CAAA,CAASA,CAAT,EAAmB,CACnB,OAAO,SAAQ,CAAC6sC,CAAD,CAAO,CAChB9kD,CAAAA,CAAQ8kD,CAAA,CAAK,KAAL,CAAan9C,CAAb,CAAA,EACZ,IAAa,CAAb,CAAIsQ,CAAJ,EAAkBjY,CAAlB,CAA0B,CAACiY,CAA3B,CACEjY,CAAA,EAASiY,CACG,EAAd,GAAIjY,CAAJ,EAA8B,GAA9B,EAAmBiY,CAAnB,GAAkCjY,CAAlC,CAA0C,EAA1C,CACA,OAAO0kD,GAAA,CAAU1kD,CAAV,CAAiB0pB,CAAjB,CAAuBhQ,CAAvB,CALa,CAFsB,CAW9CqrC,QAASA,GAAa,CAACp9C,CAAD,CAAOq9C,CAAP,CAAkB,CACtC,MAAO,SAAQ,CAACF,CAAD,CAAO1B,CAAP,CAAgB,CAC7B,IAAIpjD,EAAQ8kD,CAAA,CAAK,KAAL,CAAan9C,CAAb,CAAA,EAAZ,CACIkC,EAAMwE,EAAA,CAAU22C,CAAA,CAAa,OAAb,CAAuBr9C,CAAvB,CAA+BA,CAAzC,CAEV,OAAOy7C,EAAA,CAAQv5C,CAAR,CAAA,CAAa7J,CAAb,CAJsB,CADO,CAmBxCilD,QAASA,GAAsB,CAACC,CAAD,CAAO,CAElC,IAAIC,EAAmBC,CAAC,IAAI7hD,IAAJ,CAAS2hD,CAAT,CAAe,CAAf,CAAkB,CAAlB,CAADE,QAAA,EAGvB;MAAO,KAAI7hD,IAAJ,CAAS2hD,CAAT,CAAe,CAAf,EAAwC,CAArB,EAACC,CAAD,CAA0B,CAA1B,CAA8B,EAAjD,EAAuDA,CAAvD,CAL2B,CActCE,QAASA,GAAU,CAAC37B,CAAD,CAAO,CACvB,MAAO,SAAQ,CAACo7B,CAAD,CAAO,CAAA,IACfQ,EAAaL,EAAA,CAAuBH,CAAAS,YAAA,EAAvB,CAGbvtB,EAAAA,CAAO,CAVNwtB,IAAIjiD,IAAJiiD,CAQ8BV,CARrBS,YAAA,EAATC,CAQ8BV,CARGW,SAAA,EAAjCD,CAQ8BV,CANnCY,QAAA,EAFKF,EAEiB,CAFjBA,CAQ8BV,CANTM,OAAA,EAFrBI,EAUDxtB,CAAoB,CAACstB,CACtBhiD,EAAAA,CAAS,CAATA,CAAagzB,IAAAguB,MAAA,CAAWtsB,CAAX,CAAkB,MAAlB,CAEhB,OAAO0sB,GAAA,CAAUphD,CAAV,CAAkBomB,CAAlB,CAPY,CADC,CA0I1Bo4B,QAASA,GAAU,CAACqB,CAAD,CAAU,CAK3BwC,QAASA,EAAgB,CAACC,CAAD,CAAS,CAChC,IAAIliD,CACJ,IAAIA,CAAJ,CAAYkiD,CAAAliD,MAAA,CAAamiD,CAAb,CAAZ,CAAyC,CACnCf,CAAAA,CAAO,IAAIvhD,IAAJ,CAAS,CAAT,CAD4B,KAEnCuiD,EAAS,CAF0B,CAGnCC,EAAS,CAH0B,CAInCC,EAAatiD,CAAA,CAAM,CAAN,CAAA,CAAWohD,CAAAmB,eAAX,CAAiCnB,CAAAoB,YAJX,CAKnCC,EAAaziD,CAAA,CAAM,CAAN,CAAA,CAAWohD,CAAAsB,YAAX,CAA8BtB,CAAAuB,SAE3C3iD,EAAA,CAAM,CAAN,CAAJ,GACEoiD,CACA,CADSllD,CAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAAeA,CAAA,CAAM,EAAN,CAAf,CACT,CAAAqiD,CAAA,CAAQnlD,CAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAAeA,CAAA,CAAM,EAAN,CAAf,CAFV,CAIAsiD,EAAAzmD,KAAA,CAAgBulD,CAAhB,CAAsBlkD,CAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAAtB,CAAqC9C,CAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAArC,CAAqD,CAArD,CAAwD9C,CAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAAxD,CACItD,EAAAA,CAAIQ,CAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,EAAgB,CAAhB,CAAJtD,CAAyB0lD,CACzBQ,EAAAA,CAAI1lD,CAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,EAAgB,CAAhB,CAAJ4iD,CAAyBP,CACzBtV,EAAAA,CAAI7vC,CAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,EAAgB,CAAhB,CACJ6iD,EAAAA,CAAKjwB,IAAAguB,MAAA,CAAgD,GAAhD,CAAWH,UAAA,CAAW,IAAX;CAAmBzgD,CAAA,CAAM,CAAN,CAAnB,EAA+B,CAA/B,EAAX,CACTyiD,EAAA5mD,KAAA,CAAgBulD,CAAhB,CAAsB1kD,CAAtB,CAAyBkmD,CAAzB,CAA4B7V,CAA5B,CAA+B8V,CAA/B,CAhBuC,CAmBzC,MAAOX,EArByB,CAFlC,IAAIC,EAAgB,sGA2BpB,OAAO,SAAQ,CAACf,CAAD,CAAO0B,CAAP,CAAeC,CAAf,CAAyB,CAAA,IAClCtuB,EAAO,EAD2B,CAElCxxB,EAAQ,EAF0B,CAGlC7B,CAHkC,CAG9BpB,CAER8iD,EAAA,CAASA,CAAT,EAAmB,YACnBA,EAAA,CAASrD,CAAAzb,iBAAA,CAAyB8e,CAAzB,CAAT,EAA6CA,CACzCznD,EAAA,CAAS+lD,CAAT,CAAJ,GACEA,CADF,CACS4B,EAAAv9C,KAAA,CAAmB27C,CAAnB,CAAA,CAA2BlkD,CAAA,CAAIkkD,CAAJ,CAA3B,CAAuCa,CAAA,CAAiBb,CAAjB,CADhD,CAIIxjD,EAAA,CAASwjD,CAAT,CAAJ,GACEA,CADF,CACS,IAAIvhD,IAAJ,CAASuhD,CAAT,CADT,CAIA,IAAK,CAAAvjD,EAAA,CAAOujD,CAAP,CAAL,CACE,MAAOA,EAGT,KAAA,CAAO0B,CAAP,CAAA,CAEE,CADA9iD,CACA,CADQijD,EAAA7tC,KAAA,CAAwB0tC,CAAxB,CACR,GACE7/C,CACA,CADQnC,EAAA,CAAOmC,CAAP,CAAcjD,CAAd,CAAqB,CAArB,CACR,CAAA8iD,CAAA,CAAS7/C,CAAAie,IAAA,EAFX,GAIEje,CAAAtD,KAAA,CAAWmjD,CAAX,CACA,CAAAA,CAAA,CAAS,IALX,CASEC,EAAJ,EAA6B,KAA7B,GAAgBA,CAAhB,GACE3B,CACA,CADO,IAAIvhD,IAAJ,CAASuhD,CAAAthD,QAAA,EAAT,CACP,CAAAshD,CAAA8B,WAAA,CAAgB9B,CAAA+B,WAAA,EAAhB,CAAoC/B,CAAAgC,kBAAA,EAApC,CAFF,CAIA7nD,EAAA,CAAQ0H,CAAR,CAAe,QAAQ,CAAC3G,CAAD,CAAQ,CAC7B8E,CAAA,CAAKiiD,EAAA,CAAa/mD,CAAb,CACLm4B,EAAA,EAAQrzB,CAAA,CAAKA,CAAA,CAAGggD,CAAH,CAAS3B,CAAAzb,iBAAT,CAAL;AACK1nC,CAAAoG,QAAA,CAAc,UAAd,CAA0B,EAA1B,CAAAA,QAAA,CAAsC,KAAtC,CAA6C,GAA7C,CAHgB,CAA/B,CAMA,OAAO+xB,EAxC+B,CA9Bb,CA0G7B6pB,QAASA,GAAU,EAAG,CACpB,MAAO,SAAQ,CAACgF,CAAD,CAASC,CAAT,CAAkB,CAC3B9lD,CAAA,CAAY8lD,CAAZ,CAAJ,GACIA,CADJ,CACc,CADd,CAGA,OAAO7hD,GAAA,CAAO4hD,CAAP,CAAeC,CAAf,CAJwB,CADb,CAqHtBhF,QAASA,GAAa,EAAG,CACvB,MAAO,SAAQ,CAACjzC,CAAD,CAAQk4C,CAAR,CAAe,CACxB5lD,CAAA,CAAS0N,CAAT,CAAJ,GAAqBA,CAArB,CAA6BA,CAAAxN,SAAA,EAA7B,CACA,IAAK,CAAAxC,CAAA,CAAQgQ,CAAR,CAAL,EAAwB,CAAAjQ,CAAA,CAASiQ,CAAT,CAAxB,CAAyC,MAAOA,EAG9Ck4C,EAAA,CAD8BC,QAAhC,GAAI7wB,IAAAwtB,IAAA,CAASh6B,MAAA,CAAOo9B,CAAP,CAAT,CAAJ,CACUp9B,MAAA,CAAOo9B,CAAP,CADV,CAGUtmD,CAAA,CAAIsmD,CAAJ,CAGV,IAAInoD,CAAA,CAASiQ,CAAT,CAAJ,CAEE,MAAIk4C,EAAJ,CACkB,CAAT,EAAAA,CAAA,CAAal4C,CAAArK,MAAA,CAAY,CAAZ,CAAeuiD,CAAf,CAAb,CAAqCl4C,CAAArK,MAAA,CAAYuiD,CAAZ,CAAmBl4C,CAAApQ,OAAnB,CAD9C,CAGS,EAfiB,KAmBxBwoD,EAAM,EAnBkB,CAoB1BvnD,CApB0B,CAoBvBupB,CAGD89B,EAAJ,CAAYl4C,CAAApQ,OAAZ,CACEsoD,CADF,CACUl4C,CAAApQ,OADV,CAESsoD,CAFT,CAEiB,CAACl4C,CAAApQ,OAFlB,GAGEsoD,CAHF,CAGU,CAACl4C,CAAApQ,OAHX,CAKY,EAAZ,CAAIsoD,CAAJ,EACErnD,CACA,CADI,CACJ,CAAAupB,CAAA,CAAI89B,CAFN,GAIErnD,CACA,CADImP,CAAApQ,OACJ,CADmBsoD,CACnB,CAAA99B,CAAA,CAAIpa,CAAApQ,OALN,CAQA,KAAA,CAAOiB,CAAP,CAAWupB,CAAX,CAAcvpB,CAAA,EAAd,CACEunD,CAAA/jD,KAAA,CAAS2L,CAAA,CAAMnP,CAAN,CAAT,CAGF,OAAOunD,EAxCqB,CADP,CAiKzBhF,QAASA,GAAa,CAACpsC,CAAD,CAAS,CAC7B,MAAO,SAAQ,CAACrT,CAAD,CAAQ0kD,CAAR,CAAuBC,CAAvB,CAAqC,CAsClDC,QAASA,EAAiB,CAACC,CAAD,CAAOC,CAAP,CAAmB,CAC3C,MAAOA,EAAA;AACD,QAAQ,CAAC34C,CAAD,CAAImlB,CAAJ,CAAO,CAAC,MAAOuzB,EAAA,CAAKvzB,CAAL,CAAOnlB,CAAP,CAAR,CADd,CAED04C,CAHqC,CAK7C5zB,QAASA,EAAO,CAAC8zB,CAAD,CAAKC,CAAL,CAAS,CACvB,IAAItjD,EAAK,MAAOqjD,EAAhB,CACIpjD,EAAK,MAAOqjD,EAKhB,OAAItjD,EAAJ,GAAWC,CAAX,EAAwB,QAAxB,GAAiBD,CAAjB,GAGEA,CAEI,CAFC,OAAQqjD,CAAA7iB,QAAA,CAAa6iB,CAAb,CAAkBA,CAAA7iB,QAAA,EAAlB,CAAiC6iB,CAAzC,CAED,CADJpjD,CACI,CADC,OAAQqjD,CAAA9iB,QAAA,CAAa8iB,CAAb,CAAkBA,CAAA9iB,QAAA,EAAlB,CAAiC8iB,CAAzC,CACD,CAAAtjD,CAAA,GAAOC,CAAP,EAAoB,QAApB,GAAaD,CAAb,GAIFA,CAKI,CALC,OAAQqjD,CAAAlmD,SAAA,CAAckmD,CAAd,CAAmBA,CAAAlmD,SAAA,EAAnB,CAAmCkmD,CAA3C,CAKD,CAJJpjD,CAII,CAJC,OAAQqjD,CAAAnmD,SAAA,CAAcmmD,CAAd,CAAmBA,CAAAnmD,SAAA,EAAnB,CAAmCmmD,CAA3C,CAID,CAAAtjD,CAAA,GAAOC,CAAP,EAAaojD,CAAb,GAAoBC,CAApB,EAAiC,QAAjC,GAA0BtjD,CAT5B,CALN,EAc0D,CAd1D,CAiBIA,CAAJ,GAAWC,CAAX,EACa,QAIX,GAJID,CAIJ,GAHGqjD,CACA,CADKA,CAAAv9C,YAAA,EACL,CAAAw9C,CAAA,CAAKA,CAAAx9C,YAAA,EAER,EAAIu9C,CAAJ,GAAWC,CAAX,CAAsB,CAAtB,CACOD,CAAA,CAAKC,CAAL,CAAW,EAAX,CAAe,CANxB,EAQStjD,CAAA,CAAKC,CAAL,CAAW,EAAX,CAAe,CAhCD,CA1CzB,GAAM,CAAA7F,EAAA,CAAYkE,CAAZ,CAAN,CAA2B,MAAOA,EAClC0kD,EAAA,CAAgBroD,CAAA,CAAQqoD,CAAR,CAAA,CAAyBA,CAAzB,CAAyC,CAACA,CAAD,CAC5B,EAA7B,GAAIA,CAAAzoD,OAAJ,GAAkCyoD,CAAlC,CAAkD,CAAC,GAAD,CAAlD,CACAA,EAAA,CAAgBA,CAAAO,IAAA,CAAkB,QAAQ,CAACC,CAAD,CAAY,CAAA,IAChDJ,EAAa,CAAA,CADmC,CAC5B59C,EAAMg+C,CAANh+C,EAAmB7I,EAC3C,IAAIjC,CAAA,CAAS8oD,CAAT,CAAJ,CAAyB,CACvB,GAA4B,GAA5B,EAAKA,CAAA5jD,OAAA,CAAiB,CAAjB,CAAL;AAA0D,GAA1D,EAAmC4jD,CAAA5jD,OAAA,CAAiB,CAAjB,CAAnC,CACEwjD,CACA,CADoC,GACpC,EADaI,CAAA5jD,OAAA,CAAiB,CAAjB,CACb,CAAA4jD,CAAA,CAAYA,CAAAx/B,UAAA,CAAoB,CAApB,CAEd,IAAkB,EAAlB,GAAIw/B,CAAJ,CAEE,MAAON,EAAA,CAAkB,QAAQ,CAACz4C,CAAD,CAAImlB,CAAJ,CAAO,CACtC,MAAOL,EAAA,CAAQ9kB,CAAR,CAAWmlB,CAAX,CAD+B,CAAjC,CAEJwzB,CAFI,CAIT59C,EAAA,CAAMmM,CAAA,CAAO6xC,CAAP,CACN,IAAIh+C,CAAAgE,SAAJ,CAAkB,CAChB,IAAIzO,EAAMyK,CAAA,EACV,OAAO09C,EAAA,CAAkB,QAAQ,CAACz4C,CAAD,CAAImlB,CAAJ,CAAO,CACtC,MAAOL,EAAA,CAAQ9kB,CAAA,CAAE1P,CAAF,CAAR,CAAgB60B,CAAA,CAAE70B,CAAF,CAAhB,CAD+B,CAAjC,CAEJqoD,CAFI,CAFS,CAZK,CAmBzB,MAAOF,EAAA,CAAkB,QAAQ,CAACz4C,CAAD,CAAImlB,CAAJ,CAAO,CACtC,MAAOL,EAAA,CAAQ/pB,CAAA,CAAIiF,CAAJ,CAAR,CAAejF,CAAA,CAAIoqB,CAAJ,CAAf,CAD+B,CAAjC,CAEJwzB,CAFI,CArB6C,CAAtC,CAyBhB,OAAO9iD,GAAApF,KAAA,CAAWoD,CAAX,CAAA/C,KAAA,CAAuB2nD,CAAA,CAE9BjF,QAAmB,CAACn+C,CAAD,CAAKC,CAAL,CAAS,CAC1B,IAAS,IAAAvE,EAAI,CAAb,CAAgBA,CAAhB,CAAoBwnD,CAAAzoD,OAApB,CAA0CiB,CAAA,EAA1C,CAA+C,CAC7C,IAAI2nD,EAAOH,CAAA,CAAcxnD,CAAd,CAAA,CAAiBsE,CAAjB,CAAqBC,CAArB,CACX,IAAa,CAAb,GAAIojD,CAAJ,CAAgB,MAAOA,EAFsB,CAI/C,MAAO,EALmB,CAFE,CAA8BF,CAA9B,CAAvB,CA7B2C,CADvB,CAkF/BQ,QAASA,GAAW,CAAC95C,CAAD,CAAY,CAC1B3O,CAAA,CAAW2O,CAAX,CAAJ,GACEA,CADF,CACc,CACVqb,KAAMrb,CADI,CADd,CAKAA,EAAAie,SAAA,CAAqBje,CAAAie,SAArB,EAA2C,IAC3C,OAAO/qB,GAAA,CAAQ8M,CAAR,CAPuB,CA6gBhC+5C,QAASA,GAAc,CAACvlD,CAAD,CAAUysB,CAAV,CAAiB6D,CAAjB,CAAyBxe,CAAzB,CAAmCc,CAAnC,CAAiD,CAAA,IAClEjG,EAAO,IAD2D,CAElE64C,EAAW,EAFuD,CAIlEC,EAAa94C,CAAA+4C,aAAbD,CAAiCzlD,CAAAqa,OAAA,EAAAlS,WAAA,CAA4B,MAA5B,CAAjCs9C;AAAwEE,EAG5Eh5C,EAAAi5C,OAAA,CAAc,EACdj5C,EAAAk5C,UAAA,CAAiB,EACjBl5C,EAAAm5C,SAAA,CAAgB/pD,CAChB4Q,EAAAo5C,MAAA,CAAanzC,CAAA,CAAa6Z,CAAAtnB,KAAb,EAA2BsnB,CAAApe,OAA3B,EAA2C,EAA3C,CAAA,CAA+CiiB,CAA/C,CACb3jB,EAAAq5C,OAAA,CAAc,CAAA,CACdr5C,EAAAs5C,UAAA,CAAiB,CAAA,CACjBt5C,EAAAu5C,OAAA,CAAc,CAAA,CACdv5C,EAAAw5C,SAAA,CAAgB,CAAA,CAChBx5C,EAAAy5C,WAAA,CAAkB,CAAA,CAElBX,EAAAY,YAAA,CAAuB15C,CAAvB,CAaAA,EAAA25C,mBAAA,CAA0BC,QAAQ,EAAG,CACnC9pD,CAAA,CAAQ+oD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAF,mBAAA,EADkC,CAApC,CADmC,CAiBrC35C,EAAA85C,iBAAA,CAAwBC,QAAQ,EAAG,CACjCjqD,CAAA,CAAQ+oD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAC,iBAAA,EADkC,CAApC,CADiC,CAenC95C,EAAA05C,YAAA,CAAmBM,QAAQ,CAACH,CAAD,CAAU,CAGnCn9C,EAAA,CAAwBm9C,CAAAT,MAAxB,CAAuC,OAAvC,CACAP,EAAA3kD,KAAA,CAAc2lD,CAAd,CAEIA,EAAAT,MAAJ,GACEp5C,CAAA,CAAK65C,CAAAT,MAAL,CADF,CACwBS,CADxB,CANmC,CAYrC75C,EAAAi6C,gBAAA,CAAuBC,QAAQ,CAACL,CAAD,CAAUM,CAAV,CAAmB,CAChD,IAAIC,EAAUP,CAAAT,MAEVp5C,EAAA,CAAKo6C,CAAL,CAAJ,GAAsBP,CAAtB,EACE,OAAO75C,CAAA,CAAKo6C,CAAL,CAETp6C,EAAA,CAAKm6C,CAAL,CAAA,CAAgBN,CAChBA,EAAAT,MAAA,CAAgBe,CAPgC,CAmBlDn6C,EAAAq6C,eAAA,CAAsBC,QAAQ,CAACT,CAAD,CAAU,CAClCA,CAAAT,MAAJ;AAAqBp5C,CAAA,CAAK65C,CAAAT,MAAL,CAArB,GAA6CS,CAA7C,EACE,OAAO75C,CAAA,CAAK65C,CAAAT,MAAL,CAETtpD,EAAA,CAAQkQ,CAAAm5C,SAAR,CAAuB,QAAQ,CAACtoD,CAAD,CAAQ2H,CAAR,CAAc,CAC3CwH,CAAAu6C,aAAA,CAAkB/hD,CAAlB,CAAwB,IAAxB,CAA8BqhD,CAA9B,CAD2C,CAA7C,CAGA/pD,EAAA,CAAQkQ,CAAAi5C,OAAR,CAAqB,QAAQ,CAACpoD,CAAD,CAAQ2H,CAAR,CAAc,CACzCwH,CAAAu6C,aAAA,CAAkB/hD,CAAlB,CAAwB,IAAxB,CAA8BqhD,CAA9B,CADyC,CAA3C,CAIAtmD,GAAA,CAAYslD,CAAZ,CAAsBgB,CAAtB,CAXsC,CAwBxCW,GAAA,CAAqB,CACnBC,KAAM,IADa,CAEnBj9B,SAAUnqB,CAFS,CAGnBqnD,IAAKA,QAAQ,CAAC7C,CAAD,CAASlb,CAAT,CAAmBkd,CAAnB,CAA4B,CACvC,IAAI/lC,EAAO+jC,CAAA,CAAOlb,CAAP,CACN7oB,EAAL,CAIiB,EAJjB,GAGcA,CAAApgB,QAAAD,CAAaomD,CAAbpmD,CAHd,EAKIqgB,CAAA5f,KAAA,CAAU2lD,CAAV,CALJ,CACEhC,CAAA,CAAOlb,CAAP,CADF,CACqB,CAACkd,CAAD,CAHkB,CAHtB,CAcnBc,MAAOA,QAAQ,CAAC9C,CAAD,CAASlb,CAAT,CAAmBkd,CAAnB,CAA4B,CACzC,IAAI/lC,EAAO+jC,CAAA,CAAOlb,CAAP,CACN7oB,EAAL,GAGAvgB,EAAA,CAAYugB,CAAZ,CAAkB+lC,CAAlB,CACA,CAAoB,CAApB,GAAI/lC,CAAArkB,OAAJ,EACE,OAAOooD,CAAA,CAAOlb,CAAP,CALT,CAFyC,CAdxB,CAwBnBmc,WAAYA,CAxBO,CAyBnB3zC,SAAUA,CAzBS,CAArB,CAsCAnF,EAAA46C,UAAA,CAAiBC,QAAQ,EAAG,CAC1B11C,CAAAuK,YAAA,CAAqBrc,CAArB,CAA8BynD,EAA9B,CACA31C,EAAAsK,SAAA,CAAkBpc,CAAlB,CAA2B0nD,EAA3B,CACA/6C,EAAAq5C,OAAA,CAAc,CAAA,CACdr5C,EAAAs5C,UAAA,CAAiB,CAAA,CACjBR,EAAA8B,UAAA,EAL0B,CAsB5B56C,EAAAg7C,aAAA,CAAoBC,QAAQ,EAAG,CAC7B91C,CAAA+1C,SAAA,CAAkB7nD,CAAlB,CAA2BynD,EAA3B,CAA2CC,EAA3C,CAnOcI,eAmOd,CACAn7C;CAAAq5C,OAAA,CAAc,CAAA,CACdr5C,EAAAs5C,UAAA,CAAiB,CAAA,CACjBt5C,EAAAy5C,WAAA,CAAkB,CAAA,CAClB3pD,EAAA,CAAQ+oD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAmB,aAAA,EADkC,CAApC,CAL6B,CAuB/Bh7C,EAAAo7C,cAAA,CAAqBC,QAAQ,EAAG,CAC9BvrD,CAAA,CAAQ+oD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAuB,cAAA,EADkC,CAApC,CAD8B,CAahCp7C,EAAAs7C,cAAA,CAAqBC,QAAQ,EAAG,CAC9Bp2C,CAAAsK,SAAA,CAAkBpc,CAAlB,CAvQc8nD,cAuQd,CACAn7C,EAAAy5C,WAAA,CAAkB,CAAA,CAClBX,EAAAwC,cAAA,EAH8B,CArNsC,CAu3CxEE,QAASA,GAAoB,CAACf,CAAD,CAAO,CAClCA,CAAAgB,YAAAvnD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,MAAO4pD,EAAAiB,SAAA,CAAc7qD,CAAd,CAAA,CAAuBA,CAAvB,CAA+BA,CAAAwB,SAAA,EADF,CAAtC,CADkC,CAWpCspD,QAASA,GAAa,CAACjiD,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6BhzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CACrE,IAAIgG,EAAO/X,CAAA,CAAUD,CAAA,CAAQ,CAAR,CAAAgY,KAAV,CAKX,IAAK2kC,CAAAvoC,CAAAuoC,QAAL,CAAuB,CACrB,IAAI4L,EAAY,CAAA,CAEhBvoD,EAAAgI,GAAA,CAAW,kBAAX,CAA+B,QAAQ,CAACxB,CAAD,CAAO,CAC5C+hD,CAAA,CAAY,CAAA,CADgC,CAA9C,CAIAvoD,EAAAgI,GAAA,CAAW,gBAAX,CAA6B,QAAQ,EAAG,CACtCugD,CAAA,CAAY,CAAA,CACZhlC,EAAA,EAFsC,CAAxC,CAPqB,CAavB,IAAIA,EAAWA,QAAQ,CAACilC,CAAD,CAAK,CACtBhpB,CAAJ,GACExtB,CAAA8T,MAAAI,OAAA,CAAsBsZ,CAAtB,CACA;AAAAA,CAAA,CAAU,IAFZ,CAIA,IAAI+oB,CAAAA,CAAJ,CAAA,CAL0B,IAMtB/qD,EAAQwC,CAAA2C,IAAA,EACRwY,EAAAA,CAAQqtC,CAARrtC,EAAcqtC,CAAAxwC,KAKL,WAAb,GAAIA,CAAJ,EAA6BtY,CAAA+oD,OAA7B,EAA4D,OAA5D,GAA4C/oD,CAAA+oD,OAA5C,GACEjrD,CADF,CACU0Z,CAAA,CAAK1Z,CAAL,CADV,CAOA,EAAI4pD,CAAAsB,WAAJ,GAAwBlrD,CAAxB,EAA4C,EAA5C,GAAkCA,CAAlC,EAAkD4pD,CAAAuB,sBAAlD,GACEvB,CAAAwB,cAAA,CAAmBprD,CAAnB,CAA0B2d,CAA1B,CAfF,CAL0B,CA0B5B,IAAI/G,CAAAmpC,SAAA,CAAkB,OAAlB,CAAJ,CACEv9C,CAAAgI,GAAA,CAAW,OAAX,CAAoBub,CAApB,CADF,KAEO,CACL,IAAIic,CAAJ,CAEIqpB,EAAgBA,QAAQ,CAACL,CAAD,CAAKh8C,CAAL,CAAYs8C,CAAZ,CAAuB,CAC5CtpB,CAAL,GACEA,CADF,CACYxtB,CAAA8T,MAAA,CAAe,QAAQ,EAAG,CAClC0Z,CAAA,CAAU,IACLhzB,EAAL,EAAcA,CAAAhP,MAAd,GAA8BsrD,CAA9B,EACEvlC,CAAA,CAASilC,CAAT,CAHgC,CAA1B,CADZ,CADiD,CAWnDxoD,EAAAgI,GAAA,CAAW,SAAX,CAAsB,QAAQ,CAACmT,CAAD,CAAQ,CACpC,IAAIve,EAAMue,CAAA4tC,QAIE,GAAZ,GAAInsD,CAAJ,EAAmB,EAAnB,CAAwBA,CAAxB,EAAqC,EAArC,CAA+BA,CAA/B,EAA6C,EAA7C,EAAmDA,CAAnD,EAAiE,EAAjE,EAA0DA,CAA1D,EAEAisD,CAAA,CAAc1tC,CAAd,CAAqB,IAArB,CAA2B,IAAA3d,MAA3B,CAPoC,CAAtC,CAWA,IAAI4W,CAAAmpC,SAAA,CAAkB,OAAlB,CAAJ,CACEv9C,CAAAgI,GAAA,CAAW,WAAX,CAAwB6gD,CAAxB,CA1BG,CAgCP7oD,CAAAgI,GAAA,CAAW,QAAX,CAAqBub,CAArB,CAEA6jC,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CACxBjpD,CAAA2C,IAAA,CAAYykD,CAAAiB,SAAA,CAAcjB,CAAAsB,WAAd,CAAA;AAAiC,EAAjC,CAAsCtB,CAAAsB,WAAlD,CADwB,CAjF2C,CAsHvEQ,QAASA,GAAgB,CAACr/B,CAAD,CAASs/B,CAAT,CAAkB,CACzC,MAAO,SAAQ,CAACC,CAAD,CAAM9G,CAAN,CAAY,CAAA,IACrBn+C,CADqB,CACdihD,CAEX,IAAIrmD,EAAA,CAAOqqD,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAI7sD,CAAA,CAAS6sD,CAAT,CAAJ,CAAmB,CAII,GAArB,EAAIA,CAAA3nD,OAAA,CAAW,CAAX,CAAJ,EAA0D,GAA1D,EAA4B2nD,CAAA3nD,OAAA,CAAW2nD,CAAAhtD,OAAX,CAAwB,CAAxB,CAA5B,GACEgtD,CADF,CACQA,CAAAvjC,UAAA,CAAc,CAAd,CAAiBujC,CAAAhtD,OAAjB,CAA8B,CAA9B,CADR,CAGA,IAAIitD,EAAA1iD,KAAA,CAAqByiD,CAArB,CAAJ,CACE,MAAO,KAAIroD,IAAJ,CAASqoD,CAAT,CAETv/B,EAAA1oB,UAAA,CAAmB,CAGnB,IAFAgD,CAEA,CAFQ0lB,CAAAvT,KAAA,CAAY8yC,CAAZ,CAER,CAqBE,MApBAjlD,EAAAkb,MAAA,EAoBO,CAlBL+lC,CAkBK,CAnBH9C,CAAJ,CACQ,CACJgH,KAAMhH,CAAAS,YAAA,EADF,CAEJwG,GAAIjH,CAAAW,SAAA,EAAJsG,CAAsB,CAFlB,CAGJC,GAAIlH,CAAAY,QAAA,EAHA,CAIJuG,GAAInH,CAAAoH,SAAA,EAJA,CAKJC,GAAIrH,CAAA+B,WAAA,EALA,CAMJuF,GAAItH,CAAAuH,WAAA,EANA,CAOJC,IAAKxH,CAAAyH,gBAAA,EAALD,CAA8B,GAP1B,CADR,CAWQ,CAAER,KAAM,IAAR,CAAcC,GAAI,CAAlB,CAAqBC,GAAI,CAAzB,CAA4BC,GAAI,CAAhC,CAAmCE,GAAI,CAAvC,CAA0CC,GAAI,CAA9C,CAAiDE,IAAK,CAAtD,CAQD,CALPrtD,CAAA,CAAQ0H,CAAR,CAAe,QAAQ,CAAC6lD,CAAD,CAAO5pD,CAAP,CAAc,CAC/BA,CAAJ,CAAY+oD,CAAA/sD,OAAZ,GACEgpD,CAAA,CAAI+D,CAAA,CAAQ/oD,CAAR,CAAJ,CADF,CACwB,CAAC4pD,CADzB,CADmC,CAArC,CAKO,CAAA,IAAIjpD,IAAJ,CAASqkD,CAAAkE,KAAT,CAAmBlE,CAAAmE,GAAnB,CAA4B,CAA5B,CAA+BnE,CAAAoE,GAA/B;AAAuCpE,CAAAqE,GAAvC,CAA+CrE,CAAAuE,GAA/C,CAAuDvE,CAAAwE,GAAvD,EAAiE,CAAjE,CAA8E,GAA9E,CAAoExE,CAAA0E,IAApE,EAAsF,CAAtF,CAlCQ,CAsCnB,MAAOG,IA7CkB,CADc,CAkD3CC,QAASA,GAAmB,CAAClyC,CAAD,CAAO6R,CAAP,CAAesgC,CAAf,CAA0BnG,CAA1B,CAAkC,CAC5D,MAAOoG,SAA6B,CAAC/jD,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6BhzC,CAA7B,CAAuCpC,CAAvC,CAAiDU,CAAjD,CAA0D,CA6D5F23C,QAASA,EAAW,CAAC7sD,CAAD,CAAQ,CAE1B,MAAOA,EAAP,EAAgB,EAAEA,CAAAwD,QAAF,EAAmBxD,CAAAwD,QAAA,EAAnB,GAAuCxD,CAAAwD,QAAA,EAAvC,CAFU,CAK5BspD,QAASA,EAAsB,CAAC3nD,CAAD,CAAM,CACnC,MAAO/D,EAAA,CAAU+D,CAAV,CAAA,CAAkB5D,EAAA,CAAO4D,CAAP,CAAA,CAAcA,CAAd,CAAoBwnD,CAAA,CAAUxnD,CAAV,CAAtC,CAAwD5G,CAD5B,CAjErCwuD,EAAA,CAAgBlkD,CAAhB,CAAuBrG,CAAvB,CAAgCN,CAAhC,CAAsC0nD,CAAtC,CACAkB,GAAA,CAAcjiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC0nD,CAApC,CAA0ChzC,CAA1C,CAAoDpC,CAApD,CACA,KAAIiyC,EAAWmD,CAAXnD,EAAmBmD,CAAAoD,SAAnBvG,EAAoCmD,CAAAoD,SAAAvG,SAAxC,CACIwG,CAEJrD,EAAAsD,aAAA,CAAoB1yC,CACpBovC,EAAAuD,SAAA9pD,KAAA,CAAmB,QAAQ,CAACrD,CAAD,CAAQ,CACjC,MAAI4pD,EAAAiB,SAAA,CAAc7qD,CAAd,CAAJ,CAAiC,IAAjC,CACIqsB,CAAAljB,KAAA,CAAYnJ,CAAZ,CAAJ,EAIMotD,CAIGA,CAJUT,CAAA,CAAU3sD,CAAV,CAAiBitD,CAAjB,CAIVG,CAHU,KAGVA,GAHH3G,CAGG2G,EAFLA,CAAAxG,WAAA,CAAsBwG,CAAAvG,WAAA,EAAtB,CAAgDuG,CAAAtG,kBAAA,EAAhD,CAEKsG,CAAAA,CART,EAUO7uD,CAZ0B,CAAnC,CAeAqrD,EAAAgB,YAAAvnD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,GAAIA,CAAJ,EAAc,CAAAuB,EAAA,CAAOvB,CAAP,CAAd,CACE,KAAMqtD,GAAA,CAAe,SAAf,CAAyDrtD,CAAzD,CAAN,CAEF,GAAI6sD,CAAA,CAAY7sD,CAAZ,CAAJ,CAAwB,CAEtB,IADAitD,CACA;AADejtD,CACf,GAAiC,KAAjC,GAAoBymD,CAApB,CAAwC,CACtC,IAAI6G,EAAiB,GAAjBA,CAAyBL,CAAAnG,kBAAA,EAC7BmG,EAAA,CAAe,IAAI1pD,IAAJ,CAAS0pD,CAAAzpD,QAAA,EAAT,CAAkC8pD,CAAlC,CAFuB,CAIxC,MAAOp4C,EAAA,CAAQ,MAAR,CAAA,CAAgBlV,CAAhB,CAAuBwmD,CAAvB,CAA+BC,CAA/B,CANe,CAQtBwG,CAAA,CAAe,IACf,OAAO,EAb2B,CAAtC,CAiBA,IAAI7rD,CAAA,CAAUc,CAAAmiD,IAAV,CAAJ,EAA2BniD,CAAAqrD,MAA3B,CAAuC,CACrC,IAAIC,CACJ5D,EAAA6D,YAAApJ,IAAA,CAAuBqJ,QAAQ,CAAC1tD,CAAD,CAAQ,CACrC,MAAO,CAAC6sD,CAAA,CAAY7sD,CAAZ,CAAR,EAA8BmB,CAAA,CAAYqsD,CAAZ,CAA9B,EAAqDb,CAAA,CAAU3sD,CAAV,CAArD,EAAyEwtD,CADpC,CAGvCtrD,EAAA2xB,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC1uB,CAAD,CAAM,CACjCqoD,CAAA,CAASV,CAAA,CAAuB3nD,CAAvB,CACTykD,EAAA+D,UAAA,EAFiC,CAAnC,CALqC,CAWvC,GAAIvsD,CAAA,CAAUc,CAAAq0B,IAAV,CAAJ,EAA2Br0B,CAAA0rD,MAA3B,CAAuC,CACrC,IAAIC,CACJjE,EAAA6D,YAAAl3B,IAAA,CAAuBu3B,QAAQ,CAAC9tD,CAAD,CAAQ,CACrC,MAAO,CAAC6sD,CAAA,CAAY7sD,CAAZ,CAAR,EAA8BmB,CAAA,CAAY0sD,CAAZ,CAA9B,EAAqDlB,CAAA,CAAU3sD,CAAV,CAArD,EAAyE6tD,CADpC,CAGvC3rD,EAAA2xB,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC1uB,CAAD,CAAM,CACjC0oD,CAAA,CAASf,CAAA,CAAuB3nD,CAAvB,CACTykD,EAAA+D,UAAA,EAFiC,CAAnC,CALqC,CAlDqD,CADlC,CAyE9DZ,QAASA,GAAe,CAAClkD,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6B,CAGnD,CADuBA,CAAAuB,sBACvB,CADoD9pD,CAAA,CADzCmB,CAAAT,CAAQ,CAARA,CACkDgsD,SAAT,CACpD,GACEnE,CAAAuD,SAAA9pD,KAAA,CAAmB,QAAQ,CAACrD,CAAD,CAAQ,CACjC,IAAI+tD,EAAWvrD,CAAAP,KAAA,CA/pmBS+rD,UA+pmBT,CAAXD;AAAoD,EAKxD,OAAOA,EAAAE,SAAA,EAAsBC,CAAAH,CAAAG,aAAtB,CAA8C3vD,CAA9C,CAA0DyB,CANhC,CAAnC,CAJiD,CAqHrDmuD,QAASA,GAAiB,CAACn4C,CAAD,CAAS7W,CAAT,CAAkBwI,CAAlB,CAAwBm1B,CAAxB,CAAoCsxB,CAApC,CAA8C,CAEtE,GAAIhtD,CAAA,CAAU07B,CAAV,CAAJ,CAA2B,CACzBuxB,CAAA,CAAUr4C,CAAA,CAAO8mB,CAAP,CACV,IAAKjvB,CAAAwgD,CAAAxgD,SAAL,CACE,KAAMrP,EAAA,CAAO,SAAP,CAAA,CAAkB,WAAlB,CACiCmJ,CADjC,CACuCm1B,CADvC,CAAN,CAGF,MAAOuxB,EAAA,CAAQlvD,CAAR,CANkB,CAQ3B,MAAOivD,EAV+D,CAywDxEzE,QAASA,GAAoB,CAACxqD,CAAD,CAAU,CA4ErCmvD,QAASA,EAAiB,CAAC1hC,CAAD,CAAY2hC,CAAZ,CAAyB,CAC7CA,CAAJ,EAAoB,CAAAC,CAAA,CAAW5hC,CAAX,CAApB,EACEtY,CAAAsK,SAAA,CAAkB+N,CAAlB,CAA4BC,CAA5B,CACA,CAAA4hC,CAAA,CAAW5hC,CAAX,CAAA,CAAwB,CAAA,CAF1B,EAGY2hC,CAAAA,CAHZ,EAG2BC,CAAA,CAAW5hC,CAAX,CAH3B,GAIEtY,CAAAuK,YAAA,CAAqB8N,CAArB,CAA+BC,CAA/B,CACA,CAAA4hC,CAAA,CAAW5hC,CAAX,CAAA,CAAwB,CAAA,CAL1B,CADiD,CAUnD6hC,QAASA,EAAmB,CAACC,CAAD,CAAqBC,CAArB,CAA8B,CACxDD,CAAA,CAAqBA,CAAA,CAAqB,GAArB,CAA2B5kD,EAAA,CAAW4kD,CAAX,CAA+B,GAA/B,CAA3B,CAAiE,EAEtFJ,EAAA,CAAkBM,EAAlB,CAAgCF,CAAhC,CAAgE,CAAA,CAAhE,GAAoDC,CAApD,CACAL,EAAA,CAAkBO,EAAlB,CAAkCH,CAAlC,CAAkE,CAAA,CAAlE,GAAsDC,CAAtD,CAJwD,CAtFrB,IACjC/E,EAAOzqD,CAAAyqD,KAD0B,CAEjCj9B,EAAWxtB,CAAAwtB,SAFsB,CAGjC6hC,EAAa,EAHoB,CAIjC3E,EAAM1qD,CAAA0qD,IAJ2B,CAKjCC,EAAQ3qD,CAAA2qD,MALyB,CAMjC7B,EAAa9oD,CAAA8oD,WANoB,CAOjC3zC,EAAWnV,CAAAmV,SAEfk6C,EAAA,CAAWK,EAAX,CAAA,CAA4B,EAAEL,CAAA,CAAWI,EAAX,CAAF,CAA4BjiC,CAAAjO,SAAA,CAAkBkwC,EAAlB,CAA5B,CAE5BhF,EAAAF,aAAA,CAEAoF,QAAoB,CAACJ,CAAD,CAAqBjpC,CAArB,CAA4BsD,CAA5B,CAAqC,CACnDtD,CAAJ,GAAclnB,CAAd,EA+CKqrD,CAAA,SAGL,GAFEA,CAAA,SAEF,CAFe,EAEf,EAAAC,CAAA,CAAID,CAAA,SAAJ;AAjD2B8E,CAiD3B,CAjD+C3lC,CAiD/C,CAlDA,GAsDI6gC,CAAA,SAGJ,EAFEE,CAAA,CAAMF,CAAA,SAAN,CApD4B8E,CAoD5B,CApDgD3lC,CAoDhD,CAEF,CAAIgmC,EAAA,CAAcnF,CAAA,SAAd,CAAJ,GACEA,CAAA,SADF,CACerrD,CADf,CAzDA,CAKKsD,GAAA,CAAU4jB,CAAV,CAAL,CAIMA,CAAJ,EACEqkC,CAAA,CAAMF,CAAAxB,OAAN,CAAmBsG,CAAnB,CAAuC3lC,CAAvC,CACA,CAAA8gC,CAAA,CAAID,CAAAvB,UAAJ,CAAoBqG,CAApB,CAAwC3lC,CAAxC,CAFF,GAIE8gC,CAAA,CAAID,CAAAxB,OAAJ,CAAiBsG,CAAjB,CAAqC3lC,CAArC,CACA,CAAA+gC,CAAA,CAAMF,CAAAvB,UAAN,CAAsBqG,CAAtB,CAA0C3lC,CAA1C,CALF,CAJF,EACE+gC,CAAA,CAAMF,CAAAxB,OAAN,CAAmBsG,CAAnB,CAAuC3lC,CAAvC,CACA,CAAA+gC,CAAA,CAAMF,CAAAvB,UAAN,CAAsBqG,CAAtB,CAA0C3lC,CAA1C,CAFF,CAYI6gC,EAAAtB,SAAJ,EACEgG,CAAA,CAAkBU,EAAlB,CAAiC,CAAA,CAAjC,CAEA,CADApF,CAAAlB,OACA,CADckB,CAAAjB,SACd,CAD8BpqD,CAC9B,CAAAkwD,CAAA,CAAoB,EAApB,CAAwB,IAAxB,CAHF,GAKEH,CAAA,CAAkBU,EAAlB,CAAiC,CAAA,CAAjC,CAGA,CAFApF,CAAAlB,OAEA,CAFcqG,EAAA,CAAcnF,CAAAxB,OAAd,CAEd,CADAwB,CAAAjB,SACA,CADgB,CAACiB,CAAAlB,OACjB,CAAA+F,CAAA,CAAoB,EAApB,CAAwB7E,CAAAlB,OAAxB,CARF,CAiBEuG,EAAA,CADErF,CAAAtB,SAAJ,EAAqBsB,CAAAtB,SAAA,CAAcoG,CAAd,CAArB,CACkBnwD,CADlB,CAEWqrD,CAAAxB,OAAA,CAAYsG,CAAZ,CAAJ,CACW,CAAA,CADX,CAEI9E,CAAAvB,UAAA,CAAeqG,CAAf,CAAJ,CACW,CAAA,CADX,CAGW,IAElBD,EAAA,CAAoBC,CAApB,CAAwCO,CAAxC,CACAhH,EAAAyB,aAAA,CAAwBgF,CAAxB,CAA4CO,CAA5C,CAA2DrF,CAA3D,CA5CuD,CAbpB,CA8FvCmF,QAASA,GAAa,CAACrwD,CAAD,CAAM,CAC1B,GAAIA,CAAJ,CACE,IAASuD,IAAAA,CAAT,GAAiBvD,EAAjB,CACE,MAAO,CAAA,CAGX,OAAO,CAAA,CANmB,CAuN5BwwD,QAASA,GAAc,CAACvnD,CAAD,CAAO8T,CAAP,CAAiB,CACtC9T,CAAA,CAAO,SAAP,CAAmBA,CACnB,OAAO,CAAC,UAAD;AAAa,QAAQ,CAAC2M,CAAD,CAAW,CA+ErC66C,QAASA,EAAe,CAAChzB,CAAD,CAAUC,CAAV,CAAmB,CACzC,IAAIF,EAAS,EAAb,CAGSr8B,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBs8B,CAAAv9B,OAApB,CAAoCiB,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAIw8B,EAAQF,CAAA,CAAQt8B,CAAR,CAAZ,CACSa,EAAI,CAAb,CAAgBA,CAAhB,CAAoB07B,CAAAx9B,OAApB,CAAoC8B,CAAA,EAApC,CACE,GAAI27B,CAAJ,EAAaD,CAAA,CAAQ17B,CAAR,CAAb,CAAyB,SAAS,CAEpCw7B,EAAA74B,KAAA,CAAYg5B,CAAZ,CALuC,CAOzC,MAAOH,EAXkC,CAc3CkzB,QAASA,EAAY,CAAC90B,CAAD,CAAW,CAC9B,GAAI,CAAAt7B,CAAA,CAAQs7B,CAAR,CAAJ,CAEO,CAAA,GAAIv7B,CAAA,CAASu7B,CAAT,CAAJ,CACL,MAAOA,EAAAh4B,MAAA,CAAe,GAAf,CACF,IAAIjB,CAAA,CAASi5B,CAAT,CAAJ,CAAwB,CAC7B,IAAI3b,EAAU,EACd1f,EAAA,CAAQq7B,CAAR,CAAkB,QAAQ,CAAC4H,CAAD,CAAIlI,CAAJ,CAAO,CAC3BkI,CAAJ,GACEvjB,CADF,CACYA,CAAAna,OAAA,CAAew1B,CAAA13B,MAAA,CAAQ,GAAR,CAAf,CADZ,CAD+B,CAAjC,CAKA,OAAOqc,EAPsB,CAFxB,CAWP,MAAO2b,EAduB,CA5FhC,MAAO,CACLrO,SAAU,IADL,CAEL5C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAiCnCmtD,QAASA,EAAiB,CAAC1wC,CAAD,CAAUsnB,CAAV,CAAiB,CACzC,IAAIqpB,EAAc9sD,CAAAwG,KAAA,CAAa,cAAb,CAAdsmD,EAA8C,EAAlD,CACIC,EAAkB,EACtBtwD,EAAA,CAAQ0f,CAAR,CAAiB,QAAQ,CAACiO,CAAD,CAAY,CACnC,GAAY,CAAZ,CAAIqZ,CAAJ,EAAiBqpB,CAAA,CAAY1iC,CAAZ,CAAjB,CACE0iC,CAAA,CAAY1iC,CAAZ,CACA,EAD0B0iC,CAAA,CAAY1iC,CAAZ,CAC1B,EADoD,CACpD,EADyDqZ,CACzD,CAAIqpB,CAAA,CAAY1iC,CAAZ,CAAJ,GAA+B,EAAU,CAAV,CAAEqZ,CAAF,CAA/B,EACEspB,CAAAlsD,KAAA,CAAqBupB,CAArB,CAJ+B,CAArC,CAQApqB,EAAAwG,KAAA,CAAa,cAAb,CAA6BsmD,CAA7B,CACA,OAAOC,EAAAzoD,KAAA,CAAqB,GAArB,CAZkC,CA4B3C0oD,QAASA,EAAkB,CAACnrC,CAAD,CAAS,CAClC,GAAiB,CAAA,CAAjB;AAAI5I,CAAJ,EAAyB5S,CAAA4mD,OAAzB,CAAwC,CAAxC,GAA8Ch0C,CAA9C,CAAwD,CACtD,IAAI+e,EAAa40B,CAAA,CAAa/qC,CAAb,EAAuB,EAAvB,CACjB,IAAKC,CAAAA,CAAL,CAAa,CAxCf,IAAIkW,EAAa60B,CAAA,CAyCF70B,CAzCE,CAA2B,CAA3B,CACjBt4B,EAAAm4B,UAAA,CAAeG,CAAf,CAuCe,CAAb,IAEO,IAAK,CAAAt2B,EAAA,CAAOmgB,CAAP,CAAcC,CAAd,CAAL,CAA4B,CAEnBuT,IAAAA,EADGu3B,CAAAv3B,CAAavT,CAAbuT,CACHA,CAnBd4C,EAAQ00B,CAAA,CAmBkB30B,CAnBlB,CAA4B3C,CAA5B,CAmBMA,CAlBd8C,EAAWw0B,CAAA,CAAgBt3B,CAAhB,CAkBe2C,CAlBf,CAkBG3C,CAjBlB4C,EAAQ40B,CAAA,CAAkB50B,CAAlB,CAAyB,CAAzB,CAiBU5C,CAhBlB8C,EAAW00B,CAAA,CAAkB10B,CAAlB,CAA6B,EAA7B,CACPF,EAAJ,EAAaA,CAAA77B,OAAb,EACE0V,CAAAsK,SAAA,CAAkBpc,CAAlB,CAA2Bi4B,CAA3B,CAEEE,EAAJ,EAAgBA,CAAA/7B,OAAhB,EACE0V,CAAAuK,YAAA,CAAqBrc,CAArB,CAA8Bm4B,CAA9B,CASmC,CAJmB,CASxDrW,CAAA,CAASvgB,EAAA,CAAYsgB,CAAZ,CAVyB,CA5DpC,IAAIC,CAEJzb,EAAAjH,OAAA,CAAaM,CAAA,CAAKyF,CAAL,CAAb,CAAyB6nD,CAAzB,CAA6C,CAAA,CAA7C,CAEAttD,EAAA2xB,SAAA,CAAc,OAAd,CAAuB,QAAQ,CAAC7zB,CAAD,CAAQ,CACrCwvD,CAAA,CAAmB3mD,CAAAsyC,MAAA,CAAYj5C,CAAA,CAAKyF,CAAL,CAAZ,CAAnB,CADqC,CAAvC,CAKa,UAAb,GAAIA,CAAJ,EACEkB,CAAAjH,OAAA,CAAa,QAAb,CAAuB,QAAQ,CAAC6tD,CAAD,CAASC,CAAT,CAAoB,CAEjD,IAAIC,EAAMF,CAANE,CAAe,CACnB,IAAIA,CAAJ,IAAaD,CAAb,CAAyB,CAAzB,EAA6B,CAC3B,IAAI/wC,EAAUywC,CAAA,CAAavmD,CAAAsyC,MAAA,CAAYj5C,CAAA,CAAKyF,CAAL,CAAZ,CAAb,CACdgoD,EAAA,GAAQl0C,CAAR,EAQA+e,CACJ,CADiB60B,CAAA,CAPA1wC,CAOA,CAA2B,CAA3B,CACjB,CAAAzc,CAAAm4B,UAAA,CAAeG,CAAf,CATI,GAaAA,CACJ,CADiB60B,CAAA,CAXG1wC,CAWH,CAA4B,EAA5B,CACjB,CAAAzc,CAAAq4B,aAAA,CAAkBC,CAAlB,CAdI,CAF2B,CAHoB,CAAnD,CAXiC,CAFhC,CAD8B,CAAhC,CAF+B,CAj1qBxC,IAAIo1B,GAAsB,oBAA1B,CAgBIntD,EAAYA,QAAQ,CAACmjD,CAAD,CAAS,CAAC,MAAO7mD,EAAA,CAAS6mD,CAAT,CAAA,CAAmBA,CAAAz7C,YAAA,EAAnB;AAA0Cy7C,CAAlD,CAhBjC,CAiBItmD,GAAiBK,MAAAsiB,UAAA3iB,eAjBrB,CA6BI+O,GAAYA,QAAQ,CAACu3C,CAAD,CAAS,CAAC,MAAO7mD,EAAA,CAAS6mD,CAAT,CAAA,CAAmBA,CAAA1tC,YAAA,EAAnB,CAA0C0tC,CAAlD,CA7BjC,CAwDInH,EAxDJ,CAyDI74C,CAzDJ,CA0DI2E,EA1DJ,CA2DI5F,GAAoB,EAAAA,MA3DxB,CA4DI7B,GAAoB,EAAAA,OA5DxB,CA6DIO,GAAoB,EAAAA,KA7DxB,CA8DI7B,GAAoB7B,MAAAsiB,UAAAzgB,SA9DxB,CA+DI4B,GAAoB5E,CAAA,CAAO,IAAP,CA/DxB,CAkEI4K,GAAoB/K,CAAA+K,QAApBA,GAAuC/K,CAAA+K,QAAvCA,CAAwD,EAAxDA,CAlEJ,CAmEIoF,EAnEJ,CAoEItO,GAAoB,CAMxBu+C,GAAA,CAAOngD,CAAAuxD,aAyMP9uD,EAAA4e,QAAA,CAAe,EAoBf3e,GAAA2e,QAAA,CAAmB,EAiHnB,KAAI3gB,EAAUkkB,KAAAlkB,QAAd,CAkEI0a,EAAOA,QAAQ,CAAC1Z,CAAD,CAAQ,CACzB,MAAOjB,EAAA,CAASiB,CAAT,CAAA,CAAkBA,CAAA0Z,KAAA,EAAlB,CAAiC1Z,CADf,CAlE3B,CAyEI48C,GAAkBA,QAAQ,CAACnM,CAAD,CAAI,CAChC,MAAOA,EAAArqC,QAAA,CAAU,+BAAV,CAA2C,MAA3C,CAAAA,QAAA,CACU,OADV,CACmB,OADnB,CADyB,CAzElC,CA+VImI,GAAMA,QAAQ,EAAG,CACnB,GAAInN,CAAA,CAAUmN,EAAAuhD,UAAV,CAAJ,CAA8B,MAAOvhD,GAAAuhD,UAErC,KAAIC,EAAS,EAAG,CAAAzxD,CAAAyJ,cAAA,CAAuB,UAAvB,CAAH,EACG,CAAAzJ,CAAAyJ,cAAA,CAAuB,eAAvB,CADH,CAGb;GAAKgoD,CAAAA,CAAL,CACE,GAAI,CAEF,IAAI3e,QAAJ,CAAa,EAAb,CAFE,CAIF,MAAOrrC,CAAP,CAAU,CACVgqD,CAAA,CAAS,CAAA,CADC,CAKd,MAAQxhD,GAAAuhD,UAAR,CAAwBC,CAhBL,CA/VrB,CA6lBI3oD,GAAiB,CAAC,KAAD,CAAQ,UAAR,CAAoB,KAApB,CAA2B,OAA3B,CA7lBrB,CAo5BI4C,GAAoB,QAp5BxB,CA45BIM,GAAkB,CAAA,CA55BtB,CA65BIW,EA75BJ,CAgjCInM,GAAoB,CAhjCxB,CAijCIqH,GAAiB,CAjjCrB,CAq/CIiI,GAAU,CACZ4hD,KAAM,OADM,CAEZC,MAAO,CAFK,CAGZC,MAAO,CAHK,CAIZC,IAAK,CAJO,CAKZC,SAAU,wBALE,CAkPd9kD,EAAAyuB,QAAA,CAAiB,OAvyEsB,KAyyEnC9e,GAAU3P,CAAAiW,MAAVtG,CAAyB,EAzyEU,CA0yEnCE,GAAO,CAWX7P,EAAAH,MAAA,CAAeklD,QAAQ,CAACtuD,CAAD,CAAO,CAE5B,MAAO,KAAAwf,MAAA,CAAWxf,CAAA,CAAK,IAAAg4B,QAAL,CAAX,CAAP,EAAyC,EAFb,CAQ9B,KAAIhiB,GAAuB,iBAA3B,CACII,GAAkB,aADtB,CAEIm4C,GAAiB,CAAEC,WAAY,UAAd,CAA0BC,WAAY,WAAtC,CAFrB,CAGI72C,GAAenb,CAAA,CAAO,QAAP,CAHnB,CAkBIqb,GAAoB,4BAlBxB,CAmBInB,GAAc,WAnBlB,CAoBIG,GAAkB,WApBtB,CAqBIM,GAAmB,yEArBvB;AAuBIH,GAAU,CACZ,OAAU,CAAC,CAAD,CAAI,8BAAJ,CAAoC,WAApC,CADE,CAGZ,MAAS,CAAC,CAAD,CAAI,SAAJ,CAAe,UAAf,CAHG,CAIZ,IAAO,CAAC,CAAD,CAAI,mBAAJ,CAAyB,qBAAzB,CAJK,CAKZ,GAAM,CAAC,CAAD,CAAI,gBAAJ,CAAsB,kBAAtB,CALM,CAMZ,GAAM,CAAC,CAAD,CAAI,oBAAJ,CAA0B,uBAA1B,CANM,CAOZ,SAAY,CAAC,CAAD,CAAI,EAAJ,CAAQ,EAAR,CAPA,CAUdA,GAAAy3C,SAAA,CAAmBz3C,EAAArJ,OACnBqJ,GAAA03C,MAAA,CAAgB13C,EAAA23C,MAAhB,CAAgC33C,EAAA43C,SAAhC,CAAmD53C,EAAA63C,QAAnD,CAAqE73C,EAAA83C,MACrE93C,GAAA+3C,GAAA,CAAa/3C,EAAAg4C,GA2Tb,KAAIvmD,GAAkBa,CAAA2W,UAAlBxX,CAAqC,CACvCwmD,MAAOA,QAAQ,CAACnsD,CAAD,CAAK,CAGlBosD,QAASA,EAAO,EAAG,CACbC,CAAJ,GACAA,CACA,CADQ,CAAA,CACR,CAAArsD,CAAA,EAFA,CADiB,CAFnB,IAAIqsD,EAAQ,CAAA,CASgB,WAA5B,GAAI7yD,CAAA2e,WAAJ,CACEC,UAAA,CAAWg0C,CAAX,CADF,EAGE,IAAA1mD,GAAA,CAAQ,kBAAR,CAA4B0mD,CAA5B,CAGA,CAAA5lD,CAAA,CAAOjN,CAAP,CAAAmM,GAAA,CAAkB,MAAlB,CAA0B0mD,CAA1B,CANF,CAVkB,CADmB;AAqBvC1vD,SAAUA,QAAQ,EAAG,CACnB,IAAIxB,EAAQ,EACZf,EAAA,CAAQ,IAAR,CAAc,QAAQ,CAAC8G,CAAD,CAAI,CAAE/F,CAAAqD,KAAA,CAAW,EAAX,CAAgB0C,CAAhB,CAAF,CAA1B,CACA,OAAO,GAAP,CAAa/F,CAAA8G,KAAA,CAAW,IAAX,CAAb,CAAgC,GAHb,CArBkB,CA2BvCiyC,GAAIA,QAAQ,CAACn2C,CAAD,CAAQ,CAChB,MAAiB,EAAV,EAACA,CAAD,CAAegD,CAAA,CAAO,IAAA,CAAKhD,CAAL,CAAP,CAAf,CAAqCgD,CAAA,CAAO,IAAA,CAAK,IAAAhH,OAAL,CAAmBgE,CAAnB,CAAP,CAD5B,CA3BmB,CA+BvChE,OAAQ,CA/B+B,CAgCvCyE,KAAMA,EAhCiC,CAiCvCzD,KAAM,EAAAA,KAjCiC,CAkCvCkD,OAAQ,EAAAA,OAlC+B,CAAzC,CA0CIua,GAAe,EACnBpe,EAAA,CAAQ,2DAAA,MAAA,CAAA,GAAA,CAAR,CAAgF,QAAQ,CAACe,CAAD,CAAQ,CAC9Fqd,EAAA,CAAa5a,CAAA,CAAUzC,CAAV,CAAb,CAAA,CAAiCA,CAD6D,CAAhG,CAGA,KAAIsd,GAAmB,EACvBre,EAAA,CAAQ,kDAAA,MAAA,CAAA,GAAA,CAAR,CAAuE,QAAQ,CAACe,CAAD,CAAQ,CACrFsd,EAAA,CAAiBtd,CAAjB,CAAA,CAA0B,CAAA,CAD2D,CAAvF,CAGA,KAAIwd,GAAe,CACjB,YAAe,WADE,CAEjB,YAAe,WAFE,CAGjB,MAAS,KAHQ,CAIjB,MAAS,KAJQ,CAKjB,UAAa,SALI,CAqBnBve;CAAA,CAAQ,CACN+J,KAAMoS,EADA,CAENg2C,WAAYj3C,EAFN,CAAR,CAGG,QAAQ,CAACrV,CAAD,CAAK6C,CAAL,CAAW,CACpB2D,CAAA,CAAO3D,CAAP,CAAA,CAAe7C,CADK,CAHtB,CAOA7F,EAAA,CAAQ,CACN+J,KAAMoS,EADA,CAENxQ,cAAeuR,EAFT,CAINtT,MAAOA,QAAQ,CAACrG,CAAD,CAAU,CAEvB,MAAOoD,EAAAoD,KAAA,CAAYxG,CAAZ,CAAqB,QAArB,CAAP,EAAyC2Z,EAAA,CAAoB3Z,CAAA8Z,WAApB,EAA0C9Z,CAA1C,CAAmD,CAAC,eAAD,CAAkB,QAAlB,CAAnD,CAFlB,CAJnB,CASNkI,aAAcA,QAAQ,CAAClI,CAAD,CAAU,CAE9B,MAAOoD,EAAAoD,KAAA,CAAYxG,CAAZ,CAAqB,eAArB,CAAP,EAAgDoD,CAAAoD,KAAA,CAAYxG,CAAZ,CAAqB,yBAArB,CAFlB,CAT1B,CAcNmI,WAAYuR,EAdN,CAgBN9T,SAAUA,QAAQ,CAAC5F,CAAD,CAAU,CAC1B,MAAO2Z,GAAA,CAAoB3Z,CAApB,CAA6B,WAA7B,CADmB,CAhBtB,CAoBN+4B,WAAYA,QAAQ,CAAC/4B,CAAD,CAAUmF,CAAV,CAAgB,CAClCnF,CAAA6uD,gBAAA,CAAwB1pD,CAAxB,CADkC,CApB9B,CAwBN+W,SAAUlD,EAxBJ,CA0BN81C,IAAKA,QAAQ,CAAC9uD,CAAD,CAAUmF,CAAV,CAAgB3H,CAAhB,CAAuB,CAClC2H,CAAA,CAAOmQ,EAAA,CAAUnQ,CAAV,CAEP,IAAIvG,CAAA,CAAUpB,CAAV,CAAJ,CACEwC,CAAAiN,MAAA,CAAc9H,CAAd,CAAA,CAAsB3H,CADxB,KAGE,OAAOwC,EAAAiN,MAAA,CAAc9H,CAAd,CANyB,CA1B9B,CAoCNzF,KAAMA,QAAQ,CAACM,CAAD,CAAUmF,CAAV,CAAgB3H,CAAhB,CAAuB,CACnC,IAAIuxD,EAAiB9uD,CAAA,CAAUkF,CAAV,CACrB,IAAI0V,EAAA,CAAak0C,CAAb,CAAJ,CACE,GAAInwD,CAAA,CAAUpB,CAAV,CAAJ,CACQA,CAAN;CACEwC,CAAA,CAAQmF,CAAR,CACA,CADgB,CAAA,CAChB,CAAAnF,CAAAoZ,aAAA,CAAqBjU,CAArB,CAA2B4pD,CAA3B,CAFF,GAIE/uD,CAAA,CAAQmF,CAAR,CACA,CADgB,CAAA,CAChB,CAAAnF,CAAA6uD,gBAAA,CAAwBE,CAAxB,CALF,CADF,KASE,OAAQ/uD,EAAA,CAAQmF,CAAR,CAAD,EACE6pD,CAAChvD,CAAA+tB,WAAAkhC,aAAA,CAAgC9pD,CAAhC,CAAD6pD,EAA0CzwD,CAA1CywD,WADF,CAEED,CAFF,CAGEhzD,CAbb,KAeO,IAAI6C,CAAA,CAAUpB,CAAV,CAAJ,CACLwC,CAAAoZ,aAAA,CAAqBjU,CAArB,CAA2B3H,CAA3B,CADK,KAEA,IAAIwC,CAAAqF,aAAJ,CAKL,MAFI6pD,EAEG,CAFGlvD,CAAAqF,aAAA,CAAqBF,CAArB,CAA2B,CAA3B,CAEH,CAAQ,IAAR,GAAA+pD,CAAA,CAAenzD,CAAf,CAA2BmzD,CAxBD,CApC/B,CAgENzvD,KAAMA,QAAQ,CAACO,CAAD,CAAUmF,CAAV,CAAgB3H,CAAhB,CAAuB,CACnC,GAAIoB,CAAA,CAAUpB,CAAV,CAAJ,CACEwC,CAAA,CAAQmF,CAAR,CAAA,CAAgB3H,CADlB,KAGE,OAAOwC,EAAA,CAAQmF,CAAR,CAJ0B,CAhE/B,CAwENwwB,KAAO,QAAQ,EAAG,CAIhBw5B,QAASA,EAAO,CAACnvD,CAAD,CAAUxC,CAAV,CAAiB,CAC/B,GAAImB,CAAA,CAAYnB,CAAZ,CAAJ,CAAwB,CACtB,IAAInB,EAAW2D,CAAA3D,SACf,OAAQA,EAAD,GAAcC,EAAd,EAAmCD,CAAnC,GAAgDsH,EAAhD,CAAkE3D,CAAA+W,YAAlE,CAAwF,EAFzE,CAIxB/W,CAAA+W,YAAA,CAAsBvZ,CALS,CAHjC2xD,CAAAC,IAAA,CAAc,EACd,OAAOD,EAFS,CAAZ,EAxEA,CAqFNxsD,IAAKA,QAAQ,CAAC3C,CAAD,CAAUxC,CAAV,CAAiB,CAC5B,GAAImB,CAAA,CAAYnB,CAAZ,CAAJ,CAAwB,CACtB,GAAIwC,CAAAqvD,SAAJ,EAA+C,QAA/C,GAAwBtvD,EAAA,CAAUC,CAAV,CAAxB,CAAyD,CACvD,IAAIc,EAAS,EACbrE,EAAA,CAAQuD,CAAAumB,QAAR,CAAyB,QAAQ,CAACpZ,CAAD,CAAS,CACpCA,CAAAmiD,SAAJ;AACExuD,CAAAD,KAAA,CAAYsM,CAAA3P,MAAZ,EAA4B2P,CAAAwoB,KAA5B,CAFsC,CAA1C,CAKA,OAAyB,EAAlB,GAAA70B,CAAA1E,OAAA,CAAsB,IAAtB,CAA6B0E,CAPmB,CASzD,MAAOd,EAAAxC,MAVe,CAYxBwC,CAAAxC,MAAA,CAAgBA,CAbY,CArFxB,CAqGNkG,KAAMA,QAAQ,CAAC1D,CAAD,CAAUxC,CAAV,CAAiB,CAC7B,GAAImB,CAAA,CAAYnB,CAAZ,CAAJ,CACE,MAAOwC,EAAA0W,UAETe,GAAA,CAAazX,CAAb,CAAsB,CAAA,CAAtB,CACAA,EAAA0W,UAAA,CAAoBlZ,CALS,CArGzB,CA6GN8F,MAAO2W,EA7GD,CAAR,CA8GG,QAAQ,CAAC3X,CAAD,CAAK6C,CAAL,CAAW,CAIpB2D,CAAA2W,UAAA,CAAiBta,CAAjB,CAAA,CAAyB,QAAQ,CAACgnC,CAAD,CAAOC,CAAP,CAAa,CAAA,IACxC/uC,CADwC,CACrCT,CADqC,CAExC2yD,EAAY,IAAAnzD,OAKhB,IAAIkG,CAAJ,GAAW2X,EAAX,GACoB,CAAd,EAAC3X,CAAAlG,OAAD,EAAoBkG,CAApB,GAA2B0W,EAA3B,EAA6C1W,CAA7C,GAAoDoX,EAApD,CAAyEyyB,CAAzE,CAAgFC,CADtF,IACgGrwC,CADhG,CAC4G,CAC1G,GAAI8C,CAAA,CAASstC,CAAT,CAAJ,CAAoB,CAGlB,IAAK9uC,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBkyD,CAAhB,CAA2BlyD,CAAA,EAA3B,CACE,GAAIiF,CAAJ,GAAWsW,EAAX,CAEEtW,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAY8uC,CAAZ,CAFF,KAIE,KAAKvvC,CAAL,GAAYuvC,EAAZ,CACE7pC,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAYT,CAAZ,CAAiBuvC,CAAA,CAAKvvC,CAAL,CAAjB,CAKN,OAAO,KAdW,CAkBdY,CAAAA,CAAQ8E,CAAA8sD,IAERjxD,EAAAA,CAAMX,CAAD,GAAWzB,CAAX,CAAwB+3B,IAAA+tB,IAAA,CAAS0N,CAAT,CAAoB,CAApB,CAAxB,CAAiDA,CAC1D,KAASrxD,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoBC,CAApB,CAAwBD,CAAA,EAAxB,CAA6B,CAC3B,IAAIwsB,EAAYpoB,CAAA,CAAG,IAAA,CAAKpE,CAAL,CAAH,CAAYiuC,CAAZ,CAAkBC,CAAlB,CAChB5uC,EAAA,CAAQA,CAAA,CAAQA,CAAR,CAAgBktB,CAAhB,CAA4BA,CAFT,CAI7B,MAAOltB,EA1BiG,CA8B1G,IAAKH,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBkyD,CAAhB,CAA2BlyD,CAAA,EAA3B,CACEiF,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAY8uC,CAAZ,CAAkBC,CAAlB,CAGF,OAAO,KA1CmC,CAJ1B,CA9GtB,CAuNA3vC;CAAA,CAAQ,CACNmyD,WAAYj3C,EADN,CAGN3P,GAAIwnD,QAASA,EAAQ,CAACxvD,CAAD,CAAUgY,CAAV,CAAgB1V,CAAhB,CAAoB2V,CAApB,CAAiC,CACpD,GAAIrZ,CAAA,CAAUqZ,CAAV,CAAJ,CAA4B,KAAMd,GAAA,CAAa,QAAb,CAAN,CAG5B,GAAKvB,EAAA,CAAkB5V,CAAlB,CAAL,CAAA,CAIA,IAAIkY,EAAeC,EAAA,CAAmBnY,CAAnB,CAA4B,CAAA,CAA5B,CACfwI,EAAAA,CAAS0P,CAAA1P,OACb,KAAI4P,EAASF,CAAAE,OAERA,EAAL,GACEA,CADF,CACWF,CAAAE,OADX,CACiC6C,EAAA,CAAmBjb,CAAnB,CAA4BwI,CAA5B,CADjC,CAQA,KAHIinD,IAAAA,EAA6B,CAArB,EAAAz3C,CAAA3X,QAAA,CAAa,GAAb,CAAA,CAAyB2X,CAAAlY,MAAA,CAAW,GAAX,CAAzB,CAA2C,CAACkY,CAAD,CAAnDy3C,CACApyD,EAAIoyD,CAAArzD,OAER,CAAOiB,CAAA,EAAP,CAAA,CAAY,CACV2a,CAAA,CAAOy3C,CAAA,CAAMpyD,CAAN,CACP,KAAIke,EAAW/S,CAAA,CAAOwP,CAAP,CAEVuD,EAAL,GACE/S,CAAA,CAAOwP,CAAP,CAqBA,CArBe,EAqBf,CAnBa,YAAb,GAAIA,CAAJ,EAAsC,YAAtC,GAA6BA,CAA7B,CAKEw3C,CAAA,CAASxvD,CAAT,CAAkB8tD,EAAA,CAAgB91C,CAAhB,CAAlB,CAAyC,QAAQ,CAACmD,CAAD,CAAQ,CACvD,IAAmBu0C,EAAUv0C,CAAAw0C,cAGxBD,EAAL,GAAiBA,CAAjB,GAHa/kB,IAGb,EAHaA,IAG2BilB,SAAA,CAAgBF,CAAhB,CAAxC,GACEt3C,CAAA,CAAO+C,CAAP,CAAcnD,CAAd,CALqD,CAAzD,CALF,CAee,UAff,GAeMA,CAfN,EAgBuBhY,CAlsBzBygC,iBAAA,CAksBkCzoB,CAlsBlC,CAksBwCI,CAlsBxC,CAAmC,CAAA,CAAnC,CAqsBE,CAAAmD,CAAA,CAAW/S,CAAA,CAAOwP,CAAP,CAtBb,CAwBAuD,EAAA1a,KAAA,CAAcyB,CAAd,CA5BU,CAhBZ,CAJoD,CAHhD,CAuDNutD,IAAK93C,EAvDC,CAyDN+3C,IAAKA,QAAQ,CAAC9vD,CAAD,CAAUgY,CAAV,CAAgB1V,CAAhB,CAAoB,CAC/BtC,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CAKVA,EAAAgI,GAAA,CAAWgQ,CAAX,CAAiB+3C,QAASA,EAAI,EAAG,CAC/B/vD,CAAA6vD,IAAA,CAAY73C,CAAZ,CAAkB1V,CAAlB,CACAtC,EAAA6vD,IAAA,CAAY73C,CAAZ,CAAkB+3C,CAAlB,CAF+B,CAAjC,CAIA/vD,EAAAgI,GAAA,CAAWgQ,CAAX;AAAiB1V,CAAjB,CAV+B,CAzD3B,CAsEN4wB,YAAaA,QAAQ,CAAClzB,CAAD,CAAUgwD,CAAV,CAAuB,CAAA,IACtC5vD,CADsC,CAC/Bia,EAASra,CAAA8Z,WACpBrC,GAAA,CAAazX,CAAb,CACAvD,EAAA,CAAQ,IAAIqM,CAAJ,CAAWknD,CAAX,CAAR,CAAiC,QAAQ,CAACzwD,CAAD,CAAO,CAC1Ca,CAAJ,CACEia,CAAA41C,aAAA,CAAoB1wD,CAApB,CAA0Ba,CAAA2J,YAA1B,CADF,CAGEsQ,CAAAid,aAAA,CAAoB/3B,CAApB,CAA0BS,CAA1B,CAEFI,EAAA,CAAQb,CANsC,CAAhD,CAH0C,CAtEtC,CAmFNktC,SAAUA,QAAQ,CAACzsC,CAAD,CAAU,CAC1B,IAAIysC,EAAW,EACfhwC,EAAA,CAAQuD,CAAA6W,WAAR,CAA4B,QAAQ,CAAC7W,CAAD,CAAU,CACxCA,CAAA3D,SAAJ,GAAyBC,EAAzB,EACEmwC,CAAA5rC,KAAA,CAAcb,CAAd,CAF0C,CAA9C,CAIA,OAAOysC,EANmB,CAnFtB,CA4FNrZ,SAAUA,QAAQ,CAACpzB,CAAD,CAAU,CAC1B,MAAOA,EAAAkwD,gBAAP,EAAkClwD,CAAA6W,WAAlC,EAAwD,EAD9B,CA5FtB,CAgGNpT,OAAQA,QAAQ,CAACzD,CAAD,CAAUT,CAAV,CAAgB,CAC9B,IAAIlD,EAAW2D,CAAA3D,SACf,IAAIA,CAAJ,GAAiBC,EAAjB,EA96C8Byd,EA86C9B,GAAsC1d,CAAtC,CAAA,CAEAkD,CAAA,CAAO,IAAIuJ,CAAJ,CAAWvJ,CAAX,CAEP,KAASlC,IAAAA,EAAI,CAAJA,CAAOW,EAAKuB,CAAAnD,OAArB,CAAkCiB,CAAlC,CAAsCW,CAAtC,CAA0CX,CAAA,EAA1C,CAEE2C,CAAAmW,YAAA,CADY5W,CAAA22C,CAAK74C,CAAL64C,CACZ,CANF,CAF8B,CAhG1B,CA4GNia,QAASA,QAAQ,CAACnwD,CAAD,CAAUT,CAAV,CAAgB,CAC/B,GAAIS,CAAA3D,SAAJ,GAAyBC,EAAzB,CAA4C,CAC1C,IAAI8D,EAAQJ,CAAA8W,WACZra,EAAA,CAAQ,IAAIqM,CAAJ,CAAWvJ,CAAX,CAAR,CAA0B,QAAQ,CAAC22C,CAAD,CAAQ,CACxCl2C,CAAAiwD,aAAA,CAAqB/Z,CAArB;AAA4B91C,CAA5B,CADwC,CAA1C,CAF0C,CADb,CA5G3B,CAqHNmW,KAAMA,QAAQ,CAACvW,CAAD,CAAUowD,CAAV,CAAoB,CAChCA,CAAA,CAAWhtD,CAAA,CAAOgtD,CAAP,CAAA7Z,GAAA,CAAoB,CAApB,CAAAlzC,MAAA,EAAA,CAA+B,CAA/B,CACX,KAAIgX,EAASra,CAAA8Z,WACTO,EAAJ,EACEA,CAAAid,aAAA,CAAoB84B,CAApB,CAA8BpwD,CAA9B,CAEFowD,EAAAj6C,YAAA,CAAqBnW,CAArB,CANgC,CArH5B,CA8HN0nB,OAAQvN,EA9HF,CAgINk2C,OAAQA,QAAQ,CAACrwD,CAAD,CAAU,CACxBma,EAAA,CAAana,CAAb,CAAsB,CAAA,CAAtB,CADwB,CAhIpB,CAoINswD,MAAOA,QAAQ,CAACtwD,CAAD,CAAUuwD,CAAV,CAAsB,CAAA,IAC/BnwD,EAAQJ,CADuB,CACdqa,EAASra,CAAA8Z,WAC9By2C,EAAA,CAAa,IAAIznD,CAAJ,CAAWynD,CAAX,CAEb,KAJmC,IAI1BlzD,EAAI,CAJsB,CAInBW,EAAKuyD,CAAAn0D,OAArB,CAAwCiB,CAAxC,CAA4CW,CAA5C,CAAgDX,CAAA,EAAhD,CAAqD,CACnD,IAAIkC,EAAOgxD,CAAA,CAAWlzD,CAAX,CACXgd,EAAA41C,aAAA,CAAoB1wD,CAApB,CAA0Ba,CAAA2J,YAA1B,CACA3J,EAAA,CAAQb,CAH2C,CAJlB,CApI/B,CA+IN6c,SAAU9C,EA/IJ,CAgJN+C,YAAanD,EAhJP,CAkJNs3C,YAAaA,QAAQ,CAACxwD,CAAD,CAAUiZ,CAAV,CAAoBw3C,CAApB,CAA+B,CAC9Cx3C,CAAJ,EACExc,CAAA,CAAQwc,CAAAnZ,MAAA,CAAe,GAAf,CAAR,CAA6B,QAAQ,CAACsqB,CAAD,CAAY,CAC/C,IAAIsmC,EAAiBD,CACjB9xD,EAAA,CAAY+xD,CAAZ,CAAJ,GACEA,CADF,CACmB,CAAC13C,EAAA,CAAehZ,CAAf,CAAwBoqB,CAAxB,CADpB,CAGA,EAACsmC,CAAA,CAAiBp3C,EAAjB,CAAkCJ,EAAnC,EAAsDlZ,CAAtD,CAA+DoqB,CAA/D,CAL+C,CAAjD,CAFgD,CAlJ9C,CA8JN/P,OAAQA,QAAQ,CAACra,CAAD,CAAU,CAExB,MAAO,CADHqa,CACG,CADMra,CAAA8Z,WACN,GA5+CuBC,EA4+CvB,GAAUM,CAAAhe,SAAV,CAA4Dge,CAA5D,CAAqE,IAFpD,CA9JpB,CAmKNy+B,KAAMA,QAAQ,CAAC94C,CAAD,CAAU,CACtB,MAAOA,EAAA2wD,mBADe,CAnKlB;AAuKNhxD,KAAMA,QAAQ,CAACK,CAAD,CAAUiZ,CAAV,CAAoB,CAChC,MAAIjZ,EAAA4wD,qBAAJ,CACS5wD,CAAA4wD,qBAAA,CAA6B33C,CAA7B,CADT,CAGS,EAJuB,CAvK5B,CA+KN5V,MAAOkU,EA/KD,CAiLN1O,eAAgBA,QAAQ,CAAC7I,CAAD,CAAUmb,CAAV,CAAiB01C,CAAjB,CAAkC,CAAA,IAEpDC,CAFoD,CAE1BC,CAF0B,CAGpD/X,EAAY79B,CAAAnD,KAAZghC,EAA0B79B,CAH0B,CAIpDjD,EAAeC,EAAA,CAAmBnY,CAAnB,CAInB,IAFIub,CAEJ,EAHI/S,CAGJ,CAHa0P,CAGb,EAH6BA,CAAA1P,OAG7B,GAFyBA,CAAA,CAAOwwC,CAAP,CAEzB,CAEE8X,CAmBA,CAnBa,CACXhmB,eAAgBA,QAAQ,EAAG,CAAE,IAAAxvB,iBAAA,CAAwB,CAAA,CAA1B,CADhB,CAEXF,mBAAoBA,QAAQ,EAAG,CAAE,MAAiC,CAAA,CAAjC,GAAO,IAAAE,iBAAT,CAFpB,CAGXK,yBAA0BA,QAAQ,EAAG,CAAE,IAAAF,4BAAA,CAAmC,CAAA,CAArC,CAH1B,CAIXK,8BAA+BA,QAAQ,EAAG,CAAE,MAA4C,CAAA,CAA5C,GAAO,IAAAL,4BAAT,CAJ/B,CAKXI,gBAAiBtd,CALN,CAMXyZ,KAAMghC,CANK,CAOXrO,OAAQ3qC,CAPG,CAmBb,CARImb,CAAAnD,KAQJ,GAPE84C,CAOF,CAPehzD,CAAA,CAAOgzD,CAAP;AAAmB31C,CAAnB,CAOf,EAHA61C,CAGA,CAHezvD,EAAA,CAAYga,CAAZ,CAGf,CAFAw1C,CAEA,CAFcF,CAAA,CAAkB,CAACC,CAAD,CAAA9uD,OAAA,CAAoB6uD,CAApB,CAAlB,CAAyD,CAACC,CAAD,CAEvE,CAAAr0D,CAAA,CAAQu0D,CAAR,CAAsB,QAAQ,CAAC1uD,CAAD,CAAK,CAC5BwuD,CAAAh1C,8BAAA,EAAL,EACExZ,CAAAG,MAAA,CAASzC,CAAT,CAAkB+wD,CAAlB,CAF+B,CAAnC,CA7BsD,CAjLpD,CAAR,CAqNG,QAAQ,CAACzuD,CAAD,CAAK6C,CAAL,CAAW,CAIpB2D,CAAA2W,UAAA,CAAiBta,CAAjB,CAAA,CAAyB,QAAQ,CAACgnC,CAAD,CAAOC,CAAP,CAAa6kB,CAAb,CAAmB,CAGlD,IAFA,IAAIzzD,CAAJ,CAESH,EAAI,CAFb,CAEgBW,EAAK,IAAA5B,OAArB,CAAkCiB,CAAlC,CAAsCW,CAAtC,CAA0CX,CAAA,EAA1C,CACMsB,CAAA,CAAYnB,CAAZ,CAAJ,EACEA,CACA,CADQ8E,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAY8uC,CAAZ,CAAkBC,CAAlB,CAAwB6kB,CAAxB,CACR,CAAIryD,CAAA,CAAUpB,CAAV,CAAJ,GAEEA,CAFF,CAEU4F,CAAA,CAAO5F,CAAP,CAFV,CAFF,EAOE8Z,EAAA,CAAe9Z,CAAf,CAAsB8E,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAY8uC,CAAZ,CAAkBC,CAAlB,CAAwB6kB,CAAxB,CAAtB,CAGJ,OAAOryD,EAAA,CAAUpB,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,IAdgB,CAkBpDsL,EAAA2W,UAAArd,KAAA,CAAwB0G,CAAA2W,UAAAzX,GACxBc,EAAA2W,UAAAyxC,OAAA,CAA0BpoD,CAAA2W,UAAAowC,IAvBN,CArNtB,CAgTApzC,GAAAgD,UAAA,CAAoB,CAMlB7C,IAAKA,QAAQ,CAAChgB,CAAD,CAAMY,CAAN,CAAa,CACxB,IAAA,CAAK8e,EAAA,CAAQ1f,CAAR,CAAa,IAAAa,QAAb,CAAL,CAAA,CAAmCD,CADX,CANR,CAclB6J,IAAKA,QAAQ,CAACzK,CAAD,CAAM,CACjB,MAAO,KAAA,CAAK0f,EAAA,CAAQ1f,CAAR,CAAa,IAAAa,QAAb,CAAL,CADU,CAdD,CAsBlBiqB,OAAQA,QAAQ,CAAC9qB,CAAD,CAAM,CACpB,IAAIY,EAAQ,IAAA,CAAKZ,CAAL,CAAW0f,EAAA,CAAQ1f,CAAR,CAAa,IAAAa,QAAb,CAAX,CACZ,QAAO,IAAA,CAAKb,CAAL,CACP;MAAOY,EAHa,CAtBJ,CA2FpB,KAAIyf,GAAU,oCAAd,CACII,GAAe,GADnB,CAEIC,GAAS,sBAFb,CAGIN,GAAiB,kCAHrB,CAII5S,GAAkBpO,CAAA,CAAO,WAAP,CA6wBtBkK,GAAAirD,WAAA,CAA4Bj0C,EA4Q5B,KAAIk0C,GAAiBp1D,CAAA,CAAO,UAAP,CAArB,CAeI+V,GAAmB,CAAC,UAAD,CAAa,QAAQ,CAAChM,CAAD,CAAW,CAGrD,IAAAsrD,YAAA,CAAmB,EAkCnB,KAAAp3B,SAAA,CAAgBC,QAAQ,CAAC/0B,CAAD,CAAOgF,CAAP,CAAgB,CACtC,IAAIvN,EAAMuI,CAANvI,CAAa,YACjB,IAAIuI,CAAJ,EAA8B,GAA9B,EAAYA,CAAA1D,OAAA,CAAY,CAAZ,CAAZ,CAAmC,KAAM2vD,GAAA,CAAe,SAAf,CACoBjsD,CADpB,CAAN,CAEnC,IAAAksD,YAAA,CAAiBlsD,CAAAyf,OAAA,CAAY,CAAZ,CAAjB,CAAA,CAAmChoB,CACnCmJ,EAAAoE,QAAA,CAAiBvN,CAAjB,CAAsBuN,CAAtB,CALsC,CAsBxC,KAAAmnD,gBAAA,CAAuBC,QAAQ,CAACj3B,CAAD,CAAa,CACjB,CAAzB,GAAIr8B,SAAA7B,OAAJ,GACE,IAAAo1D,kBADF,CAC4Bl3B,CAAD,WAAuBr5B,OAAvB,CAAiCq5B,CAAjC,CAA8C,IADzE,CAGA,OAAO,KAAAk3B,kBAJmC,CAO5C;IAAAx1C,KAAA,CAAY,CAAC,KAAD,CAAQ,iBAAR,CAA2B,YAA3B,CAAyC,QAAQ,CAAClI,CAAD,CAAMoB,CAAN,CAAuBxB,CAAvB,CAAmC,CAI9F+9C,QAASA,EAAsB,CAACnvD,CAAD,CAAK,CAAA,IAC9BovD,CAD8B,CACpB5rC,EAAQhS,CAAAgS,MAAA,EACtBA,EAAA4X,QAAAi0B,WAAA,CAA2BC,QAA6B,EAAG,CACzDF,CAAA,EAAYA,CAAA,EAD6C,CAI3Dh+C,EAAA88B,aAAA,CAAwBqhB,QAA4B,EAAG,CACrDH,CAAA,CAAWpvD,CAAA,CAAGwvD,QAAgC,EAAG,CAC/ChsC,CAAAgZ,QAAA,EAD+C,CAAtC,CAD0C,CAAvD,CAMA,OAAOhZ,EAAA4X,QAZ2B,CAepCq0B,QAASA,EAAqB,CAAC/xD,CAAD,CAAUmc,CAAV,CAAmB,CAAA,IAC3C8b,EAAQ,EADmC,CAC/BE,EAAW,EADoB,CAG3C65B,EAAahoD,EAAA,EACjBvN,EAAA,CAAQqD,CAACE,CAAAN,KAAA,CAAa,OAAb,CAADI,EAA0B,EAA1BA,OAAA,CAAoC,KAApC,CAAR,CAAoD,QAAQ,CAACsqB,CAAD,CAAY,CACtE4nC,CAAA,CAAW5nC,CAAX,CAAA,CAAwB,CAAA,CAD8C,CAAxE,CAIA3tB,EAAA,CAAQ0f,CAAR,CAAiB,QAAQ,CAACsgB,CAAD,CAASrS,CAAT,CAAoB,CAC3C,IAAIlO,EAAW81C,CAAA,CAAW5nC,CAAX,CAMA,EAAA,CAAf,GAAIqS,CAAJ,EAAwBvgB,CAAxB,CACEic,CAAAt3B,KAAA,CAAcupB,CAAd,CADF,CAEsB,CAAA,CAFtB,GAEWqS,CAFX,EAE+BvgB,CAF/B,EAGE+b,CAAAp3B,KAAA,CAAWupB,CAAX,CAVyC,CAA7C,CAcA,OAA0C,EAA1C,CAAQ6N,CAAA77B,OAAR,CAAuB+7B,CAAA/7B,OAAvB,EACE,CAAC67B,CAAA77B,OAAA,CAAe67B,CAAf,CAAuB,IAAxB,CAA8BE,CAAA/7B,OAAA,CAAkB+7B,CAAlB,CAA6B,IAA3D,CAvB6C,CA0BjD85B,QAASA,EAAuB,CAAClzC,CAAD,CAAQ5C,CAAR,CAAiB+1C,CAAjB,CAAqB,CACnD,IADmD,IAC1C70D,EAAE,CADwC,CACrCW,EAAKme,CAAA/f,OAAnB,CAAmCiB,CAAnC,CAAuCW,CAAvC,CAA2C,EAAEX,CAA7C,CAEE0hB,CAAA,CADgB5C,CAAAiO,CAAQ/sB,CAAR+sB,CAChB,CAAA,CAAmB8nC,CAH8B,CAOrDC,QAASA,EAAY,EAAG,CAEjBC,CAAL;CACEA,CACA,CADet+C,CAAAgS,MAAA,EACf,CAAA5Q,CAAA,CAAgB,QAAQ,EAAG,CACzBk9C,CAAAtzB,QAAA,EACAszB,EAAA,CAAe,IAFU,CAA3B,CAFF,CAOA,OAAOA,EAAA10B,QATe,CAYxB20B,QAASA,EAAW,CAACryD,CAAD,CAAUumB,CAAV,CAAmB,CACrC,GAAI3f,EAAA/H,SAAA,CAAiB0nB,CAAjB,CAAJ,CAA+B,CAC7B,IAAI+rC,EAASx0D,CAAA,CAAOyoB,CAAAgsC,KAAP,EAAuB,EAAvB,CAA2BhsC,CAAAisC,GAA3B,EAAyC,EAAzC,CACbxyD,EAAA8uD,IAAA,CAAYwD,CAAZ,CAF6B,CADM,CA9DvC,IAAIF,CAsFJ,OAAO,CACLK,QAASA,QAAQ,CAACzyD,CAAD,CAAUuyD,CAAV,CAAgBC,CAAhB,CAAoB,CACnCH,CAAA,CAAYryD,CAAZ,CAAqB,CAAEuyD,KAAMA,CAAR,CAAcC,GAAIA,CAAlB,CAArB,CACA,OAAOL,EAAA,EAF4B,CADhC,CAsBLO,MAAOA,QAAQ,CAAC1yD,CAAD,CAAUqa,CAAV,CAAkBi2C,CAAlB,CAAyB/pC,CAAzB,CAAkC,CAC/C8rC,CAAA,CAAYryD,CAAZ,CAAqBumB,CAArB,CACA+pC,EAAA,CAAQA,CAAAA,MAAA,CAAYtwD,CAAZ,CAAR,CACQqa,CAAA81C,QAAA,CAAenwD,CAAf,CACR,OAAOmyD,EAAA,EAJwC,CAtB5C,CAwCLQ,MAAOA,QAAQ,CAAC3yD,CAAD,CAAUumB,CAAV,CAAmB,CAChCvmB,CAAA0nB,OAAA,EACA,OAAOyqC,EAAA,EAFyB,CAxC7B,CA+DLS,KAAMA,QAAQ,CAAC5yD,CAAD,CAAUqa,CAAV,CAAkBi2C,CAAlB,CAAyB/pC,CAAzB,CAAkC,CAG9C,MAAO,KAAAmsC,MAAA,CAAW1yD,CAAX,CAAoBqa,CAApB,CAA4Bi2C,CAA5B,CAAmC/pC,CAAnC,CAHuC,CA/D3C,CAkFLnK,SAAUA,QAAQ,CAACpc,CAAD,CAAUoqB,CAAV,CAAqB7D,CAArB,CAA8B,CAC9C,MAAO,KAAAshC,SAAA,CAAc7nD,CAAd,CAAuBoqB,CAAvB,CAAkC,EAAlC,CAAsC7D,CAAtC,CADuC,CAlF3C,CAsFLssC,sBAAuBA,QAAQ,CAAC7yD,CAAD,CAAUoqB,CAAV,CAAqB7D,CAArB,CAA8B,CAC3DvmB,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CACVoqB,EAAA,CAAa7tB,CAAA,CAAS6tB,CAAT,CAAD,CAEMA,CAFN,CACO5tB,CAAA,CAAQ4tB,CAAR,CAAA,CAAqBA,CAAA9lB,KAAA,CAAe,GAAf,CAArB,CAA2C,EAE9D7H;CAAA,CAAQuD,CAAR,CAAiB,QAAQ,CAACA,CAAD,CAAU,CACjCsZ,EAAA,CAAetZ,CAAf,CAAwBoqB,CAAxB,CADiC,CAAnC,CAGAioC,EAAA,CAAYryD,CAAZ,CAAqBumB,CAArB,CACA,OAAO4rC,EAAA,EAToD,CAtFxD,CA+GL91C,YAAaA,QAAQ,CAACrc,CAAD,CAAUoqB,CAAV,CAAqB7D,CAArB,CAA8B,CACjD,MAAO,KAAAshC,SAAA,CAAc7nD,CAAd,CAAuB,EAAvB,CAA2BoqB,CAA3B,CAAsC7D,CAAtC,CAD0C,CA/G9C,CAmHLusC,yBAA0BA,QAAQ,CAAC9yD,CAAD,CAAUoqB,CAAV,CAAqB7D,CAArB,CAA8B,CAC9DvmB,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CACVoqB,EAAA,CAAa7tB,CAAA,CAAS6tB,CAAT,CAAD,CAEMA,CAFN,CACO5tB,CAAA,CAAQ4tB,CAAR,CAAA,CAAqBA,CAAA9lB,KAAA,CAAe,GAAf,CAArB,CAA2C,EAE9D7H,EAAA,CAAQuD,CAAR,CAAiB,QAAQ,CAACA,CAAD,CAAU,CACjCkZ,EAAA,CAAkBlZ,CAAlB,CAA2BoqB,CAA3B,CADiC,CAAnC,CAGAioC,EAAA,CAAYryD,CAAZ,CAAqBumB,CAArB,CACA,OAAO4rC,EAAA,EATuD,CAnH3D,CA6ILtK,SAAUA,QAAQ,CAAC7nD,CAAD,CAAU+yD,CAAV,CAAerrC,CAAf,CAAuBnB,CAAvB,CAAgC,CAChD,IAAIlkB,EAAO,IAAX,CAEI2wD,EAAe,CAAA,CACnBhzD,EAAA,CAAUoD,CAAA,CAAOpD,CAAP,CAEV,KAAI+e,EAAQ/e,CAAAwG,KAAA,CAJMysD,kBAIN,CACPl0C,EAAL,CAMWwH,CANX,EAMsBxH,CAAAwH,QANtB,GAOExH,CAAAwH,QAPF,CAOkB3f,EAAA9I,OAAA,CAAeihB,CAAAwH,QAAf,EAAgC,EAAhC,CAAoCA,CAApC,CAPlB,GACExH,CAIA,CAJQ,CACN5C,QAAS,EADH,CAENoK,QAASA,CAFH,CAIR,CAAAysC,CAAA,CAAe,CAAA,CALjB,CAUI72C,EAAAA,CAAU4C,CAAA5C,QAEd42C,EAAA,CAAMv2D,CAAA,CAAQu2D,CAAR,CAAA,CAAeA,CAAf,CAAqBA,CAAAjzD,MAAA,CAAU,GAAV,CAC3B4nB,EAAA,CAASlrB,CAAA,CAAQkrB,CAAR,CAAA,CAAkBA,CAAlB,CAA2BA,CAAA5nB,MAAA,CAAa,GAAb,CACpCmyD,EAAA,CAAwB91C,CAAxB,CAAiC42C,CAAjC,CAAsC,CAAA,CAAtC,CACAd,EAAA,CAAwB91C,CAAxB,CAAiCuL,CAAjC,CAAyC,CAAA,CAAzC,CAEIsrC,EAAJ,GACEj0C,CAAA2e,QAgBA,CAhBgB+zB,CAAA,CAAuB,QAAQ,CAACnzB,CAAD,CAAO,CACpD,IAAIvf;AAAQ/e,CAAAwG,KAAA,CAxBEysD,kBAwBF,CACZjzD,EAAA4uD,WAAA,CAzBcqE,kBAyBd,CAKA,IAAIl0C,CAAJ,CAAW,CACT,IAAI5C,EAAU41C,CAAA,CAAsB/xD,CAAtB,CAA+B+e,CAAA5C,QAA/B,CACVA,EAAJ,EACE9Z,CAAA6wD,sBAAA,CAA2BlzD,CAA3B,CAAoCmc,CAAA,CAAQ,CAAR,CAApC,CAAgDA,CAAA,CAAQ,CAAR,CAAhD,CAA4D4C,CAAAwH,QAA5D,CAHO,CAOX+X,CAAA,EAdoD,CAAtC,CAgBhB,CAAAt+B,CAAAwG,KAAA,CAvCgBysD,kBAuChB,CAA0Bl0C,CAA1B,CAjBF,CAoBA,OAAOA,EAAA2e,QA5CyC,CA7I7C,CA4LLw1B,sBAAuBA,QAAQ,CAAClzD,CAAD,CAAU+yD,CAAV,CAAerrC,CAAf,CAAuBnB,CAAvB,CAAgC,CAC7DwsC,CAAA,EAAO,IAAAF,sBAAA,CAA2B7yD,CAA3B,CAAoC+yD,CAApC,CACPrrC,EAAA,EAAU,IAAAorC,yBAAA,CAA8B9yD,CAA9B,CAAuC0nB,CAAvC,CACV2qC,EAAA,CAAYryD,CAAZ,CAAqBumB,CAArB,CACA,OAAO4rC,EAAA,EAJsD,CA5L1D,CAmMLloC,QAAS1rB,CAnMJ,CAoML2nB,OAAQ3nB,CApMH,CAxFuF,CAApF,CAlEyC,CAAhC,CAfvB,CA64DIgqB,GAAiBvsB,CAAA,CAAO,UAAP,CAQrBqQ,GAAA8Q,QAAA,CAA2B,CAAC,UAAD,CAAa,uBAAb,CAuwD3B,KAAIoc,GAAgB,uBAApB,CAwUIyB,GAAmB,kBAxUvB,CAyUIc,GAAgC,CAAC,eAAgBd,EAAhB,CAAmC,gBAApC,CAzUpC;AA0UIC,GAAa,kBA1UjB,CA2UIC,GAAW,YA3Uf,CA4UIJ,GAAyB,cA5U7B,CA4mDIyH,GAAqBvmC,CAAA,CAAO,cAAP,CA5mDzB,CAwsEIm3D,GAAa,iCAxsEjB,CAysEIvsB,GAAgB,CAAC,KAAQ,EAAT,CAAa,MAAS,GAAtB,CAA2B,IAAO,EAAlC,CAzsEpB,CA0sEIuB,GAAkBnsC,CAAA,CAAO,WAAP,CA1sEtB,CAogFIo3D,GAAoB,CAMtBtrB,QAAS,CAAA,CANa,CAYtBuD,UAAW,CAAA,CAZW,CAiCtBjB,OAAQf,EAAA,CAAe,UAAf,CAjCc,CAwDtBjmB,IAAKA,QAAQ,CAACA,CAAD,CAAM,CACjB,GAAIzkB,CAAA,CAAYykB,CAAZ,CAAJ,CACE,MAAO,KAAAklB,MAET,KAAIpnC,EAAQiyD,EAAA78C,KAAA,CAAgB8M,CAAhB,CACZ,EAAIliB,CAAA,CAAM,CAAN,CAAJ,EAAwB,EAAxB,GAAgBkiB,CAAhB,GAA4B,IAAA7Z,KAAA,CAAUzF,kBAAA,CAAmB5C,CAAA,CAAM,CAAN,CAAnB,CAAV,CAC5B,EAAIA,CAAA,CAAM,CAAN,CAAJ,EAAgBA,CAAA,CAAM,CAAN,CAAhB,EAAoC,EAApC,GAA4BkiB,CAA5B,GAAwC,IAAA+jB,OAAA,CAAYjmC,CAAA,CAAM,CAAN,CAAZ,EAAwB,EAAxB,CACxC,KAAAqgB,KAAA,CAAUrgB,CAAA,CAAM,CAAN,CAAV,EAAsB,EAAtB,CAEA,OAAO,KATU,CAxDG,CAsFtBmgC,SAAUgI,EAAA,CAAe,YAAf,CAtFY,CA0GtBrvB,KAAMqvB,EAAA,CAAe,QAAf,CA1GgB,CA8HtB1C,KAAM0C,EAAA,CAAe,QAAf,CA9HgB,CAwJtB9/B,KAAMggC,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAAChgC,CAAD,CAAO,CAClDA,CAAA,CAAgB,IAAT,GAAAA,CAAA;AAAgBA,CAAAvK,SAAA,EAAhB,CAAkC,EACzC,OAAyB,GAAlB,EAAAuK,CAAA9H,OAAA,CAAY,CAAZ,CAAA,CAAwB8H,CAAxB,CAA+B,GAA/B,CAAqCA,CAFM,CAA9C,CAxJgB,CA0MtB49B,OAAQA,QAAQ,CAACA,CAAD,CAASksB,CAAT,CAAqB,CACnC,OAAQp1D,SAAA7B,OAAR,EACE,KAAK,CAAL,CACE,MAAO,KAAA8qC,SACT,MAAK,CAAL,CACE,GAAI3qC,CAAA,CAAS4qC,CAAT,CAAJ,EAAwBroC,CAAA,CAASqoC,CAAT,CAAxB,CACEA,CACA,CADSA,CAAAnoC,SAAA,EACT,CAAA,IAAAkoC,SAAA,CAAgBnjC,EAAA,CAAcojC,CAAd,CAFlB,KAGO,IAAItoC,CAAA,CAASsoC,CAAT,CAAJ,CACLA,CAMA,CANS5mC,EAAA,CAAK4mC,CAAL,CAAa,EAAb,CAMT,CAJA1qC,CAAA,CAAQ0qC,CAAR,CAAgB,QAAQ,CAAC3pC,CAAD,CAAQZ,CAAR,CAAa,CACtB,IAAb,EAAIY,CAAJ,EAAmB,OAAO2pC,CAAA,CAAOvqC,CAAP,CADS,CAArC,CAIA,CAAA,IAAAsqC,SAAA,CAAgBC,CAPX,KASL,MAAMgB,GAAA,CAAgB,UAAhB,CAAN,CAGF,KACF,SACMxpC,CAAA,CAAY00D,CAAZ,CAAJ,EAA8C,IAA9C,GAA+BA,CAA/B,CACE,OAAO,IAAAnsB,SAAA,CAAcC,CAAd,CADT,CAGE,IAAAD,SAAA,CAAcC,CAAd,CAHF,CAG0BksB,CAxB9B,CA4BA,IAAAjrB,UAAA,EACA,OAAO,KA9B4B,CA1Mf,CAgQtB7mB,KAAMgoB,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAAChoB,CAAD,CAAO,CAClD,MAAgB,KAAT,GAAAA,CAAA,CAAgBA,CAAAviB,SAAA,EAAhB,CAAkC,EADS,CAA9C,CAhQgB,CA4QtB4E,QAASA,QAAQ,EAAG,CAClB,IAAAynC,UAAA,CAAiB,CAAA,CACjB,OAAO,KAFW,CA5QE,CAkRxB5uC;CAAA,CAAQ,CAAC2sC,EAAD,CAA6BN,EAA7B,CAAkDnB,EAAlD,CAAR,CAA6E,QAAQ,CAAC2rB,CAAD,CAAW,CAC9FA,CAAA7zC,UAAA,CAAqBtiB,MAAAkE,OAAA,CAAc+xD,EAAd,CAqBrBE,EAAA7zC,UAAAwD,MAAA,CAA2BswC,QAAQ,CAACtwC,CAAD,CAAQ,CACzC,GAAK7mB,CAAA6B,SAAA7B,OAAL,CACE,MAAO,KAAA6tC,QAET,IAAIqpB,CAAJ,GAAiB3rB,EAAjB,EAAsCG,CAAA,IAAAA,QAAtC,CACE,KAAMK,GAAA,CAAgB,SAAhB,CAAN,CAMF,IAAA8B,QAAA,CAAetrC,CAAA,CAAYskB,CAAZ,CAAA,CAAqB,IAArB,CAA4BA,CAE3C,OAAO,KAbkC,CAtBmD,CAAhG,CAuhBA,KAAIspB,GAAevwC,CAAA,CAAO,QAAP,CAAnB,CAgEIw3D,GAAO5kB,QAAAnvB,UAAA1iB,KAhEX,CAiEI02D,GAAQ7kB,QAAAnvB,UAAAhd,MAjEZ,CAkEIixD,GAAO9kB,QAAAnvB,UAAArd,KAlEX,CAmFIuxD,GAAY3pD,EAAA,EAChBvN,EAAA,CAAQ,CACN,OAAQm3D,QAAQ,EAAG,CAAE,MAAO,KAAT,CADb,CAEN,OAAQC,QAAQ,EAAG,CAAE,MAAO,CAAA,CAAT,CAFb,CAGN,QAASC,QAAQ,EAAG,CAAE,MAAO,CAAA,CAAT,CAHd,CAIN,UAAa/3D,QAAQ,EAAG,EAJlB,CAAR,CAKG,QAAQ,CAACg4D,CAAD,CAAiB5uD,CAAjB,CAAuB,CAChC4uD,CAAA1oD,SAAA,CAA0B0oD,CAAAviC,QAA1B,CAAmDuiC,CAAAllB,aAAnD,CAAiF,CAAA,CACjF8kB,GAAA,CAAUxuD,CAAV,CAAA,CAAkB4uD,CAFc,CALlC,CAWAJ,GAAA,CAAU,MAAV,CAAA;AAAoB,QAAQ,CAACtxD,CAAD,CAAO,CAAE,MAAOA,EAAT,CACnCsxD,GAAA,CAAU,MAAV,CAAA9kB,aAAA,CAAiC,CAAA,CAIjC,KAAImlB,GAAYl2D,CAAA,CAAOkM,EAAA,EAAP,CAAoB,CAChC,IAAIiqD,QAAQ,CAAC5xD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAC/BnlB,CAAA,CAAEA,CAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAiBmS,EAAA,CAAEA,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CACrB,OAAI1gB,EAAA,CAAU0N,CAAV,CAAJ,CACM1N,CAAA,CAAU6yB,CAAV,CAAJ,CACSnlB,CADT,CACamlB,CADb,CAGOnlB,CAJT,CAMO1N,CAAA,CAAU6yB,CAAV,CAAA,CAAeA,CAAf,CAAmB11B,CARK,CADD,CAUhC,IAAIm4D,QAAQ,CAAC7xD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAC3BnlB,CAAA,CAAEA,CAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAiBmS,EAAA,CAAEA,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CACrB,QAAQ1gB,CAAA,CAAU0N,CAAV,CAAA,CAAeA,CAAf,CAAmB,CAA3B,GAAiC1N,CAAA,CAAU6yB,CAAV,CAAA,CAAeA,CAAf,CAAmB,CAApD,CAF2B,CAVD,CAchC,IAAI0iC,QAAQ,CAAC9xD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA1B,CAdD,CAehC,IAAI80C,QAAQ,CAAC/xD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA1B,CAfD,CAgBhC,IAAI+0C,QAAQ,CAAChyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA1B,CAhBD,CAiBhC,MAAMg1C,QAAQ,CAACjyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,GAA2BmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA5B,CAjBH,CAkBhC,MAAMi1C,QAAQ,CAAClyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,GAA2BmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA5B,CAlBH,CAmBhC,KAAKk1C,QAAQ,CAACnyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA3B,CAnBF,CAoBhC,KAAKm1C,QAAQ,CAACpyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF;AAAQid,CAAR,CAAP,EAA0BmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA3B,CApBF,CAqBhC,IAAIo1C,QAAQ,CAACryD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA1B,CArBD,CAsBhC,IAAIq1C,QAAQ,CAACtyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA1B,CAtBD,CAuBhC,KAAKs1C,QAAQ,CAACvyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA3B,CAvBF,CAwBhC,KAAKu1C,QAAQ,CAACxyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA3B,CAxBF,CAyBhC,KAAKw1C,QAAQ,CAACzyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA3B,CAzBF,CA0BhC,KAAKy1C,QAAQ,CAAC1yD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBmlB,CAAlB,CAAqB,CAAC,MAAOnlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BmS,CAAA,CAAEpvB,CAAF,CAAQid,CAAR,CAA3B,CA1BF,CA2BhC,IAAI01C,QAAQ,CAAC3yD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkB,CAAC,MAAO,CAACA,CAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAT,CA3BE,CA8BhC,IAAI,CAAA,CA9B4B,CA+BhC,IAAI,CAAA,CA/B4B,CAApB,CAAhB,CAiCI21C,GAAS,CAAC,EAAI,IAAL,CAAW,EAAI,IAAf,CAAqB,EAAI,IAAzB,CAA+B,EAAI,IAAnC,CAAyC,EAAI,IAA7C,CAAmD,IAAI,GAAvD,CAA4D,IAAI,GAAhE,CAjCb,CA0CIvjB,GAAQA,QAAQ,CAACnrB,CAAD,CAAU,CAC5B,IAAAA,QAAA,CAAeA,CADa,CAI9BmrB,GAAAjyB,UAAA,CAAkB,CAChBrW,YAAasoC,EADG,CAGhBwjB,IAAKA,QAAQ,CAACv/B,CAAD,CAAO,CAClB,IAAAA,KAAA,CAAYA,CACZ,KAAAv1B,MAAA,CAAa,CAGb,KAFA,IAAA+0D,OAEA;AAFc,EAEd,CAAO,IAAA/0D,MAAP,CAAoB,IAAAu1B,KAAAv5B,OAApB,CAAA,CAEE,GADIylC,CACA,CADK,IAAAlM,KAAAl0B,OAAA,CAAiB,IAAArB,MAAjB,CACL,CAAO,GAAP,GAAAyhC,CAAA,EAAqB,GAArB,GAAcA,CAAlB,CACE,IAAAuzB,WAAA,CAAgBvzB,CAAhB,CADF,KAEO,IAAI,IAAA/iC,SAAA,CAAc+iC,CAAd,CAAJ,EAAgC,GAAhC,GAAyBA,CAAzB,EAAuC,IAAA/iC,SAAA,CAAc,IAAAu2D,KAAA,EAAd,CAAvC,CACL,IAAAC,WAAA,EADK,KAEA,IAAI,IAAAC,QAAA,CAAa1zB,CAAb,CAAJ,CACL,IAAA2zB,UAAA,EADK,KAEA,IAAI,IAAAC,GAAA,CAAQ5zB,CAAR,CAAY,aAAZ,CAAJ,CACL,IAAAszB,OAAAt0D,KAAA,CAAiB,CAACT,MAAO,IAAAA,MAAR,CAAoBu1B,KAAMkM,CAA1B,CAAjB,CACA,CAAA,IAAAzhC,MAAA,EAFK,KAGA,IAAI,IAAAs1D,aAAA,CAAkB7zB,CAAlB,CAAJ,CACL,IAAAzhC,MAAA,EADK,KAEA,CACL,IAAIu1D,EAAM9zB,CAAN8zB,CAAW,IAAAN,KAAA,EAAf,CACIO,EAAMD,CAANC,CAAY,IAAAP,KAAA,CAAU,CAAV,CADhB,CAGIQ,EAAM7B,EAAA,CAAU2B,CAAV,CAHV,CAIIG,EAAM9B,EAAA,CAAU4B,CAAV,CAFA5B,GAAA+B,CAAUl0B,CAAVk0B,CAGV,EAAWF,CAAX,EAAkBC,CAAlB,EACMj8B,CAEJ,CAFYi8B,CAAA,CAAMF,CAAN,CAAaC,CAAA,CAAMF,CAAN,CAAY9zB,CAErC,CADA,IAAAszB,OAAAt0D,KAAA,CAAiB,CAACT,MAAO,IAAAA,MAAR,CAAoBu1B,KAAMkE,CAA1B,CAAiCm8B,SAAU,CAAA,CAA3C,CAAjB,CACA,CAAA,IAAA51D,MAAA;AAAcy5B,CAAAz9B,OAHhB,EAKE,IAAA65D,WAAA,CAAgB,4BAAhB,CAA8C,IAAA71D,MAA9C,CAA0D,IAAAA,MAA1D,CAAuE,CAAvE,CAXG,CAeT,MAAO,KAAA+0D,OAjCW,CAHJ,CAuChBM,GAAIA,QAAQ,CAAC5zB,CAAD,CAAKq0B,CAAL,CAAY,CACtB,MAA8B,EAA9B,GAAOA,CAAA71D,QAAA,CAAcwhC,CAAd,CADe,CAvCR,CA2ChBwzB,KAAMA,QAAQ,CAACh4D,CAAD,CAAI,CACZ2oC,CAAAA,CAAM3oC,CAAN2oC,EAAW,CACf,OAAQ,KAAA5lC,MAAD,CAAc4lC,CAAd,CAAoB,IAAArQ,KAAAv5B,OAApB,CAAwC,IAAAu5B,KAAAl0B,OAAA,CAAiB,IAAArB,MAAjB,CAA8B4lC,CAA9B,CAAxC,CAA6E,CAAA,CAFpE,CA3CF,CAgDhBlnC,SAAUA,QAAQ,CAAC+iC,CAAD,CAAK,CACrB,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EAAiD,QAAjD,GAAmC,MAAOA,EADrB,CAhDP,CAoDhB6zB,aAAcA,QAAQ,CAAC7zB,CAAD,CAAK,CAEzB,MAAe,GAAf,GAAQA,CAAR,EAA6B,IAA7B,GAAsBA,CAAtB,EAA4C,IAA5C,GAAqCA,CAArC,EACe,IADf,GACQA,CADR,EAC8B,IAD9B,GACuBA,CADvB,EAC6C,QAD7C,GACsCA,CAHb,CApDX,CA0DhB0zB,QAASA,QAAQ,CAAC1zB,CAAD,CAAK,CACpB,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EACQ,GADR,EACeA,CADf,EAC2B,GAD3B,EACqBA,CADrB,EAEQ,GAFR,GAEgBA,CAFhB,EAE6B,GAF7B,GAEsBA,CAHF,CA1DN,CAgEhBs0B,cAAeA,QAAQ,CAACt0B,CAAD,CAAK,CAC1B,MAAe,GAAf;AAAQA,CAAR,EAA6B,GAA7B,GAAsBA,CAAtB,EAAoC,IAAA/iC,SAAA,CAAc+iC,CAAd,CADV,CAhEZ,CAoEhBo0B,WAAYA,QAAQ,CAAC5zC,CAAD,CAAQ+zC,CAAR,CAAeC,CAAf,CAAoB,CACtCA,CAAA,CAAMA,CAAN,EAAa,IAAAj2D,MACTk2D,EAAAA,CAAU13D,CAAA,CAAUw3D,CAAV,CAAA,CACJ,IADI,CACGA,CADH,CACY,GADZ,CACkB,IAAAh2D,MADlB,CAC+B,IAD/B,CACsC,IAAAu1B,KAAA9P,UAAA,CAAoBuwC,CAApB,CAA2BC,CAA3B,CADtC,CACwE,GADxE,CAEJ,GAFI,CAEEA,CAChB,MAAM9pB,GAAA,CAAa,QAAb,CACFlqB,CADE,CACKi0C,CADL,CACa,IAAA3gC,KADb,CAAN,CALsC,CApExB,CA6EhB2/B,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAIrU,EAAS,EAAb,CACImV,EAAQ,IAAAh2D,MACZ,CAAO,IAAAA,MAAP,CAAoB,IAAAu1B,KAAAv5B,OAApB,CAAA,CAAsC,CACpC,IAAIylC,EAAK5hC,CAAA,CAAU,IAAA01B,KAAAl0B,OAAA,CAAiB,IAAArB,MAAjB,CAAV,CACT,IAAU,GAAV,EAAIyhC,CAAJ,EAAiB,IAAA/iC,SAAA,CAAc+iC,CAAd,CAAjB,CACEof,CAAA,EAAUpf,CADZ,KAEO,CACL,IAAI00B,EAAS,IAAAlB,KAAA,EACb,IAAU,GAAV,EAAIxzB,CAAJ,EAAiB,IAAAs0B,cAAA,CAAmBI,CAAnB,CAAjB,CACEtV,CAAA,EAAUpf,CADZ,KAEO,IAAI,IAAAs0B,cAAA,CAAmBt0B,CAAnB,CAAJ,EACH00B,CADG,EACO,IAAAz3D,SAAA,CAAcy3D,CAAd,CADP,EAEiC,GAFjC,EAEHtV,CAAAx/C,OAAA,CAAcw/C,CAAA7kD,OAAd,CAA8B,CAA9B,CAFG,CAGL6kD,CAAA,EAAUpf,CAHL,KAIA,IAAI,CAAA,IAAAs0B,cAAA,CAAmBt0B,CAAnB,CAAJ;AACD00B,CADC,EACU,IAAAz3D,SAAA,CAAcy3D,CAAd,CADV,EAEiC,GAFjC,EAEHtV,CAAAx/C,OAAA,CAAcw/C,CAAA7kD,OAAd,CAA8B,CAA9B,CAFG,CAKL,KALK,KAGL,KAAA65D,WAAA,CAAgB,kBAAhB,CAXG,CAgBP,IAAA71D,MAAA,EApBoC,CAsBtC,IAAA+0D,OAAAt0D,KAAA,CAAiB,CACfT,MAAOg2D,CADQ,CAEfzgC,KAAMsrB,CAFS,CAGf51C,SAAU,CAAA,CAHK,CAIf7N,MAAO8pB,MAAA,CAAO25B,CAAP,CAJQ,CAAjB,CAzBqB,CA7EP,CA8GhBuU,UAAWA,QAAQ,EAAG,CAEpB,IADA,IAAIY,EAAQ,IAAAh2D,MACZ,CAAO,IAAAA,MAAP,CAAoB,IAAAu1B,KAAAv5B,OAApB,CAAA,CAAsC,CACpC,IAAIylC,EAAK,IAAAlM,KAAAl0B,OAAA,CAAiB,IAAArB,MAAjB,CACT,IAAM,CAAA,IAAAm1D,QAAA,CAAa1zB,CAAb,CAAN,EAA0B,CAAA,IAAA/iC,SAAA,CAAc+iC,CAAd,CAA1B,CACE,KAEF,KAAAzhC,MAAA,EALoC,CAOtC,IAAA+0D,OAAAt0D,KAAA,CAAiB,CACfT,MAAOg2D,CADQ,CAEfzgC,KAAM,IAAAA,KAAAxzB,MAAA,CAAgBi0D,CAAhB,CAAuB,IAAAh2D,MAAvB,CAFS,CAGf2wB,WAAY,CAAA,CAHG,CAAjB,CAToB,CA9GN,CA8HhBqkC,WAAYA,QAAQ,CAACoB,CAAD,CAAQ,CAC1B,IAAIJ,EAAQ,IAAAh2D,MACZ,KAAAA,MAAA,EAIA,KAHA,IAAIgjD,EAAS,EAAb,CACIqT,EAAYD,CADhB,CAEI50B,EAAS,CAAA,CACb,CAAO,IAAAxhC,MAAP,CAAoB,IAAAu1B,KAAAv5B,OAApB,CAAA,CAAsC,CACpC,IAAIylC;AAAK,IAAAlM,KAAAl0B,OAAA,CAAiB,IAAArB,MAAjB,CAAT,CACAq2D,EAAAA,CAAAA,CAAa50B,CACb,IAAID,CAAJ,CACa,GAAX,GAAIC,CAAJ,EACM60B,CAIJ,CAJU,IAAA/gC,KAAA9P,UAAA,CAAoB,IAAAzlB,MAApB,CAAiC,CAAjC,CAAoC,IAAAA,MAApC,CAAiD,CAAjD,CAIV,CAHKs2D,CAAAx1D,MAAA,CAAU,aAAV,CAGL,EAFE,IAAA+0D,WAAA,CAAgB,6BAAhB,CAAgDS,CAAhD,CAAsD,GAAtD,CAEF,CADA,IAAAt2D,MACA,EADc,CACd,CAAAgjD,CAAA,EAAUuT,MAAAC,aAAA,CAAoBt4D,QAAA,CAASo4D,CAAT,CAAc,EAAd,CAApB,CALZ,EAQEtT,CARF,EAOY6R,EAAA4B,CAAOh1B,CAAPg1B,CAPZ,EAQ4Bh1B,CAE5B,CAAAD,CAAA,CAAS,CAAA,CAXX,KAYO,IAAW,IAAX,GAAIC,CAAJ,CACLD,CAAA,CAAS,CAAA,CADJ,KAEA,CAAA,GAAIC,CAAJ,GAAW20B,CAAX,CAAkB,CACvB,IAAAp2D,MAAA,EACA,KAAA+0D,OAAAt0D,KAAA,CAAiB,CACfT,MAAOg2D,CADQ,CAEfzgC,KAAM8gC,CAFS,CAGfprD,SAAU,CAAA,CAHK,CAIf7N,MAAO4lD,CAJQ,CAAjB,CAMA,OARuB,CAUvBA,CAAA,EAAUvhB,CAVL,CAYP,IAAAzhC,MAAA,EA7BoC,CA+BtC,IAAA61D,WAAA,CAAgB,oBAAhB,CAAsCG,CAAtC,CArC0B,CA9HZ,CA+KlB,KAAIxkB,GAASA,QAAQ,CAACH,CAAD,CAAQ/+B,CAAR,CAAiB6T,CAAjB,CAA0B,CAC7C,IAAAkrB,MAAA,CAAaA,CACb,KAAA/+B,QAAA,CAAeA,CACf,KAAA6T,QAAA,CAAeA,CAH8B,CAM/CqrB,GAAAklB,KAAA,CAAch5D,CAAA,CAAO,QAAQ,EAAG,CAC9B,MAAO,EADuB,CAAlB;AAEX,CACD+wC,aAAc,CAAA,CADb,CAEDxjC,SAAU,CAAA,CAFT,CAFW,CAOdumC,GAAAnyB,UAAA,CAAmB,CACjBrW,YAAawoC,EADI,CAGjB1uC,MAAOA,QAAQ,CAACyyB,CAAD,CAAO,CACpB,IAAAA,KAAA,CAAYA,CACZ,KAAAw/B,OAAA,CAAc,IAAA1jB,MAAAyjB,IAAA,CAAev/B,CAAf,CAEVn4B,EAAAA,CAAQ,IAAAu5D,WAAA,EAEe,EAA3B,GAAI,IAAA5B,OAAA/4D,OAAJ,EACE,IAAA65D,WAAA,CAAgB,wBAAhB,CAA0C,IAAAd,OAAA,CAAY,CAAZ,CAA1C,CAGF33D,EAAAg0B,QAAA,CAAgB,CAAEA,CAAAh0B,CAAAg0B,QAClBh0B,EAAA6N,SAAA,CAAiB,CAAEA,CAAA7N,CAAA6N,SAEnB,OAAO7N,EAba,CAHL,CAmBjBw5D,QAASA,QAAQ,EAAG,CAClB,IAAIA,CACA,KAAAC,OAAA,CAAY,GAAZ,CAAJ,EACED,CACA,CADU,IAAAE,YAAA,EACV,CAAA,IAAAC,QAAA,CAAa,GAAb,CAFF,EAGW,IAAAF,OAAA,CAAY,GAAZ,CAAJ,CACLD,CADK,CACK,IAAAI,iBAAA,EADL,CAEI,IAAAH,OAAA,CAAY,GAAZ,CAAJ,CACLD,CADK,CACK,IAAAxS,OAAA,EADL,CAEI,IAAA6Q,KAAA,EAAAtkC,WAAJ,CACLimC,CADK,CACK,IAAAjmC,WAAA,EADL,CAEI,IAAAskC,KAAA,EAAAhqD,SAAJ,CACL2rD,CADK;AACK,IAAA3rD,SAAA,EADL,CAGL,IAAA4qD,WAAA,CAAgB,0BAAhB,CAA4C,IAAAZ,KAAA,EAA5C,CAIF,KAlBkB,IAiBdvc,CAjBc,CAiBRn8C,CACV,CAAQm8C,CAAR,CAAe,IAAAme,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,GAAtB,CAAf,CAAA,CACoB,GAAlB,GAAIne,CAAAnjB,KAAJ,EACEqhC,CACA,CADU,IAAAK,aAAA,CAAkBL,CAAlB,CAA2Br6D,CAA3B,CACV,CAAAA,CAAA,CAAU,IAFZ,EAGyB,GAAlB,GAAIm8C,CAAAnjB,KAAJ,EACLh5B,CACA,CADUq6D,CACV,CAAAA,CAAA,CAAU,IAAAM,YAAA,CAAiBN,CAAjB,CAFL,EAGkB,GAAlB,GAAIle,CAAAnjB,KAAJ,EACLh5B,CACA,CADUq6D,CACV,CAAAA,CAAA,CAAU,IAAAO,YAAA,CAAiBP,CAAjB,CAFL,EAIL,IAAAf,WAAA,CAAgB,YAAhB,CAGJ,OAAOe,EAhCW,CAnBH,CAsDjBf,WAAYA,QAAQ,CAACpd,CAAD,CAAMhf,CAAN,CAAa,CAC/B,KAAM0S,GAAA,CAAa,QAAb,CAEA1S,CAAAlE,KAFA,CAEYkjB,CAFZ,CAEkBhf,CAAAz5B,MAFlB,CAEgC,CAFhC,CAEoC,IAAAu1B,KAFpC,CAE+C,IAAAA,KAAA9P,UAAA,CAAoBgU,CAAAz5B,MAApB,CAF/C,CAAN,CAD+B,CAtDhB,CA4DjBo3D,UAAWA,QAAQ,EAAG,CACpB,GAA2B,CAA3B,GAAI,IAAArC,OAAA/4D,OAAJ,CACE,KAAMmwC,GAAA,CAAa,MAAb,CAA0D,IAAA5W,KAA1D,CAAN,CACF,MAAO,KAAAw/B,OAAA,CAAY,CAAZ,CAHa,CA5DL,CAkEjBE,KAAMA,QAAQ,CAACoC,CAAD,CAAKC,CAAL,CAASC,CAAT;AAAaC,CAAb,CAAiB,CAC7B,MAAO,KAAAC,UAAA,CAAe,CAAf,CAAkBJ,CAAlB,CAAsBC,CAAtB,CAA0BC,CAA1B,CAA8BC,CAA9B,CADsB,CAlEd,CAqEjBC,UAAWA,QAAQ,CAACx6D,CAAD,CAAIo6D,CAAJ,CAAQC,CAAR,CAAYC,CAAZ,CAAgBC,CAAhB,CAAoB,CACrC,GAAI,IAAAzC,OAAA/4D,OAAJ,CAAyBiB,CAAzB,CAA4B,CACtBw8B,CAAAA,CAAQ,IAAAs7B,OAAA,CAAY93D,CAAZ,CACZ,KAAIy6D,EAAIj+B,CAAAlE,KACR,IAAImiC,CAAJ,GAAUL,CAAV,EAAgBK,CAAhB,GAAsBJ,CAAtB,EAA4BI,CAA5B,GAAkCH,CAAlC,EAAwCG,CAAxC,GAA8CF,CAA9C,EACK,EAACH,CAAD,EAAQC,CAAR,EAAeC,CAAf,EAAsBC,CAAtB,CADL,CAEE,MAAO/9B,EALiB,CAQ5B,MAAO,CAAA,CAT8B,CArEtB,CAiFjBo9B,OAAQA,QAAQ,CAACQ,CAAD,CAAKC,CAAL,CAASC,CAAT,CAAaC,CAAb,CAAiB,CAE/B,MAAA,CADI/9B,CACJ,CADY,IAAAw7B,KAAA,CAAUoC,CAAV,CAAcC,CAAd,CAAkBC,CAAlB,CAAsBC,CAAtB,CACZ,GACE,IAAAzC,OAAA91C,MAAA,EACOwa,CAAAA,CAFT,EAIO,CAAA,CANwB,CAjFhB,CA0FjBs9B,QAASA,QAAQ,CAACM,CAAD,CAAK,CACpB,GAA2B,CAA3B,GAAI,IAAAtC,OAAA/4D,OAAJ,CACE,KAAMmwC,GAAA,CAAa,MAAb,CAA0D,IAAA5W,KAA1D,CAAN,CAGF,IAAIkE,EAAQ,IAAAo9B,OAAA,CAAYQ,CAAZ,CACP59B,EAAL,EACE,IAAAo8B,WAAA,CAAgB,4BAAhB,CAA+CwB,CAA/C,CAAoD,GAApD,CAAyD,IAAApC,KAAA,EAAzD,CAEF,OAAOx7B,EATa,CA1FL,CAsGjBk+B,QAASA,QAAQ,CAAC7F,CAAD,CAAK8F,CAAL,CAAY,CAC3B,IAAI11D,EAAK0xD,EAAA,CAAU9B,CAAV,CACT,OAAOp0D,EAAA,CAAOm6D,QAAsB,CAAC51D,CAAD,CAAOid,CAAP,CAAe,CACjD,MAAOhd,EAAA,CAAGD,CAAH;AAASid,CAAT,CAAiB04C,CAAjB,CAD0C,CAA5C,CAEJ,CACD3sD,SAAS2sD,CAAA3sD,SADR,CAEDikC,OAAQ,CAAC0oB,CAAD,CAFP,CAFI,CAFoB,CAtGZ,CAgHjBE,SAAUA,QAAQ,CAACC,CAAD,CAAOjG,CAAP,CAAW8F,CAAX,CAAkBI,CAAlB,CAA+B,CAC/C,IAAI91D,EAAK0xD,EAAA,CAAU9B,CAAV,CACT,OAAOp0D,EAAA,CAAOu6D,QAAuB,CAACh2D,CAAD,CAAOid,CAAP,CAAe,CAClD,MAAOhd,EAAA,CAAGD,CAAH,CAASid,CAAT,CAAiB64C,CAAjB,CAAuBH,CAAvB,CAD2C,CAA7C,CAEJ,CACD3sD,SAAU8sD,CAAA9sD,SAAVA,EAA2B2sD,CAAA3sD,SAD1B,CAEDikC,OAAQ,CAAC8oB,CAAT9oB,EAAwB,CAAC6oB,CAAD,CAAOH,CAAP,CAFvB,CAFI,CAFwC,CAhHhC,CA0HjBjnC,WAAYA,QAAQ,EAAG,CAIrB,IAHA,IAAI3J,EAAK,IAAA+vC,QAAA,EAAAxhC,KAGT,CAAO,IAAA0/B,KAAA,CAAU,GAAV,CAAP,EAAyB,IAAAwC,UAAA,CAAe,CAAf,CAAA9mC,WAAzB,EAA0D,CAAA,IAAA8mC,UAAA,CAAe,CAAf,CAAkB,GAAlB,CAA1D,CAAA,CACEzwC,CAAA,EAAM,IAAA+vC,QAAA,EAAAxhC,KAAN,CAA4B,IAAAwhC,QAAA,EAAAxhC,KAG9B,OAAOg+B,GAAA,CAAUvsC,CAAV,CAAP,EAAwB8mB,EAAA,CAAS9mB,CAAT,CAAa,IAAAb,QAAb,CAA2B,IAAAoP,KAA3B,CARH,CA1HN,CAqIjBtqB,SAAUA,QAAQ,EAAG,CACnB,IAAI7N,EAAQ,IAAA25D,QAAA,EAAA35D,MAEZ,OAAOM,EAAA,CAAOw6D,QAAuB,EAAG,CACtC,MAAO96D,EAD+B,CAAjC,CAEJ,CACD6N,SAAU,CAAA,CADT,CAEDmmB,QAAS,CAAA,CAFR,CAFI,CAHY,CArIJ,CAgJjBulC,WAAYA,QAAQ,EAAG,CAErB,IADA,IAAIA;AAAa,EACjB,CAAA,CAAA,CAGE,GAFyB,CAEpB,CAFD,IAAA5B,OAAA/4D,OAEC,EAF0B,CAAA,IAAAi5D,KAAA,CAAU,GAAV,CAAe,GAAf,CAAoB,GAApB,CAAyB,GAAzB,CAE1B,EADH0B,CAAAl2D,KAAA,CAAgB,IAAAq2D,YAAA,EAAhB,CACG,CAAA,CAAA,IAAAD,OAAA,CAAY,GAAZ,CAAL,CAGE,MAA8B,EAAvB,GAACF,CAAA36D,OAAD,CACD26D,CAAA,CAAW,CAAX,CADC,CAEDwB,QAAyB,CAACl2D,CAAD,CAAOid,CAAP,CAAe,CAEtC,IADA,IAAI9hB,CAAJ,CACSH,EAAI,CADb,CACgBW,EAAK+4D,CAAA36D,OAArB,CAAwCiB,CAAxC,CAA4CW,CAA5C,CAAgDX,CAAA,EAAhD,CACEG,CAAA,CAAQu5D,CAAA,CAAW15D,CAAX,CAAA,CAAcgF,CAAd,CAAoBid,CAApB,CAEV,OAAO9hB,EAL+B,CAV7B,CAhJN,CAqKjB05D,YAAaA,QAAQ,EAAG,CAGtB,IAFA,IAAIiB,EAAO,IAAA79B,WAAA,EAEX,CAAgB,IAAA28B,OAAA,CAAY,GAAZ,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAA5sD,OAAA,CAAY4sD,CAAZ,CAET,OAAOA,EANe,CArKP,CA8KjB5sD,OAAQA,QAAQ,CAACitD,CAAD,CAAU,CACxB,IAAIl2D,EAAK,IAAAoQ,QAAA,CAAa,IAAAykD,QAAA,EAAAxhC,KAAb,CAAT,CACI8iC,CADJ,CAEI37C,CAEJ,IAAI,IAAAu4C,KAAA,CAAU,GAAV,CAAJ,CAGE,IAFAoD,CACA,CADS,EACT,CAAA37C,CAAA,CAAO,EACP,CAAO,IAAAm6C,OAAA,CAAY,GAAZ,CAAP,CAAA,CACEwB,CAAA53D,KAAA,CAAY,IAAAy5B,WAAA,EAAZ,CAIJ,KAAIgV,EAAS,CAACkpB,CAAD,CAAAx2D,OAAA,CAAiBy2D,CAAjB,EAA2B,EAA3B,CAEb,OAAO36D,EAAA,CAAO46D,QAAqB,CAACr2D,CAAD,CAAOid,CAAP,CAAe,CAChD,IAAI9S,EAAQgsD,CAAA,CAAQn2D,CAAR,CAAcid,CAAd,CACZ,IAAIxC,CAAJ,CAAU,CACRA,CAAA,CAAK,CAAL,CAAA;AAAUtQ,CAGV,KADInP,CACJ,CADQo7D,CAAAr8D,OACR,CAAOiB,CAAA,EAAP,CAAA,CACEyf,CAAA,CAAKzf,CAAL,CAAS,CAAT,CAAA,CAAco7D,CAAA,CAAOp7D,CAAP,CAAA,CAAUgF,CAAV,CAAgBid,CAAhB,CAGhB,OAAOhd,EAAAG,MAAA,CAAS1G,CAAT,CAAoB+gB,CAApB,CARC,CAWV,MAAOxa,EAAA,CAAGkK,CAAH,CAbyC,CAA3C,CAcJ,CACDnB,SAAU,CAAC/I,CAAAuvB,UAAXxmB,EAA2BikC,CAAAqpB,MAAA,CAAajsB,EAAb,CAD1B,CAED4C,OAAQ,CAAChtC,CAAAuvB,UAATyd,EAAyBA,CAFxB,CAdI,CAfiB,CA9KT,CAiNjBhV,WAAYA,QAAQ,EAAG,CACrB,MAAO,KAAAs+B,WAAA,EADc,CAjNN,CAqNjBA,WAAYA,QAAQ,EAAG,CACrB,IAAIT,EAAO,IAAAU,QAAA,EAAX,CACIb,CADJ,CAEIn+B,CACJ,OAAA,CAAKA,CAAL,CAAa,IAAAo9B,OAAA,CAAY,GAAZ,CAAb,GACOkB,CAAAzmC,OAKE,EAJL,IAAAukC,WAAA,CAAgB,0BAAhB,CACI,IAAAtgC,KAAA9P,UAAA,CAAoB,CAApB,CAAuBgU,CAAAz5B,MAAvB,CADJ,CAC0C,0BAD1C,CACsEy5B,CADtE,CAIK,CADPm+B,CACO,CADC,IAAAa,QAAA,EACD,CAAA/6D,CAAA,CAAOg7D,QAAyB,CAACzyD,CAAD,CAAQiZ,CAAR,CAAgB,CACrD,MAAO64C,EAAAzmC,OAAA,CAAYrrB,CAAZ,CAAmB2xD,CAAA,CAAM3xD,CAAN,CAAaiZ,CAAb,CAAnB,CAAyCA,CAAzC,CAD8C,CAAhD,CAEJ,CACDgwB,OAAQ,CAAC6oB,CAAD,CAAOH,CAAP,CADP,CAFI,CANT,EAYOG,CAhBc,CArNN,CAwOjBU,QAASA,QAAQ,EAAG,CAClB,IAAIV,EAAO,IAAAY,UAAA,EAAX,CACIC,CAEJ,IAAa,IAAA/B,OAAA,CAAY,GAAZ,CAAb;CACE+B,CACI,CADK,IAAAJ,WAAA,EACL,CAAA,IAAAzB,QAAA,CAAa,GAAb,CAFN,EAEyB,CACrB,IAAIa,EAAQ,IAAAY,WAAA,EAEZ,OAAO96D,EAAA,CAAOm7D,QAAsB,CAAC52D,CAAD,CAAOid,CAAP,CAAe,CACjD,MAAO64C,EAAA,CAAK91D,CAAL,CAAWid,CAAX,CAAA,CAAqB05C,CAAA,CAAO32D,CAAP,CAAaid,CAAb,CAArB,CAA4C04C,CAAA,CAAM31D,CAAN,CAAYid,CAAZ,CADF,CAA5C,CAEJ,CACDjU,SAAU8sD,CAAA9sD,SAAVA,EAA2B2tD,CAAA3tD,SAA3BA,EAA8C2sD,CAAA3sD,SAD7C,CAFI,CAHc,CAWzB,MAAO8sD,EAjBW,CAxOH,CA4PjBY,UAAWA,QAAQ,EAAG,CAGpB,IAFA,IAAIZ,EAAO,IAAAe,WAAA,EAAX,CACIr/B,CACJ,CAAQA,CAAR,CAAgB,IAAAo9B,OAAA,CAAY,IAAZ,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBt+B,CAAAlE,KAApB,CAAgC,IAAAujC,WAAA,EAAhC,CAAmD,CAAA,CAAnD,CAET,OAAOf,EANa,CA5PL,CAqQjBe,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAIf,EAAO,IAAAgB,SAAA,EAAX,CACIt/B,CACJ,CAAQA,CAAR,CAAgB,IAAAo9B,OAAA,CAAY,IAAZ,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBt+B,CAAAlE,KAApB,CAAgC,IAAAwjC,SAAA,EAAhC,CAAiD,CAAA,CAAjD,CAET,OAAOhB,EANc,CArQN,CA8QjBgB,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAIhB,EAAO,IAAAiB,WAAA,EAAX,CACIv/B,CACJ,CAAQA,CAAR,CAAgB,IAAAo9B,OAAA,CAAY,IAAZ,CAAiB,IAAjB;AAAsB,KAAtB,CAA4B,KAA5B,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBt+B,CAAAlE,KAApB,CAAgC,IAAAyjC,WAAA,EAAhC,CAET,OAAOjB,EANY,CA9QJ,CAuRjBiB,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAIjB,EAAO,IAAAkB,SAAA,EAAX,CACIx/B,CACJ,CAAQA,CAAR,CAAgB,IAAAo9B,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,IAAtB,CAA4B,IAA5B,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBt+B,CAAAlE,KAApB,CAAgC,IAAA0jC,SAAA,EAAhC,CAET,OAAOlB,EANc,CAvRN,CAgSjBkB,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAIlB,EAAO,IAAAmB,eAAA,EAAX,CACIz/B,CACJ,CAAQA,CAAR,CAAgB,IAAAo9B,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBt+B,CAAAlE,KAApB,CAAgC,IAAA2jC,eAAA,EAAhC,CAET,OAAOnB,EANY,CAhSJ,CAySjBmB,eAAgBA,QAAQ,EAAG,CAGzB,IAFA,IAAInB,EAAO,IAAAoB,MAAA,EAAX,CACI1/B,CACJ,CAAQA,CAAR,CAAgB,IAAAo9B,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAoB,GAApB,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBt+B,CAAAlE,KAApB,CAAgC,IAAA4jC,MAAA,EAAhC,CAET,OAAOpB,EANkB,CAzSV,CAkTjBoB,MAAOA,QAAQ,EAAG,CAChB,IAAI1/B,CACJ,OAAI,KAAAo9B,OAAA,CAAY,GAAZ,CAAJ;AACS,IAAAD,QAAA,EADT,CAEO,CAAKn9B,CAAL,CAAa,IAAAo9B,OAAA,CAAY,GAAZ,CAAb,EACE,IAAAiB,SAAA,CAActmB,EAAAklB,KAAd,CAA2Bj9B,CAAAlE,KAA3B,CAAuC,IAAA4jC,MAAA,EAAvC,CADF,CAEA,CAAK1/B,CAAL,CAAa,IAAAo9B,OAAA,CAAY,GAAZ,CAAb,EACE,IAAAc,QAAA,CAAal+B,CAAAlE,KAAb,CAAyB,IAAA4jC,MAAA,EAAzB,CADF,CAGE,IAAAvC,QAAA,EATO,CAlTD,CA+TjBO,YAAaA,QAAQ,CAAC/S,CAAD,CAAS,CAC5B,IAAIlqB,EAAa,IAAA3E,KAAjB,CACI6jC,EAAQ,IAAArC,QAAA,EAAAxhC,KADZ,CAEIrsB,EAAS4kC,EAAA,CAASsrB,CAAT,CAAgB,IAAAjzC,QAAhB,CAA8B+T,CAA9B,CAEb,OAAOx8B,EAAA,CAAO27D,QAA0B,CAACpzD,CAAD,CAAQiZ,CAAR,CAAgBjd,CAAhB,CAAsB,CAC5D,MAAOiH,EAAA,CAAOjH,CAAP,EAAemiD,CAAA,CAAOn+C,CAAP,CAAciZ,CAAd,CAAf,CADqD,CAAvD,CAEJ,CACDoS,OAAQA,QAAQ,CAACrrB,CAAD,CAAQ7I,CAAR,CAAe8hB,CAAf,CAAuB,CAErC,CADIkuB,CACJ,CADQgX,CAAA,CAAOn+C,CAAP,CAAciZ,CAAd,CACR,GAAQklC,CAAA9yB,OAAA,CAAcrrB,CAAd,CAAqBmnC,CAArB,CAAyB,EAAzB,CACR,OAAOb,GAAA,CAAOa,CAAP,CAAUgsB,CAAV,CAAiBh8D,CAAjB,CAAwB88B,CAAxB,CAH8B,CADtC,CAFI,CALqB,CA/Tb,CA+UjBg9B,YAAaA,QAAQ,CAACp7D,CAAD,CAAM,CACzB,IAAIo+B,EAAa,IAAA3E,KAAjB,CAEI+jC,EAAU,IAAAp/B,WAAA,EACd,KAAA68B,QAAA,CAAa,GAAb,CAEA,OAAOr5D,EAAA,CAAO67D,QAA0B,CAACt3D,CAAD,CAAOid,CAAP,CAAe,CAAA,IACjDkuB,EAAItxC,CAAA,CAAImG,CAAJ,CAAUid,CAAV,CAD6C,CAEjDjiB,EAAIq8D,CAAA,CAAQr3D,CAAR,CAAcid,CAAd,CAGR+sB,GAAA,CAAqBhvC,CAArB,CAAwBi9B,CAAxB,CACA,OAAKkT,EAAL,CACIhB,EAAA9M,CAAiB8N,CAAA,CAAEnwC,CAAF,CAAjBqiC;AAAuBpF,CAAvBoF,CADJ,CAAe3jC,CANsC,CAAhD,CASJ,CACD21B,OAAQA,QAAQ,CAACrvB,CAAD,CAAO7E,CAAP,CAAc8hB,CAAd,CAAsB,CACpC,IAAI1iB,EAAMyvC,EAAA,CAAqBqtB,CAAA,CAAQr3D,CAAR,CAAcid,CAAd,CAArB,CAA4Cgb,CAA5C,CAGV,EADIkT,CACJ,CADQhB,EAAA,CAAiBtwC,CAAA,CAAImG,CAAJ,CAAUid,CAAV,CAAjB,CAAoCgb,CAApC,CACR,GAAQp+B,CAAAw1B,OAAA,CAAWrvB,CAAX,CAAiBmrC,CAAjB,CAAqB,EAArB,CACR,OAAOA,EAAA,CAAE5wC,CAAF,CAAP,CAAgBY,CALoB,CADrC,CATI,CANkB,CA/UV,CAyWjB65D,aAAcA,QAAQ,CAACuC,CAAD,CAAWC,CAAX,CAA0B,CAC9C,IAAIpB,EAAS,EACb,IAA8B,GAA9B,GAAI,IAAAjB,UAAA,EAAA7hC,KAAJ,EACE,EACE8iC,EAAA53D,KAAA,CAAY,IAAAy5B,WAAA,EAAZ,CADF,OAES,IAAA28B,OAAA,CAAY,GAAZ,CAFT,CADF,CAKA,IAAAE,QAAA,CAAa,GAAb,CAEA,KAAI2C,EAAiB,IAAAnkC,KAArB,CAEI7Y,EAAO27C,CAAAr8D,OAAA,CAAgB,EAAhB,CAAqB,IAEhC,OAAO29D,SAA2B,CAAC1zD,CAAD,CAAQiZ,CAAR,CAAgB,CAChD,IAAI3iB,EAAUk9D,CAAA,CAAgBA,CAAA,CAAcxzD,CAAd,CAAqBiZ,CAArB,CAAhB,CAA+C1gB,CAAA,CAAUi7D,CAAV,CAAA,CAA2B99D,CAA3B,CAAuCsK,CAApG,CACI/D,EAAKs3D,CAAA,CAASvzD,CAAT,CAAgBiZ,CAAhB,CAAwB3iB,CAAxB,CAAL2F,EAAyC/D,CAE7C,IAAIue,CAAJ,CAEE,IADA,IAAIzf,EAAIo7D,CAAAr8D,OACR,CAAOiB,CAAA,EAAP,CAAA,CACEyf,CAAA,CAAKzf,CAAL,CAAA,CAAUmvC,EAAA,CAAiBisB,CAAA,CAAOp7D,CAAP,CAAA,CAAUgJ,CAAV,CAAiBiZ,CAAjB,CAAjB,CAA2Cw6C,CAA3C,CAIdttB,GAAA,CAAiB7vC,CAAjB,CAA0Bm9D,CAA1B,CA1oBJ,IA2oBuBx3D,CA3oBvB,CAAS,CACP,GA0oBqBA,CA1oBjB8G,YAAJ,GA0oBqB9G,CA1oBrB,CACE,KAAMiqC,GAAA,CAAa,QAAb,CAyoBiButB,CAzoBjB,CAAN,CAGK,GAsoBcx3D,CAtoBd,GAAYkxD,EAAZ,EAsoBclxD,CAtoBd,GAA4BmxD,EAA5B,EAsoBcnxD,CAtoBd,GAA6CoxD,EAA7C,CACL,KAAMnnB,GAAA,CAAa,QAAb,CAqoBiButB,CAroBjB,CAAN,CANK,CA8oBDp6B,CAAAA,CAAIp9B,CAAAG,MAAA,CACAH,CAAAG,MAAA,CAAS9F,CAAT;AAAkBmgB,CAAlB,CADA,CAEAxa,CAAA,CAAGwa,CAAA,CAAK,CAAL,CAAH,CAAYA,CAAA,CAAK,CAAL,CAAZ,CAAqBA,CAAA,CAAK,CAAL,CAArB,CAA8BA,CAAA,CAAK,CAAL,CAA9B,CAAuCA,CAAA,CAAK,CAAL,CAAvC,CAER,OAAO0vB,GAAA,CAAiB9M,CAAjB,CAAoBo6B,CAApB,CAnByC,CAbJ,CAzW/B,CA8YjB1C,iBAAkBA,QAAQ,EAAG,CAC3B,IAAI4C,EAAa,EACjB,IAA8B,GAA9B,GAAI,IAAAxC,UAAA,EAAA7hC,KAAJ,EACE,EAAG,CACD,GAAI,IAAA0/B,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEF2E,EAAAn5D,KAAA,CAAgB,IAAAy5B,WAAA,EAAhB,CALC,CAAH,MAMS,IAAA28B,OAAA,CAAY,GAAZ,CANT,CADF,CASA,IAAAE,QAAA,CAAa,GAAb,CAEA,OAAOr5D,EAAA,CAAOm8D,QAA2B,CAAC53D,CAAD,CAAOid,CAAP,CAAe,CAEtD,IADA,IAAInf,EAAQ,EAAZ,CACS9C,EAAI,CADb,CACgBW,EAAKg8D,CAAA59D,OAArB,CAAwCiB,CAAxC,CAA4CW,CAA5C,CAAgDX,CAAA,EAAhD,CACE8C,CAAAU,KAAA,CAAWm5D,CAAA,CAAW38D,CAAX,CAAA,CAAcgF,CAAd,CAAoBid,CAApB,CAAX,CAEF,OAAOnf,EAL+C,CAAjD,CAMJ,CACDqxB,QAAS,CAAA,CADR,CAEDnmB,SAAU2uD,CAAArB,MAAA,CAAiBjsB,EAAjB,CAFT,CAGD4C,OAAQ0qB,CAHP,CANI,CAboB,CA9YZ,CAwajBxV,OAAQA,QAAQ,EAAG,CAAA,IACbtnD,EAAO,EADM,CACFg9D,EAAW,EAC1B,IAA8B,GAA9B,GAAI,IAAA1C,UAAA,EAAA7hC,KAAJ,EACE,EAAG,CACD,GAAI,IAAA0/B,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEF,KAAIx7B,EAAQ,IAAAs9B,QAAA,EACRt9B,EAAAxuB,SAAJ,CACEnO,CAAA2D,KAAA,CAAUg5B,CAAAr8B,MAAV,CADF,CAEWq8B,CAAA9I,WAAJ,CACL7zB,CAAA2D,KAAA,CAAUg5B,CAAAlE,KAAV,CADK;AAGL,IAAAsgC,WAAA,CAAgB,aAAhB,CAA+Bp8B,CAA/B,CAEF,KAAAs9B,QAAA,CAAa,GAAb,CACA+C,EAAAr5D,KAAA,CAAc,IAAAy5B,WAAA,EAAd,CAdC,CAAH,MAeS,IAAA28B,OAAA,CAAY,GAAZ,CAfT,CADF,CAkBA,IAAAE,QAAA,CAAa,GAAb,CAEA,OAAOr5D,EAAA,CAAOq8D,QAA4B,CAAC93D,CAAD,CAAOid,CAAP,CAAe,CAEvD,IADA,IAAIklC,EAAS,EAAb,CACSnnD,EAAI,CADb,CACgBW,EAAKk8D,CAAA99D,OAArB,CAAsCiB,CAAtC,CAA0CW,CAA1C,CAA8CX,CAAA,EAA9C,CACEmnD,CAAA,CAAOtnD,CAAA,CAAKG,CAAL,CAAP,CAAA,CAAkB68D,CAAA,CAAS78D,CAAT,CAAA,CAAYgF,CAAZ,CAAkBid,CAAlB,CAEpB,OAAOklC,EALgD,CAAlD,CAMJ,CACDhzB,QAAS,CAAA,CADR,CAEDnmB,SAAU6uD,CAAAvB,MAAA,CAAejsB,EAAf,CAFT,CAGD4C,OAAQ4qB,CAHP,CANI,CAtBU,CAxaF,CAoenB,KAAI7rB,GAAuBrkC,EAAA,EAA3B,CACIokC,GAAyBpkC,EAAA,EAD7B,CA8HIglC,GAAgB7xC,MAAAsiB,UAAA4iB,QA9HpB,CA+3EI8X,GAAan+C,CAAA,CAAO,MAAP,CA/3EjB,CAi4EIw+C,GAAe,CACjB/jB,KAAM,MADW,CAEjBglB,IAAK,KAFY,CAGjBC,IAAK,KAHY,CAMjBhlB,aAAc,aANG,CAOjBilB,GAAI,IAPa,CAj4EnB,CA8+GIpzB,GAAiBvsB,CAAA,CAAO,UAAP,CA9+GrB,CAwvHIgjD,EAAiBljD,CAAAsa,cAAA,CAAuB,GAAvB,CAxvHrB,CAyvHI8oC,GAAY9d,EAAA,CAAWvlC,CAAAoL,SAAAod,KAAX,CAwOhB1R,GAAAwK,QAAA,CAA0B,CAAC,UAAD,CAsU1BkiC,GAAAliC,QAAA,CAAyB,CAAC,SAAD,CAuEzBwiC,GAAAxiC,QAAA;AAAuB,CAAC,SAAD,CAavB,KAAIknB,GAAc,GAAlB,CA4JIkgB,GAAe,CACjB+E,KAAMjH,CAAA,CAAW,UAAX,CAAuB,CAAvB,CADW,CAEf+X,GAAI/X,CAAA,CAAW,UAAX,CAAuB,CAAvB,CAA0B,CAA1B,CAA6B,CAAA,CAA7B,CAFW,CAGdgY,EAAGhY,CAAA,CAAW,UAAX,CAAuB,CAAvB,CAHW,CAIjBiY,KAAM/X,EAAA,CAAc,OAAd,CAJW,CAKhBgY,IAAKhY,EAAA,CAAc,OAAd,CAAuB,CAAA,CAAvB,CALW,CAMfgH,GAAIlH,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CANW,CAOdmY,EAAGnY,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CAPW,CAQfmH,GAAInH,CAAA,CAAW,MAAX,CAAmB,CAAnB,CARW,CASdzmB,EAAGymB,CAAA,CAAW,MAAX,CAAmB,CAAnB,CATW,CAUfoH,GAAIpH,CAAA,CAAW,OAAX,CAAoB,CAApB,CAVW,CAWdoY,EAAGpY,CAAA,CAAW,OAAX,CAAoB,CAApB,CAXW,CAYfqY,GAAIrY,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAZW,CAadzkD,EAAGykD,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAbW,CAcfsH,GAAItH,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAdW,CAedyB,EAAGzB,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAfW,CAgBfuH,GAAIvH,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAhBW,CAiBdpU,EAAGoU,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAjBW,CAoBhByH,IAAKzH,CAAA,CAAW,cAAX,CAA2B,CAA3B,CApBW,CAqBjBsY,KAAMpY,EAAA,CAAc,KAAd,CArBW,CAsBhBqY,IAAKrY,EAAA,CAAc,KAAd,CAAqB,CAAA,CAArB,CAtBW,CAuBdj2C,EA3BLuuD,QAAmB,CAACvY,CAAD,CAAO1B,CAAP,CAAgB,CACjC,MAAyB,GAAlB,CAAA0B,CAAAoH,SAAA,EAAA,CAAuB9I,CAAArb,MAAA,CAAc,CAAd,CAAvB,CAA0Cqb,CAAArb,MAAA,CAAc,CAAd,CADhB,CAIhB,CAwBdu1B,EAhELC,QAAuB,CAACzY,CAAD,CAAO,CACxB0Y,CAAAA,CAAQ,EAARA,CAAY1Y,CAAAgC,kBAAA,EAMhB,OAHA2W,EAGA,EAL0B,CAATA;AAACD,CAADC,CAAc,GAAdA,CAAoB,EAKrC,GAHc/Y,EAAA,CAAUpuB,IAAA,CAAY,CAAP,CAAAknC,CAAA,CAAW,OAAX,CAAqB,MAA1B,CAAA,CAAkCA,CAAlC,CAAyC,EAAzC,CAAV,CAAwD,CAAxD,CAGd,CAFc9Y,EAAA,CAAUpuB,IAAAwtB,IAAA,CAAS0Z,CAAT,CAAgB,EAAhB,CAAV,CAA+B,CAA/B,CAEd,CAP4B,CAwCX,CAyBfE,GAAIrY,EAAA,CAAW,CAAX,CAzBW,CA0BdsY,EAAGtY,EAAA,CAAW,CAAX,CA1BW,CA5JnB,CAyLIsB,GAAqB,kFAzLzB,CA0LID,GAAgB,UA2FpB5E,GAAAniC,QAAA,CAAqB,CAAC,SAAD,CA6HrB,KAAIuiC,GAAkBhhD,EAAA,CAAQuB,CAAR,CAAtB,CAWI4/C,GAAkBnhD,EAAA,CAAQmN,EAAR,CAwPtB+zC,GAAAziC,QAAA,CAAwB,CAAC,QAAD,CA0GxB,KAAI5Q,GAAsB7N,EAAA,CAAQ,CAChC+qB,SAAU,GADsB,CAEhCnjB,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CAC/B,GAAK2kB,CAAA3kB,CAAA2kB,KAAL,EAAmB+2C,CAAA17D,CAAA07D,UAAnB,EAAsCj2D,CAAAzF,CAAAyF,KAAtC,CACE,MAAO,SAAQ,CAACkB,CAAD,CAAQrG,CAAR,CAAiB,CAE9B,IAAIqkB,EAA+C,4BAAxC,GAAArlB,EAAAjC,KAAA,CAAciD,CAAAP,KAAA,CAAa,MAAb,CAAd,CAAA,CACA,YADA,CACe,MAC1BO,EAAAgI,GAAA,CAAW,OAAX,CAAoB,QAAQ,CAACmT,CAAD,CAAQ,CAE7Bnb,CAAAN,KAAA,CAAa2kB,CAAb,CAAL,EACElJ,CAAA2vB,eAAA,EAHgC,CAApC,CAJ8B,CAFH,CAFD,CAAR,CAA1B,CAsWIp5B;AAA6B,EAIjCjV,EAAA,CAAQoe,EAAR,CAAsB,QAAQ,CAACwgD,CAAD,CAAW1yC,CAAX,CAAqB,CAEjD,GAAgB,UAAhB,EAAI0yC,CAAJ,CAAA,CAEA,IAAIC,EAAa3tC,EAAA,CAAmB,KAAnB,CAA2BhF,CAA3B,CACjBjX,GAAA,CAA2B4pD,CAA3B,CAAA,CAAyC,QAAQ,EAAG,CAClD,MAAO,CACL7xC,SAAU,GADL,CAELF,SAAU,GAFL,CAGL1C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnC2G,CAAAjH,OAAA,CAAaM,CAAA,CAAK47D,CAAL,CAAb,CAA+BC,QAAiC,CAAC/9D,CAAD,CAAQ,CACtEkC,CAAA40B,KAAA,CAAU3L,CAAV,CAAoB,CAAEnrB,CAAAA,CAAtB,CADsE,CAAxE,CADmC,CAHhC,CAD2C,CAHpD,CAFiD,CAAnD,CAmBAf,EAAA,CAAQue,EAAR,CAAsB,QAAQ,CAACwgD,CAAD,CAAW72D,CAAX,CAAmB,CAC/C+M,EAAA,CAA2B/M,CAA3B,CAAA,CAAqC,QAAQ,EAAG,CAC9C,MAAO,CACL4kB,SAAU,GADL,CAEL1C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAGnC,GAAe,WAAf,GAAIiF,CAAJ,EAA0D,GAA1D,EAA8BjF,CAAAiR,UAAAlP,OAAA,CAAsB,CAAtB,CAA9B,GACMP,CADN,CACcxB,CAAAiR,UAAAzP,MAAA,CAAqBksD,EAArB,CADd,EAEa,CACT1tD,CAAA40B,KAAA,CAAU,WAAV,CAAuB,IAAIrzB,MAAJ,CAAWC,CAAA,CAAM,CAAN,CAAX,CAAqBA,CAAA,CAAM,CAAN,CAArB,CAAvB,CACA,OAFS,CAMbmF,CAAAjH,OAAA,CAAaM,CAAA,CAAKiF,CAAL,CAAb,CAA2B82D,QAA+B,CAACj+D,CAAD,CAAQ,CAChEkC,CAAA40B,KAAA,CAAU3vB,CAAV,CAAkBnH,CAAlB,CADgE,CAAlE,CAXmC,CAFhC,CADuC,CADD,CAAjD,CAwBAf,EAAA,CAAQ,CAAC,KAAD,CAAQ,QAAR,CAAkB,MAAlB,CAAR,CAAmC,QAAQ,CAACksB,CAAD,CAAW,CACpD,IAAI2yC,EAAa3tC,EAAA,CAAmB,KAAnB,CAA2BhF,CAA3B,CACjBjX,GAAA,CAA2B4pD,CAA3B,CAAA,CAAyC,QAAQ,EAAG,CAClD,MAAO,CACL/xC,SAAU,EADL;AAEL1C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAC/B27D,EAAW1yC,CADoB,CAE/BxjB,EAAOwjB,CAEM,OAAjB,GAAIA,CAAJ,EAC4C,4BAD5C,GACI3pB,EAAAjC,KAAA,CAAciD,CAAAP,KAAA,CAAa,MAAb,CAAd,CADJ,GAEE0F,CAEA,CAFO,WAEP,CADAzF,CAAA+tB,MAAA,CAAWtoB,CAAX,CACA,CADmB,YACnB,CAAAk2D,CAAA,CAAW,IAJb,CAOA37D,EAAA2xB,SAAA,CAAciqC,CAAd,CAA0B,QAAQ,CAAC99D,CAAD,CAAQ,CACnCA,CAAL,EAOAkC,CAAA40B,KAAA,CAAUnvB,CAAV,CAAgB3H,CAAhB,CAMA,CAAIy+C,EAAJ,EAAYof,CAAZ,EAAsBr7D,CAAAP,KAAA,CAAa47D,CAAb,CAAuB37D,CAAA,CAAKyF,CAAL,CAAvB,CAbtB,EACmB,MADnB,GACMwjB,CADN,EAEIjpB,CAAA40B,KAAA,CAAUnvB,CAAV,CAAgB,IAAhB,CAHoC,CAA1C,CAXmC,CAFhC,CAD2C,CAFA,CAAtD,CAlnjBuC,KAypjBnCwgD,GAAe,CACjBU,YAAa9nD,CADI,CAEjBqoD,gBASF8U,QAA8B,CAAClV,CAAD,CAAUrhD,CAAV,CAAgB,CAC5CqhD,CAAAT,MAAA,CAAgB5gD,CAD4B,CAX3B,CAGjB6hD,eAAgBzoD,CAHC,CAIjB2oD,aAAc3oD,CAJG,CAKjBgpD,UAAWhpD,CALM,CAMjBopD,aAAcppD,CANG,CAOjB0pD,cAAe1pD,CAPE,CAyDnBgnD,GAAApoC,QAAA,CAAyB,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAvB,CAAiC,UAAjC,CAA6C,cAA7C,CAkYzB,KAAIw+C,GAAuBA,QAAQ,CAACC,CAAD,CAAW,CAC5C,MAAO,CAAC,UAAD,CAAa,QAAQ,CAAChnD,CAAD,CAAW,CAgErC,MA/DoBhI,CAClBzH,KAAM,MADYyH;AAElB6c,SAAUmyC,CAAA,CAAW,KAAX,CAAmB,GAFXhvD,CAGlBzE,WAAYo9C,EAHM34C,CAIlBtG,QAASu1D,QAAsB,CAACC,CAAD,CAAc,CAE3CA,CAAA1/C,SAAA,CAAqBqrC,EAArB,CAAArrC,SAAA,CAA8CgwC,EAA9C,CAEA,OAAO,CACL78B,IAAKwsC,QAAsB,CAAC11D,CAAD,CAAQy1D,CAAR,CAAqBp8D,CAArB,CAA2ByI,CAA3B,CAAuC,CAEhE,GAAM,EAAA,QAAA,EAAYzI,EAAZ,CAAN,CAAyB,CAOvB,IAAIs8D,EAAuBA,QAAQ,CAAC7gD,CAAD,CAAQ,CACzC9U,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB4B,CAAAs+C,iBAAA,EACAt+C,EAAA8/C,cAAA,EAFsB,CAAxB,CAKA9sC,EAAA2vB,eAAA,EANyC,CASxBgxB,EAAA97D,CAAY,CAAZA,CAr0f3BygC,iBAAA,CAq0f2CzoB,QAr0f3C,CAq0fqDgkD,CAr0frD,CAAmC,CAAA,CAAnC,CAy0fQF,EAAA9zD,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpC4M,CAAA,CAAS,QAAQ,EAAG,CACIknD,CAAA97D,CAAY,CAAZA,CAx0flCsY,oBAAA,CAw0fkDN,QAx0flD,CAw0f4DgkD,CAx0f5D,CAAsC,CAAA,CAAtC,CAu0f8B,CAApB,CAEG,CAFH,CAEM,CAAA,CAFN,CADoC,CAAtC,CApBuB,CAFuC,IA6B5DC,EAAiB9zD,CAAAu9C,aA7B2C,CA8B5DwW,EAAQ/zD,CAAA49C,MAERmW,EAAJ,GACEvvB,EAAA,CAAOtmC,CAAP,CAAc61D,CAAd,CAAqB/zD,CAArB,CAAiC+zD,CAAjC,CACA,CAAAx8D,CAAA2xB,SAAA,CAAc3xB,CAAAyF,KAAA,CAAY,MAAZ,CAAqB,QAAnC,CAA6C,QAAQ,CAAC2xB,CAAD,CAAW,CAC1DolC,CAAJ,GAAcplC,CAAd,GACA6V,EAAA,CAAOtmC,CAAP,CAAc61D,CAAd,CAAqBngE,CAArB,CAAgCmgE,CAAhC,CAGA,CAFAA,CAEA,CAFQplC,CAER,CADA6V,EAAA,CAAOtmC,CAAP,CAAc61D,CAAd,CAAqB/zD,CAArB,CAAiC+zD,CAAjC,CACA,CAAAD,CAAArV,gBAAA,CAA+Bz+C,CAA/B;AAA2C+zD,CAA3C,CAJA,CAD8D,CAAhE,CAFF,CAUAJ,EAAA9zD,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpCi0D,CAAAjV,eAAA,CAA8B7+C,CAA9B,CACI+zD,EAAJ,EACEvvB,EAAA,CAAOtmC,CAAP,CAAc61D,CAAd,CAAqBngE,CAArB,CAAgCmgE,CAAhC,CAEFp+D,EAAA,CAAOqK,CAAP,CAAmBw9C,EAAnB,CALoC,CAAtC,CA1CgE,CAD7D,CAJoC,CAJ3B/4C,CADiB,CAAhC,CADqC,CAA9C,CAqEIA,GAAgB+uD,EAAA,EArEpB,CAsEIrtD,GAAkBqtD,EAAA,CAAqB,CAAA,CAArB,CAtEtB,CAiFItS,GAAkB,0EAjFtB,CAkFI8S,GAAa,qFAlFjB,CAmFIC,GAAe,mGAnFnB,CAoFIC,GAAgB,oCApFpB,CAqFIC,GAAc,2BArFlB,CAsFIC,GAAuB,+DAtF3B;AAuFIC,GAAc,mBAvFlB,CAwFIC,GAAe,kBAxFnB,CAyFIC,GAAc,yCAzFlB,CA0FIC,GAAiB,uBA1FrB,CA4FI9R,GAAiB,IAAI7uD,CAAJ,CAAW,SAAX,CA5FrB,CA8FI4gE,GAAY,CAuFd,KAu0BFC,QAAsB,CAACx2D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6BhzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CACrEs2C,EAAA,CAAcjiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC0nD,CAApC,CAA0ChzC,CAA1C,CAAoDpC,CAApD,CACAm2C,GAAA,CAAqBf,CAArB,CAFqE,CA95BvD,CAkLd,KAAQ8C,EAAA,CAAoB,MAApB,CAA4BoS,EAA5B,CACDpT,EAAA,CAAiBoT,EAAjB,CAA8B,CAAC,MAAD,CAAS,IAAT,CAAe,IAAf,CAA9B,CADC,CAED,YAFC,CAlLM,CA6Qd,iBAAkBpS,EAAA,CAAoB,eAApB,CAAqCqS,EAArC,CACdrT,EAAA,CAAiBqT,EAAjB,CAAuC,yBAAA,MAAA,CAAA,GAAA,CAAvC,CADc,CAEd,yBAFc,CA7QJ,CAyWd,KAAQrS,EAAA,CAAoB,MAApB,CAA4BwS,EAA5B,CACJxT,EAAA,CAAiBwT,EAAjB,CAA8B,CAAC,IAAD,CAAO,IAAP,CAAa,IAAb,CAAmB,KAAnB,CAA9B,CADI,CAEL,cAFK,CAzWM,CAocd,KAAQxS,EAAA,CAAoB,MAApB,CAA4BsS,EAA5B,CAqjBVM,QAAmB,CAACC,CAAD,CAAUC,CAAV,CAAwB,CACzC,GAAIj+D,EAAA,CAAOg+D,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAIxgE,CAAA,CAASwgE,CAAT,CAAJ,CAAuB,CACrBP,EAAAr7D,UAAA,CAAwB,CACxB,KAAIgD;AAAQq4D,EAAAlmD,KAAA,CAAiBymD,CAAjB,CACZ,IAAI54D,CAAJ,CAAW,CAAA,IACLu+C,EAAO,CAACv+C,CAAA,CAAM,CAAN,CADH,CAEL84D,EAAO,CAAC94D,CAAA,CAAM,CAAN,CAFH,CAIL+4D,EADAC,CACAD,CADQ,CAHH,CAKLE,EAAU,CALL,CAMLC,EAAe,CANV,CAOLva,EAAaL,EAAA,CAAuBC,CAAvB,CAPR,CAQL4a,EAAuB,CAAvBA,EAAWL,CAAXK,CAAkB,CAAlBA,CAEAN,EAAJ,GACEG,CAGA,CAHQH,CAAAtT,SAAA,EAGR,CAFAwT,CAEA,CAFUF,CAAA3Y,WAAA,EAEV,CADA+Y,CACA,CADUJ,CAAAnT,WAAA,EACV,CAAAwT,CAAA,CAAeL,CAAAjT,gBAAA,EAJjB,CAOA,OAAO,KAAIhpD,IAAJ,CAAS2hD,CAAT,CAAe,CAAf,CAAkBI,CAAAI,QAAA,EAAlB,CAAyCoa,CAAzC,CAAkDH,CAAlD,CAAyDD,CAAzD,CAAkEE,CAAlE,CAA2EC,CAA3E,CAjBE,CAHU,CAwBvB,MAAOpT,IA7BkC,CArjBjC,CAAqD,UAArD,CApcM,CA+hBd,MAASC,EAAA,CAAoB,OAApB,CAA6BuS,EAA7B,CACNvT,EAAA,CAAiBuT,EAAjB,CAA+B,CAAC,MAAD,CAAS,IAAT,CAA/B,CADM,CAEN,SAFM,CA/hBK,CAsnBd,OA6iBFc,QAAwB,CAACl3D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6BhzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CACvEu4C,EAAA,CAAgBlkD,CAAhB,CAAuBrG,CAAvB,CAAgCN,CAAhC,CAAsC0nD,CAAtC,CACAkB,GAAA,CAAcjiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC0nD,CAApC,CAA0ChzC,CAA1C,CAAoDpC,CAApD,CAEAo1C,EAAAsD,aAAA,CAAoB,QACpBtD,EAAAuD,SAAA9pD,KAAA,CAAmB,QAAQ,CAACrD,CAAD,CAAQ,CACjC,MAAI4pD,EAAAiB,SAAA,CAAc7qD,CAAd,CAAJ,CAAsC,IAAtC,CACI6+D,EAAA11D,KAAA,CAAmBnJ,CAAnB,CAAJ,CAAsCmkD,UAAA,CAAWnkD,CAAX,CAAtC,CACOzB,CAH0B,CAAnC,CAMAqrD,EAAAgB,YAAAvnD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,GAAK,CAAA4pD,CAAAiB,SAAA,CAAc7qD,CAAd,CAAL,CAA2B,CACzB,GAAK,CAAAsB,CAAA,CAAStB,CAAT,CAAL,CACE,KAAMqtD,GAAA,CAAe,QAAf;AAA0DrtD,CAA1D,CAAN,CAEFA,CAAA,CAAQA,CAAAwB,SAAA,EAJiB,CAM3B,MAAOxB,EAP6B,CAAtC,CAUA,IAAIkC,CAAAmiD,IAAJ,EAAgBniD,CAAAqrD,MAAhB,CAA4B,CAC1B,IAAIC,CACJ5D,EAAA6D,YAAApJ,IAAA,CAAuBqJ,QAAQ,CAAC1tD,CAAD,CAAQ,CACrC,MAAO4pD,EAAAiB,SAAA,CAAc7qD,CAAd,CAAP,EAA+BmB,CAAA,CAAYqsD,CAAZ,CAA/B,EAAsDxtD,CAAtD,EAA+DwtD,CAD1B,CAIvCtrD,EAAA2xB,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC1uB,CAAD,CAAM,CAC7B/D,CAAA,CAAU+D,CAAV,CAAJ,EAAuB,CAAA7D,CAAA,CAAS6D,CAAT,CAAvB,GACEA,CADF,CACQg/C,UAAA,CAAWh/C,CAAX,CAAgB,EAAhB,CADR,CAGAqoD,EAAA,CAASlsD,CAAA,CAAS6D,CAAT,CAAA,EAAkB,CAAAi2C,KAAA,CAAMj2C,CAAN,CAAlB,CAA+BA,CAA/B,CAAqC5G,CAE9CqrD,EAAA+D,UAAA,EANiC,CAAnC,CAN0B,CAgB5B,GAAIzrD,CAAAq0B,IAAJ,EAAgBr0B,CAAA0rD,MAAhB,CAA4B,CAC1B,IAAIC,CACJjE,EAAA6D,YAAAl3B,IAAA,CAAuBu3B,QAAQ,CAAC9tD,CAAD,CAAQ,CACrC,MAAO4pD,EAAAiB,SAAA,CAAc7qD,CAAd,CAAP,EAA+BmB,CAAA,CAAY0sD,CAAZ,CAA/B,EAAsD7tD,CAAtD,EAA+D6tD,CAD1B,CAIvC3rD,EAAA2xB,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC1uB,CAAD,CAAM,CAC7B/D,CAAA,CAAU+D,CAAV,CAAJ,EAAuB,CAAA7D,CAAA,CAAS6D,CAAT,CAAvB,GACEA,CADF,CACQg/C,UAAA,CAAWh/C,CAAX,CAAgB,EAAhB,CADR,CAGA0oD,EAAA,CAASvsD,CAAA,CAAS6D,CAAT,CAAA,EAAkB,CAAAi2C,KAAA,CAAMj2C,CAAN,CAAlB,CAA+BA,CAA/B,CAAqC5G,CAE9CqrD,EAAA+D,UAAA,EANiC,CAAnC,CAN0B,CArC2C,CAnqCzD,CA+sBd,IA0gBFqS,QAAqB,CAACn3D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6BhzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CAGpEs2C,EAAA,CAAcjiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC0nD,CAApC,CAA0ChzC,CAA1C,CAAoDpC,CAApD,CACAm2C,GAAA,CAAqBf,CAArB,CAEAA,EAAAsD,aAAA,CAAoB,KACpBtD,EAAA6D,YAAA7nC,IAAA,CAAuBq6C,QAAQ,CAACC,CAAD;AAAaC,CAAb,CAAwB,CACrD,IAAIngE,EAAQkgE,CAARlgE,EAAsBmgE,CAC1B,OAAOvW,EAAAiB,SAAA,CAAc7qD,CAAd,CAAP,EAA+B2+D,EAAAx1D,KAAA,CAAgBnJ,CAAhB,CAFsB,CAPa,CAztCtD,CAuyBd,MA+bFogE,QAAuB,CAACv3D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6BhzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CAGtEs2C,EAAA,CAAcjiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC0nD,CAApC,CAA0ChzC,CAA1C,CAAoDpC,CAApD,CACAm2C,GAAA,CAAqBf,CAArB,CAEAA,EAAAsD,aAAA,CAAoB,OACpBtD,EAAA6D,YAAA4S,MAAA,CAAyBC,QAAQ,CAACJ,CAAD,CAAaC,CAAb,CAAwB,CACvD,IAAIngE,EAAQkgE,CAARlgE,EAAsBmgE,CAC1B,OAAOvW,EAAAiB,SAAA,CAAc7qD,CAAd,CAAP,EAA+B4+D,EAAAz1D,KAAA,CAAkBnJ,CAAlB,CAFwB,CAPa,CAtuCxD,CA21Bd,MAwZFugE,QAAuB,CAAC13D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6B,CAE9CzoD,CAAA,CAAYe,CAAAyF,KAAZ,CAAJ,EACEnF,CAAAN,KAAA,CAAa,MAAb,CA3jmBK,EAAEhC,EA2jmBP,CASFsC,EAAAgI,GAAA,CAAW,OAAX,CANeub,QAAQ,CAACilC,CAAD,CAAK,CACtBxoD,CAAA,CAAQ,CAAR,CAAAg+D,QAAJ,EACE5W,CAAAwB,cAAA,CAAmBlpD,CAAAlC,MAAnB,CAA+BgrD,CAA/B,EAAqCA,CAAAxwC,KAArC,CAFwB,CAM5B,CAEAovC,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CAExBjpD,CAAA,CAAQ,CAAR,CAAAg+D,QAAA,CADYt+D,CAAAlC,MACZ,EAA+B4pD,CAAAsB,WAFP,CAK1BhpD,EAAA2xB,SAAA,CAAc,OAAd,CAAuB+1B,CAAA4B,QAAvB,CAnBkD,CAnvCpC,CA+4Bd,SAuYFiV,QAA0B,CAAC53D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6BhzC,CAA7B,CAAuCpC,CAAvC,CAAiDU,CAAjD,CAA0Dc,CAA1D,CAAkE,CAC1F,IAAI0qD,EAAYvS,EAAA,CAAkBn4C,CAAlB,CAA0BnN,CAA1B,CAAiC,aAAjC,CAAgD3G,CAAAy+D,YAAhD,CAAkE,CAAA,CAAlE,CAAhB;AACIC,EAAazS,EAAA,CAAkBn4C,CAAlB,CAA0BnN,CAA1B,CAAiC,cAAjC,CAAiD3G,CAAA2+D,aAAjD,CAAoE,CAAA,CAApE,CAMjBr+D,EAAAgI,GAAA,CAAW,OAAX,CAJeub,QAAQ,CAACilC,CAAD,CAAK,CAC1BpB,CAAAwB,cAAA,CAAmB5oD,CAAA,CAAQ,CAAR,CAAAg+D,QAAnB,CAAuCxV,CAAvC,EAA6CA,CAAAxwC,KAA7C,CAD0B,CAI5B,CAEAovC,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CACxBjpD,CAAA,CAAQ,CAAR,CAAAg+D,QAAA,CAAqB5W,CAAAsB,WADG,CAO1BtB,EAAAiB,SAAA,CAAgBiW,QAAQ,CAAC9gE,CAAD,CAAQ,CAC9B,MAAiB,CAAA,CAAjB,GAAOA,CADuB,CAIhC4pD,EAAAgB,YAAAvnD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,MAAOkE,GAAA,CAAOlE,CAAP,CAAc0gE,CAAd,CAD6B,CAAtC,CAIA9W,EAAAuD,SAAA9pD,KAAA,CAAmB,QAAQ,CAACrD,CAAD,CAAQ,CACjC,MAAOA,EAAA,CAAQ0gE,CAAR,CAAoBE,CADM,CAAnC,CAzB0F,CAtxC5E,CAi5Bd,OAAU7/D,CAj5BI,CAk5Bd,OAAUA,CAl5BI,CAm5Bd,OAAUA,CAn5BI,CAo5Bd,MAASA,CAp5BK,CAq5Bd,KAAQA,CAr5BM,CA9FhB,CA0iDIkO,GAAiB,CAAC,UAAD,CAAa,UAAb,CAAyB,SAAzB,CAAoC,QAApC,CACjB,QAAQ,CAACuF,CAAD,CAAWoC,CAAX,CAAqB1B,CAArB,CAA8Bc,CAA9B,CAAsC,CAChD,MAAO,CACLiW,SAAU,GADL,CAELD,QAAS,CAAC,UAAD,CAFJ,CAGL3C,KAAM,CACJ0I,IAAKA,QAAQ,CAAClpB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB6+D,CAAvB,CAA8B,CACrCA,CAAA,CAAM,CAAN,CAAJ,EACE,CAAC3B,EAAA,CAAU38D,CAAA,CAAUP,CAAAsY,KAAV,CAAV,CAAD,EAAoC4kD,EAAAjnC,KAApC,EAAoDtvB,CAApD,CAA2DrG,CAA3D,CAAoEN,CAApE,CAA0E6+D,CAAA,CAAM,CAAN,CAA1E;AAAoFnqD,CAApF,CACoDpC,CADpD,CAC8DU,CAD9D,CACuEc,CADvE,CAFuC,CADvC,CAHD,CADyC,CAD7B,CA1iDrB,CA0jDI44C,GAAc,UA1jDlB,CA2jDIC,GAAgB,YA3jDpB,CA4jDI5E,GAAiB,aA5jDrB,CA6jDIC,GAAc,UA7jDlB,CAgkDI8E,GAAgB,YAhkDpB,CAwwDIgS,GAAoB,CAAC,QAAD,CAAW,mBAAX,CAAgC,QAAhC,CAA0C,UAA1C,CAAsD,QAAtD,CAAgE,UAAhE,CAA4E,UAA5E,CAAwF,YAAxF,CAAsG,IAAtG,CAA4G,cAA5G,CACpB,QAAQ,CAACluC,CAAD,CAAS9d,CAAT,CAA4Bib,CAA5B,CAAmCtD,CAAnC,CAA6C3W,CAA7C,CAAqD1B,CAArD,CAA+D8C,CAA/D,CAAyElB,CAAzE,CAAqFE,CAArF,CAAyFhB,CAAzF,CAAuG,CAEjH,IAAA6rD,YAAA,CADA,IAAA/V,WACA,CADkBphC,MAAA2iC,IAElB,KAAAyU,gBAAA,CAAuB3iE,CACvB,KAAAkvD,YAAA,CAAmB,EACnB,KAAA0T,iBAAA,CAAwB,EACxB,KAAAhU,SAAA,CAAgB,EAChB,KAAAvC,YAAA,CAAmB,EACnB,KAAAwW,qBAAA,CAA4B,EAC5B,KAAAC,WAAA,CAAkB,CAAA,CAClB,KAAAC,SAAA,CAAgB,CAAA,CAChB,KAAA7Y,UAAA,CAAiB,CAAA,CACjB,KAAAD,OAAA,CAAc,CAAA,CACd,KAAAE,OAAA,CAAc,CAAA,CACd,KAAAC,SAAA;AAAgB,CAAA,CAChB,KAAAP,OAAA,CAAc,EACd,KAAAC,UAAA,CAAiB,EACjB,KAAAC,SAAA,CAAgB/pD,CAChB,KAAAgqD,MAAA,CAAanzC,CAAA,CAAa6a,CAAAtoB,KAAb,EAA2B,EAA3B,CAA+B,CAAA,CAA/B,CAAA,CAAsCmrB,CAAtC,CAlBoG,KAqB7GyuC,EAAgBvrD,CAAA,CAAOia,CAAAtd,QAAP,CArB6F,CAsB7G6uD,EAAsBD,CAAArtC,OAtBuF,CAuB7GutC,EAAaF,CAvBgG,CAwB7GG,EAAaF,CAxBgG,CAyB7GG,EAAkB,IAzB2F,CA0B7G/X,EAAO,IAEX,KAAAgY,aAAA,CAAoBC,QAAQ,CAAC94C,CAAD,CAAU,CAEpC,IADA6gC,CAAAoD,SACA,CADgBjkC,CAChB,GAAeA,CAAA+4C,aAAf,CAAqC,CAAA,IAC/BC,EAAoB/rD,CAAA,CAAOia,CAAAtd,QAAP,CAAuB,IAAvB,CADW,CAE/BqvD,EAAoBhsD,CAAA,CAAOia,CAAAtd,QAAP,CAAuB,QAAvB,CAExB8uD,EAAA,CAAaA,QAAQ,CAAC3uC,CAAD,CAAS,CAC5B,IAAIotC,EAAaqB,CAAA,CAAczuC,CAAd,CACbzzB,EAAA,CAAW6gE,CAAX,CAAJ,GACEA,CADF,CACe6B,CAAA,CAAkBjvC,CAAlB,CADf,CAGA,OAAOotC,EALqB,CAO9BwB,EAAA,CAAaA,QAAQ,CAAC5uC,CAAD,CAASwG,CAAT,CAAmB,CAClCj6B,CAAA,CAAWkiE,CAAA,CAAczuC,CAAd,CAAX,CAAJ,CACEkvC,CAAA,CAAkBlvC,CAAlB,CAA0B,CAACmvC,KAAMrY,CAAAqX,YAAP,CAA1B,CADF,CAGEO,CAAA,CAAoB1uC,CAApB,CAA4B82B,CAAAqX,YAA5B,CAJoC,CAXL,CAArC,IAkBO,IAAK/sC,CAAAqtC,CAAArtC,OAAL,CACL,KAAMm5B,GAAA,CAAe,WAAf,CACFp9B,CAAAtd,QADE,CACahN,EAAA,CAAYgnB,CAAZ,CADb,CAAN,CArBkC,CA8CtC,KAAA6+B,QAAA,CAAezqD,CAoBf,KAAA8pD,SAAA,CAAgBqX,QAAQ,CAACliE,CAAD,CAAQ,CAC9B,MAAOmB,EAAA,CAAYnB,CAAZ,CAAP,EAAuC,EAAvC,GAA6BA,CAA7B,EAAuD,IAAvD,GAA6CA,CAA7C,EAA+DA,CAA/D;AAAyEA,CAD3C,CA9FiF,KAkG7GioD,EAAat7B,CAAA/hB,cAAA,CAAuB,iBAAvB,CAAbq9C,EAA0DE,EAlGmD,CAmG7Gga,EAAyB,CAwB7BxY,GAAA,CAAqB,CACnBC,KAAM,IADa,CAEnBj9B,SAAUA,CAFS,CAGnBk9B,IAAKA,QAAQ,CAAC7C,CAAD,CAASlb,CAAT,CAAmB,CAC9Bkb,CAAA,CAAOlb,CAAP,CAAA,CAAmB,CAAA,CADW,CAHb,CAMnBge,MAAOA,QAAQ,CAAC9C,CAAD,CAASlb,CAAT,CAAmB,CAChC,OAAOkb,CAAA,CAAOlb,CAAP,CADyB,CANf,CASnBmc,WAAYA,CATO,CAUnB3zC,SAAUA,CAVS,CAArB,CAwBA,KAAA61C,aAAA,CAAoBiY,QAAQ,EAAG,CAC7BxY,CAAApB,OAAA,CAAc,CAAA,CACdoB,EAAAnB,UAAA,CAAiB,CAAA,CACjBn0C,EAAAuK,YAAA,CAAqB8N,CAArB,CAA+Bu9B,EAA/B,CACA51C,EAAAsK,SAAA,CAAkB+N,CAAlB,CAA4Bs9B,EAA5B,CAJ6B,CAkB/B,KAAAF,UAAA,CAAiBsY,QAAQ,EAAG,CAC1BzY,CAAApB,OAAA,CAAc,CAAA,CACdoB,EAAAnB,UAAA,CAAiB,CAAA,CACjBn0C,EAAAuK,YAAA,CAAqB8N,CAArB,CAA+Bs9B,EAA/B,CACA31C,EAAAsK,SAAA,CAAkB+N,CAAlB,CAA4Bu9B,EAA5B,CACAjC,EAAA8B,UAAA,EAL0B,CAoB5B,KAAAQ,cAAA,CAAqB+X,QAAQ,EAAG,CAC9B1Y,CAAA0X,SAAA,CAAgB,CAAA,CAChB1X,EAAAyX,WAAA,CAAkB,CAAA,CAClB/sD,EAAA+1C,SAAA,CAAkB19B,CAAlB,CAvYkB41C,cAuYlB,CAtYgBC,YAsYhB,CAH8B,CAiBhC,KAAAC,YAAA,CAAmBC,QAAQ,EAAG,CAC5B9Y,CAAA0X,SAAA;AAAgB,CAAA,CAChB1X,EAAAyX,WAAA,CAAkB,CAAA,CAClB/sD,EAAA+1C,SAAA,CAAkB19B,CAAlB,CAvZgB61C,YAuZhB,CAxZkBD,cAwZlB,CAH4B,CAiE9B,KAAAzZ,mBAAA,CAA0B6Z,QAAQ,EAAG,CACnCvrD,CAAAsR,OAAA,CAAgBi5C,CAAhB,CACA/X,EAAAsB,WAAA,CAAkBtB,CAAAgZ,yBAClBhZ,EAAA4B,QAAA,EAHmC,CAkBrC,KAAAmC,UAAA,CAAiBkV,QAAQ,EAAG,CAE1B,GAAI,CAAAvhE,CAAA,CAASsoD,CAAAqX,YAAT,CAAJ,EAAkC,CAAA7lB,KAAA,CAAMwO,CAAAqX,YAAN,CAAlC,CAAA,CASA,IAAIf,EAAatW,CAAAsX,gBAAjB,CAMI4B,EAAYlZ,CAAAlB,OANhB,CAOIqa,EAAiBnZ,CAAAqX,YAPrB,CASI+B,EAAepZ,CAAAoD,SAAfgW,EAAgCpZ,CAAAoD,SAAAgW,aAEpCpZ,EAAAqZ,gBAAA,CAPkBrZ,CAAAxB,OAAA,CADDwB,CAAAsD,aACC,EADoB,OACpB,CAAAgW,CAA0B,CAAA,CAA1BA,CAAkC3kE,CAOpD,CAAkC2hE,CAAlC,CAhBgBtW,CAAAgZ,yBAgBhB,CAAyD,QAAQ,CAACO,CAAD,CAAW,CAGrEH,CAAL,EAAqBF,CAArB,GAAmCK,CAAnC,GAKEvZ,CAAAqX,YAEA,CAFmBkC,CAAA,CAAWjD,CAAX,CAAwB3hE,CAE3C,CAAIqrD,CAAAqX,YAAJ,GAAyB8B,CAAzB,EACEnZ,CAAAwZ,oBAAA,EARJ,CAH0E,CAA5E,CApBA,CAF0B,CAwC5B,KAAAH,gBAAA;AAAuBI,QAAQ,CAACC,CAAD,CAAapD,CAAb,CAAyBC,CAAzB,CAAoCoD,CAApC,CAAkD,CAkC/EC,QAASA,EAAqB,EAAG,CAC/B,IAAIC,EAAsB,CAAA,CAC1BxkE,EAAA,CAAQ2qD,CAAA6D,YAAR,CAA0B,QAAQ,CAACiW,CAAD,CAAY/7D,CAAZ,CAAkB,CAClD,IAAIrE,EAASogE,CAAA,CAAUxD,CAAV,CAAsBC,CAAtB,CACbsD,EAAA,CAAsBA,CAAtB,EAA6CngE,CAC7CwrD,EAAA,CAAYnnD,CAAZ,CAAkBrE,CAAlB,CAHkD,CAApD,CAKA,OAAKmgE,EAAL,CAMO,CAAA,CANP,EACExkE,CAAA,CAAQ2qD,CAAAuX,iBAAR,CAA+B,QAAQ,CAACj/B,CAAD,CAAIv6B,CAAJ,CAAU,CAC/CmnD,CAAA,CAAYnnD,CAAZ,CAAkB,IAAlB,CAD+C,CAAjD,CAGO,CAAA,CAAA,CAJT,CAP+B,CAgBjCg8D,QAASA,EAAsB,EAAG,CAChC,IAAIC,EAAoB,EAAxB,CACIT,EAAW,CAAA,CACflkE,EAAA,CAAQ2qD,CAAAuX,iBAAR,CAA+B,QAAQ,CAACuC,CAAD,CAAY/7D,CAAZ,CAAkB,CACvD,IAAIu4B,EAAUwjC,CAAA,CAAUxD,CAAV,CAAsBC,CAAtB,CACd,IAAmBjgC,CAAAA,CAAnB,EA3lnBQ,CAAA7gC,CAAA,CA2lnBW6gC,CA3lnBA3I,KAAX,CA2lnBR,CACE,KAAM81B,GAAA,CAAe,kBAAf,CAC0EntB,CAD1E,CAAN,CAGF4uB,CAAA,CAAYnnD,CAAZ,CAAkBpJ,CAAlB,CACAqlE,EAAAvgE,KAAA,CAAuB68B,CAAA3I,KAAA,CAAa,QAAQ,EAAG,CAC7Cu3B,CAAA,CAAYnnD,CAAZ,CAAkB,CAAA,CAAlB,CAD6C,CAAxB,CAEpB,QAAQ,CAACkd,CAAD,CAAQ,CACjBs+C,CAAA,CAAW,CAAA,CACXrU,EAAA,CAAYnnD,CAAZ,CAAkB,CAAA,CAAlB,CAFiB,CAFI,CAAvB,CAPuD,CAAzD,CAcKi8D,EAAAhlE,OAAL,CAGEwX,CAAA2J,IAAA,CAAO6jD,CAAP,CAAArsC,KAAA,CAA+B,QAAQ,EAAG,CACxCssC,CAAA,CAAeV,CAAf,CADwC,CAA1C,CAEGpiE,CAFH,CAHF,CACE8iE,CAAA,CAAe,CAAA,CAAf,CAlB8B,CA0BlC/U,QAASA,EAAW,CAACnnD,CAAD,CAAOgnD,CAAP,CAAgB,CAC9BmV,CAAJ,GAA6B3B,CAA7B,EACEvY,CAAAF,aAAA,CAAkB/hD,CAAlB,CAAwBgnD,CAAxB,CAFgC,CAMpCkV,QAASA,EAAc,CAACV,CAAD,CAAW,CAC5BW,CAAJ,GAA6B3B,CAA7B,EAEEoB,CAAA,CAAaJ,CAAb,CAH8B,CAjFlChB,CAAA,EACA,KAAI2B,EAAuB3B,CAa3B4B,UAA2B,CAACT,CAAD,CAAa,CACtC,IAAIU;AAAWpa,CAAAsD,aAAX8W,EAAgC,OACpC,IAAIV,CAAJ,GAAmB/kE,CAAnB,CACEuwD,CAAA,CAAYkV,CAAZ,CAAsB,IAAtB,CADF,KAIE,IADAlV,CAAA,CAAYkV,CAAZ,CAAsBV,CAAtB,CACKA,CAAAA,CAAAA,CAAL,CAOE,MANArkE,EAAA,CAAQ2qD,CAAA6D,YAAR,CAA0B,QAAQ,CAACvrB,CAAD,CAAIv6B,CAAJ,CAAU,CAC1CmnD,CAAA,CAAYnnD,CAAZ,CAAkB,IAAlB,CAD0C,CAA5C,CAMO,CAHP1I,CAAA,CAAQ2qD,CAAAuX,iBAAR,CAA+B,QAAQ,CAACj/B,CAAD,CAAIv6B,CAAJ,CAAU,CAC/CmnD,CAAA,CAAYnnD,CAAZ,CAAkB,IAAlB,CAD+C,CAAjD,CAGO,CAAA,CAAA,CAGX,OAAO,CAAA,CAhB+B,CAAxCo8D,CAVK,CAAmBT,CAAnB,CAAL,CAIKE,CAAA,EAAL,CAIAG,CAAA,EAJA,CACEE,CAAA,CAAe,CAAA,CAAf,CALF,CACEA,CAAA,CAAe,CAAA,CAAf,CAN6E,CAqGjF,KAAA5a,iBAAA,CAAwBgb,QAAQ,EAAG,CACjC,IAAI9D,EAAYvW,CAAAsB,WAEhB9zC,EAAAsR,OAAA,CAAgBi5C,CAAhB,CAKA,IAAI/X,CAAAgZ,yBAAJ,GAAsCzC,CAAtC,EAAkE,EAAlE,GAAoDA,CAApD,EAAyEvW,CAAAuB,sBAAzE,CAGAvB,CAAAgZ,yBAMA,CANgCzC,CAMhC,CAHIvW,CAAAnB,UAGJ,EAFE,IAAAsB,UAAA,EAEF,CAAA,IAAAma,mBAAA,EAjBiC,CAoBnC,KAAAA,mBAAA,CAA0BC,QAAQ,EAAG,CAEnC,IAAIjE,EADYtW,CAAAgZ,yBAChB,CACIM,EAAc/hE,CAAA,CAAY++D,CAAZ,CAAA,CAA0B3hE,CAA1B,CAAsC,CAAA,CAExD,IAAI2kE,CAAJ,CACE,IAAS,IAAArjE;AAAI,CAAb,CAAgBA,CAAhB,CAAoB+pD,CAAAuD,SAAAvuD,OAApB,CAA0CiB,CAAA,EAA1C,CAEE,GADAqgE,CACI,CADStW,CAAAuD,SAAA,CAActtD,CAAd,CAAA,CAAiBqgE,CAAjB,CACT,CAAA/+D,CAAA,CAAY++D,CAAZ,CAAJ,CAA6B,CAC3BgD,CAAA,CAAc,CAAA,CACd,MAF2B,CAM7B5hE,CAAA,CAASsoD,CAAAqX,YAAT,CAAJ,EAAkC7lB,KAAA,CAAMwO,CAAAqX,YAAN,CAAlC,GAEErX,CAAAqX,YAFF,CAEqBQ,CAAA,CAAW3uC,CAAX,CAFrB,CAIA,KAAIiwC,EAAiBnZ,CAAAqX,YAArB,CACI+B,EAAepZ,CAAAoD,SAAfgW,EAAgCpZ,CAAAoD,SAAAgW,aACpCpZ,EAAAsX,gBAAA,CAAuBhB,CAEnB8C,EAAJ,GACEpZ,CAAAqX,YAkBA,CAlBmBf,CAkBnB,CAAItW,CAAAqX,YAAJ,GAAyB8B,CAAzB,EACEnZ,CAAAwZ,oBAAA,EApBJ,CAOAxZ,EAAAqZ,gBAAA,CAAqBC,CAArB,CAAkChD,CAAlC,CAA8CtW,CAAAgZ,yBAA9C,CAA6E,QAAQ,CAACO,CAAD,CAAW,CACzFH,CAAL,GAKEpZ,CAAAqX,YAMF,CANqBkC,CAAA,CAAWjD,CAAX,CAAwB3hE,CAM7C,CAAIqrD,CAAAqX,YAAJ,GAAyB8B,CAAzB,EACEnZ,CAAAwZ,oBAAA,EAZF,CAD8F,CAAhG,CA7BmC,CA+CrC,KAAAA,oBAAA,CAA2BgB,QAAQ,EAAG,CACpC1C,CAAA,CAAW5uC,CAAX,CAAmB82B,CAAAqX,YAAnB,CACAhiE,EAAA,CAAQ2qD,CAAAwX,qBAAR,CAAmC,QAAQ,CAACr7C,CAAD,CAAW,CACpD,GAAI,CACFA,CAAA,EADE,CAEF,MAAOhgB,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAHwC,CAAtD,CAFoC,CAmDtC;IAAAqlD,cAAA,CAAqBiZ,QAAQ,CAACrkE,CAAD,CAAQkxD,CAAR,CAAiB,CAC5CtH,CAAAsB,WAAA,CAAkBlrD,CACb4pD,EAAAoD,SAAL,EAAsBsX,CAAA1a,CAAAoD,SAAAsX,gBAAtB,EACE1a,CAAA2a,0BAAA,CAA+BrT,CAA/B,CAH0C,CAO9C,KAAAqT,0BAAA,CAAiCC,QAAQ,CAACtT,CAAD,CAAU,CAAA,IAC7CuT,EAAgB,CAD6B,CAE7C17C,EAAU6gC,CAAAoD,SAGVjkC,EAAJ,EAAe3nB,CAAA,CAAU2nB,CAAA27C,SAAV,CAAf,GACEA,CACA,CADW37C,CAAA27C,SACX,CAAIpjE,CAAA,CAASojE,CAAT,CAAJ,CACED,CADF,CACkBC,CADlB,CAEWpjE,CAAA,CAASojE,CAAA,CAASxT,CAAT,CAAT,CAAJ,CACLuT,CADK,CACWC,CAAA,CAASxT,CAAT,CADX,CAEI5vD,CAAA,CAASojE,CAAA,CAAS,SAAT,CAAT,CAFJ,GAGLD,CAHK,CAGWC,CAAA,CAAS,SAAT,CAHX,CAJT,CAWAttD,EAAAsR,OAAA,CAAgBi5C,CAAhB,CACI8C,EAAJ,CACE9C,CADF,CACoBvqD,CAAA,CAAS,QAAQ,EAAG,CACpCwyC,CAAAX,iBAAA,EADoC,CAApB,CAEfwb,CAFe,CADpB,CAIWvuD,CAAAkrB,QAAJ,CACLwoB,CAAAX,iBAAA,EADK,CAGLn2B,CAAA/pB,OAAA,CAAc,QAAQ,EAAG,CACvB6gD,CAAAX,iBAAA,EADuB,CAAzB,CAxB+C,CAsCnDn2B,EAAAlxB,OAAA,CAAc+iE,QAAqB,EAAG,CACpC,IAAIzE,EAAauB,CAAA,CAAW3uC,CAAX,CAIjB,IAAIotC,CAAJ,GAAmBtW,CAAAqX,YAAnB,CAAqC,CACnCrX,CAAAqX,YAAA,CAAmBrX,CAAAsX,gBAAnB,CAA0ChB,CAM1C,KAPmC,IAG/B0E;AAAahb,CAAAgB,YAHkB,CAI/Bn8B,EAAMm2C,CAAAhmE,OAJyB,CAM/BuhE,EAAYD,CAChB,CAAOzxC,CAAA,EAAP,CAAA,CACE0xC,CAAA,CAAYyE,CAAA,CAAWn2C,CAAX,CAAA,CAAgB0xC,CAAhB,CAEVvW,EAAAsB,WAAJ,GAAwBiV,CAAxB,GACEvW,CAAAsB,WAGA,CAHkBtB,CAAAgZ,yBAGlB,CAHkDzC,CAGlD,CAFAvW,CAAA4B,QAAA,EAEA,CAAA5B,CAAAqZ,gBAAA,CAAqB1kE,CAArB,CAAgC2hE,CAAhC,CAA4CC,CAA5C,CAAuDp/D,CAAvD,CAJF,CAVmC,CAkBrC,MAAOm/D,EAvB6B,CAAtC,CA7kBiH,CAD3F,CAxwDxB,CAqhFIttD,GAAmB,CAAC,YAAD,CAAe,QAAQ,CAACsD,CAAD,CAAa,CACzD,MAAO,CACL+V,SAAU,GADL,CAELD,QAAS,CAAC,SAAD,CAAY,QAAZ,CAAsB,kBAAtB,CAFJ,CAGLrhB,WAAYq2D,EAHP,CAOLj1C,SAAU,CAPL,CAQLjjB,QAAS+7D,QAAuB,CAACriE,CAAD,CAAU,CAExCA,CAAAoc,SAAA,CAAiBqrC,EAAjB,CAAArrC,SAAA,CAl+BgB2jD,cAk+BhB,CAAA3jD,SAAA,CAAoEgwC,EAApE,CAEA,OAAO,CACL78B,IAAK+yC,QAAuB,CAACj8D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB6+D,CAAvB,CAA8B,CAAA,IACpDgE,EAAYhE,CAAA,CAAM,CAAN,CADwC,CAEpDiE,EAAWjE,CAAA,CAAM,CAAN,CAAXiE,EAAuB7c,EAE3B4c,EAAAnD,aAAA,CAAuBb,CAAA,CAAM,CAAN,CAAvB,EAAmCA,CAAA,CAAM,CAAN,CAAA/T,SAAnC,CAGAgY,EAAAnc,YAAA,CAAqBkc,CAArB,CAEA7iE,EAAA2xB,SAAA,CAAc,MAAd,CAAsB,QAAQ,CAACyF,CAAD,CAAW,CACnCyrC,CAAAxc,MAAJ,GAAwBjvB,CAAxB,EACE0rC,CAAA5b,gBAAA,CAAyB2b,CAAzB;AAAoCzrC,CAApC,CAFqC,CAAzC,CAMAzwB,EAAA2rB,IAAA,CAAU,UAAV,CAAsB,QAAQ,EAAG,CAC/BwwC,CAAAxb,eAAA,CAAwBub,CAAxB,CAD+B,CAAjC,CAfwD,CADrD,CAoBL/yC,KAAMizC,QAAwB,CAACp8D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB6+D,CAAvB,CAA8B,CAC1D,IAAIgE,EAAYhE,CAAA,CAAM,CAAN,CAChB,IAAIgE,CAAA/X,SAAJ,EAA0B+X,CAAA/X,SAAAkY,SAA1B,CACE1iE,CAAAgI,GAAA,CAAWu6D,CAAA/X,SAAAkY,SAAX,CAAwC,QAAQ,CAACla,CAAD,CAAK,CACnD+Z,CAAAR,0BAAA,CAAoCvZ,CAApC,EAA0CA,CAAAxwC,KAA1C,CADmD,CAArD,CAKFhY,EAAAgI,GAAA,CAAW,MAAX,CAAmB,QAAQ,CAACwgD,CAAD,CAAK,CAC1B+Z,CAAAzD,SAAJ,GAEIprD,CAAAkrB,QAAJ,CACEv4B,CAAAlH,WAAA,CAAiBojE,CAAAtC,YAAjB,CADF,CAGE55D,CAAAE,OAAA,CAAag8D,CAAAtC,YAAb,CALF,CAD8B,CAAhC,CAR0D,CApBvD,CAJiC,CARrC,CADkD,CAApC,CArhFvB,CAipFIzvD,GAAoB9R,EAAA,CAAQ,CAC9B+qB,SAAU,GADoB,CAE9BD,QAAS,SAFqB,CAG9B3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6B,CACzCA,CAAAwX,qBAAA/9D,KAAA,CAA+B,QAAQ,EAAG,CACxCwF,CAAAsyC,MAAA,CAAYj5C,CAAA6Q,SAAZ,CADwC,CAA1C,CADyC,CAHb,CAAR,CAjpFxB,CA4pFIM,GAAoBA,QAAQ,EAAG,CACjC,MAAO,CACL4Y,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL3C,KAAMA,QAAQ,CAACxgB,CAAD;AAAQmb,CAAR,CAAa9hB,CAAb,CAAmB0nD,CAAnB,CAAyB,CAChCA,CAAL,GACA1nD,CAAAkR,SAMA,CANgB,CAAA,CAMhB,CAJAw2C,CAAA6D,YAAAr6C,SAIA,CAJ4B+xD,QAAQ,CAACjF,CAAD,CAAaC,CAAb,CAAwB,CAC1D,MAAO,CAACj+D,CAAAkR,SAAR,EAAyB,CAACw2C,CAAAiB,SAAA,CAAcsV,CAAd,CADgC,CAI5D,CAAAj+D,CAAA2xB,SAAA,CAAc,UAAd,CAA0B,QAAQ,EAAG,CACnC+1B,CAAA+D,UAAA,EADmC,CAArC,CAPA,CADqC,CAHlC,CAD0B,CA5pFnC,CAgrFIz6C,GAAmBA,QAAQ,EAAG,CAChC,MAAO,CACL+Y,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB0nD,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CADqC,IAGjCv9B,CAHiC,CAGzB+4C,EAAaljE,CAAAiR,UAAbiyD,EAA+BljE,CAAA+Q,QAC3C/Q,EAAA2xB,SAAA,CAAc,SAAd,CAAyB,QAAQ,CAAC0oB,CAAD,CAAQ,CACnCx9C,CAAA,CAASw9C,CAAT,CAAJ,EAAsC,CAAtC,CAAuBA,CAAA39C,OAAvB,GACE29C,CADF,CACU,IAAI94C,MAAJ,CAAW,GAAX,CAAiB84C,CAAjB,CAAyB,GAAzB,CADV,CAIA,IAAIA,CAAJ,EAAcpzC,CAAAozC,CAAApzC,KAAd,CACE,KAAM3K,EAAA,CAAO,WAAP,CAAA,CAAoB,UAApB,CACqD4mE,CADrD,CAEJ7oB,CAFI,CAEG52C,EAAA,CAAYqe,CAAZ,CAFH,CAAN,CAKFqI,CAAA,CAASkwB,CAAT,EAAkBh+C,CAClBqrD,EAAA+D,UAAA,EAZuC,CAAzC,CAeA/D,EAAA6D,YAAAx6C,QAAA,CAA2BoyD,QAAQ,CAACrlE,CAAD,CAAQ,CACzC,MAAO4pD,EAAAiB,SAAA,CAAc7qD,CAAd,CAAP,EAA+BmB,CAAA,CAAYkrB,CAAZ,CAA/B,EAAsDA,CAAAljB,KAAA,CAAYnJ,CAAZ,CADb,CAlB3C,CADqC,CAHlC,CADyB,CAhrFlC,CA+sFI2T,GAAqBA,QAAQ,EAAG,CAClC,MAAO,CACLsY,SAAU,GADL;AAELD,QAAS,UAFJ,CAGL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB0nD,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAIl2C,EAAa,EACjBxR,EAAA2xB,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAAC7zB,CAAD,CAAQ,CACrCslE,CAAAA,CAAS1kE,CAAA,CAAIZ,CAAJ,CACb0T,EAAA,CAAY0nC,KAAA,CAAMkqB,CAAN,CAAA,CAAiB,EAAjB,CAAqBA,CACjC1b,EAAA+D,UAAA,EAHyC,CAA3C,CAKA/D,EAAA6D,YAAA/5C,UAAA,CAA6B6xD,QAAQ,CAACrF,CAAD,CAAaC,CAAb,CAAwB,CAC3D,MAAoB,EAApB,CAAQzsD,CAAR,EAA0Bk2C,CAAAiB,SAAA,CAAcqV,CAAd,CAA1B,EAAwDC,CAAAvhE,OAAxD,EAA4E8U,CADjB,CAR7D,CADqC,CAHlC,CAD2B,CA/sFpC,CAmuFIF,GAAqBA,QAAQ,EAAG,CAClC,MAAO,CACLyY,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB0nD,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAIr2C,EAAY,CAChBrR,EAAA2xB,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAAC7zB,CAAD,CAAQ,CACzCuT,CAAA,CAAY3S,CAAA,CAAIZ,CAAJ,CAAZ,EAA0B,CAC1B4pD,EAAA+D,UAAA,EAFyC,CAA3C,CAIA/D,EAAA6D,YAAAl6C,UAAA,CAA6BiyD,QAAQ,CAACtF,CAAD,CAAaC,CAAb,CAAwB,CAC3D,MAAOvW,EAAAiB,SAAA,CAAcsV,CAAd,CAAP,EAAmCA,CAAAvhE,OAAnC,EAAuD2U,CADI,CAP7D,CADqC,CAHlC,CAD2B,CAnuFpC,CAy0FIT,GAAkBA,QAAQ,EAAG,CAC/B,MAAO,CACLmZ,SAAU,GADL,CAELF,SAAU,GAFL,CAGLC,QAAS,SAHJ;AAIL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6B,CAGzC,IAAI/2C,EAASrQ,CAAAN,KAAA,CAAaA,CAAA+tB,MAAApd,OAAb,CAATA,EAA4C,IAAhD,CACI4yD,EAA6B,OAA7BA,GAAavjE,CAAA+oD,OADjB,CAEIlhD,EAAY07D,CAAA,CAAa/rD,CAAA,CAAK7G,CAAL,CAAb,CAA4BA,CAiB5C+2C,EAAAuD,SAAA9pD,KAAA,CAfYqC,QAAQ,CAACy6D,CAAD,CAAY,CAE9B,GAAI,CAAAh/D,CAAA,CAAYg/D,CAAZ,CAAJ,CAAA,CAEA,IAAIl9C,EAAO,EAEPk9C,EAAJ,EACElhE,CAAA,CAAQkhE,CAAA79D,MAAA,CAAgByH,CAAhB,CAAR,CAAoC,QAAQ,CAAC/J,CAAD,CAAQ,CAC9CA,CAAJ,EAAWijB,CAAA5f,KAAA,CAAUoiE,CAAA,CAAa/rD,CAAA,CAAK1Z,CAAL,CAAb,CAA2BA,CAArC,CADuC,CAApD,CAKF,OAAOijB,EAVP,CAF8B,CAehC,CACA2mC,EAAAgB,YAAAvnD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,MAAIhB,EAAA,CAAQgB,CAAR,CAAJ,CACSA,CAAA8G,KAAA,CAAW+L,CAAX,CADT,CAIOtU,CAL6B,CAAtC,CASAqrD,EAAAiB,SAAA,CAAgBiW,QAAQ,CAAC9gE,CAAD,CAAQ,CAC9B,MAAO,CAACA,CAAR,EAAiB,CAACA,CAAApB,OADY,CAhCS,CAJtC,CADwB,CAz0FjC,CAs3FI8mE,GAAwB,oBAt3F5B,CAg7FI5xD,GAAmBA,QAAQ,EAAG,CAChC,MAAO,CACLmY,SAAU,GADL,CAELF,SAAU,GAFL,CAGLjjB,QAASA,QAAQ,CAACo3C,CAAD,CAAMylB,CAAN,CAAe,CAC9B,MAAID,GAAAv8D,KAAA,CAA2Bw8D,CAAA9xD,QAA3B,CAAJ,CACS+xD,QAA4B,CAAC/8D,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB,CACpDA,CAAA40B,KAAA,CAAU,OAAV,CAAmBjuB,CAAAsyC,MAAA,CAAYj5C,CAAA2R,QAAZ,CAAnB,CADoD,CADxD,CAKSgyD,QAAoB,CAACh9D,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB,CAC5C2G,CAAAjH,OAAA,CAAaM,CAAA2R,QAAb;AAA2BiyD,QAAyB,CAAC9lE,CAAD,CAAQ,CAC1DkC,CAAA40B,KAAA,CAAU,OAAV,CAAmB92B,CAAnB,CAD0D,CAA5D,CAD4C,CANlB,CAH3B,CADyB,CAh7FlC,CA0lGIgU,GAA0BA,QAAQ,EAAG,CACvC,MAAO,CACLiY,SAAU,GADL,CAELthB,WAAY,CAAC,QAAD,CAAW,QAAX,CAAqB,QAAQ,CAACmoB,CAAD,CAASC,CAAT,CAAiB,CACxD,IAAIgzC,EAAO,IACX,KAAA/Y,SAAA,CAAgBl6B,CAAAqoB,MAAA,CAAapoB,CAAAhf,eAAb,CAEZ,KAAAi5C,SAAAkY,SAAJ,GAA+B3mE,CAA/B,EACE,IAAAyuD,SAAAsX,gBAEA,CAFgC,CAAA,CAEhC,CAAA,IAAAtX,SAAAkY,SAAA,CAAyBxrD,CAAA,CAAK,IAAAszC,SAAAkY,SAAA9+D,QAAA,CAA+B+4D,EAA/B,CAA+C,QAAQ,EAAG,CACtF4G,CAAA/Y,SAAAsX,gBAAA,CAAgC,CAAA,CAChC,OAAO,GAF+E,CAA1D,CAAL,CAH3B,EAQE,IAAAtX,SAAAsX,gBARF,CAQkC,CAAA,CAZsB,CAA9C,CAFP,CADgC,CA1lGzC,CA0wGIx0D,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACk2D,CAAD,CAAW,CACpD,MAAO,CACL/5C,SAAU,IADL,CAELnjB,QAASm9D,QAAsB,CAACC,CAAD,CAAkB,CAC/CF,CAAAvtC,kBAAA,CAA2BytC,CAA3B,CACA,OAAOC,SAAmB,CAACt9D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAC/C8jE,CAAArtC,iBAAA,CAA0Bn2B,CAA1B;AAAmCN,CAAA2N,OAAnC,CACArN,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACVqG,EAAAjH,OAAA,CAAaM,CAAA2N,OAAb,CAA0Bu2D,QAA0B,CAACpmE,CAAD,CAAQ,CAC1DwC,CAAA+W,YAAA,CAAsBvZ,CAAA,GAAUzB,CAAV,CAAsB,EAAtB,CAA2ByB,CADS,CAA5D,CAH+C,CAFF,CAF5C,CAD6C,CAAhC,CA1wGtB,CA80GIkQ,GAA0B,CAAC,cAAD,CAAiB,UAAjB,CAA6B,QAAQ,CAACkF,CAAD,CAAe4wD,CAAf,CAAyB,CAC1F,MAAO,CACLl9D,QAASu9D,QAA8B,CAACH,CAAD,CAAkB,CACvDF,CAAAvtC,kBAAA,CAA2BytC,CAA3B,CACA,OAAOI,SAA2B,CAACz9D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnDk2B,CAAAA,CAAgBhjB,CAAA,CAAa5S,CAAAN,KAAA,CAAaA,CAAA+tB,MAAAhgB,eAAb,CAAb,CACpB+1D,EAAArtC,iBAAA,CAA0Bn2B,CAA1B,CAAmC41B,CAAAQ,YAAnC,CACAp2B,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACVN,EAAA2xB,SAAA,CAAc,gBAAd,CAAgC,QAAQ,CAAC7zB,CAAD,CAAQ,CAC9CwC,CAAA+W,YAAA,CAAsBvZ,CAAA,GAAUzB,CAAV,CAAsB,EAAtB,CAA2ByB,CADH,CAAhD,CAJuD,CAFF,CADpD,CADmF,CAA9D,CA90G9B,CA84GIgQ,GAAsB,CAAC,MAAD,CAAS,QAAT,CAAmB,UAAnB,CAA+B,QAAQ,CAACwG,CAAD,CAAOR,CAAP,CAAegwD,CAAf,CAAyB,CACxF,MAAO,CACL/5C,SAAU,GADL,CAELnjB,QAASy9D,QAA0B,CAACC,CAAD,CAAWzvC,CAAX,CAAmB,CACpD,IAAI0vC,EAAmBzwD,CAAA,CAAO+gB,CAAAhnB,WAAP,CAAvB,CACI22D,EAAkB1wD,CAAA,CAAO+gB,CAAAhnB,WAAP,CAA0B42D,QAAuB,CAAC3mE,CAAD,CAAQ,CAC7E,MAAOwB,CAACxB,CAADwB,EAAU,EAAVA,UAAA,EADsE,CAAzD,CAGtBwkE;CAAAvtC,kBAAA,CAA2B+tC,CAA3B,CAEA,OAAOI,SAAuB,CAAC/9D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnD8jE,CAAArtC,iBAAA,CAA0Bn2B,CAA1B,CAAmCN,CAAA6N,WAAnC,CAEAlH,EAAAjH,OAAA,CAAa8kE,CAAb,CAA8BG,QAA8B,EAAG,CAG7DrkE,CAAA0D,KAAA,CAAasQ,CAAAswD,eAAA,CAAoBL,CAAA,CAAiB59D,CAAjB,CAApB,CAAb,EAA6D,EAA7D,CAH6D,CAA/D,CAHmD,CAPD,CAFjD,CADiF,CAAhE,CA94G1B,CAuqHIuH,GAAmB8+C,EAAA,CAAe,EAAf,CAAmB,CAAA,CAAnB,CAvqHvB,CAutHI1+C,GAAsB0+C,EAAA,CAAe,KAAf,CAAsB,CAAtB,CAvtH1B,CAuwHI5+C,GAAuB4+C,EAAA,CAAe,MAAf,CAAuB,CAAvB,CAvwH3B,CAi0HIx+C,GAAmBo3C,EAAA,CAAY,CACjCh/C,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CAC/BA,CAAA40B,KAAA,CAAU,SAAV,CAAqBv4B,CAArB,CACAiE,EAAAqc,YAAA,CAAoB,UAApB,CAF+B,CADA,CAAZ,CAj0HvB,CA0iIIjO,GAAwB,CAAC,QAAQ,EAAG,CACtC,MAAO,CACLqb,SAAU,GADL,CAELpjB,MAAO,CAAA,CAFF,CAGL8B,WAAY,GAHP,CAILohB,SAAU,GAJL,CAD+B,CAAZ,CA1iI5B,CAowII5X,GAAoB,EApwIxB,CAywII4yD,GAAmB,CACrB,KAAQ,CAAA,CADa,CAErB,MAAS,CAAA,CAFY,CAIvB9nE,EAAA,CACE,6IAAA,MAAA,CAAA,GAAA,CADF;AAEE,QAAQ,CAACu8C,CAAD,CAAY,CAClB,IAAI9wB,EAAgByF,EAAA,CAAmB,KAAnB,CAA2BqrB,CAA3B,CACpBrnC,GAAA,CAAkBuW,CAAlB,CAAA,CAAmC,CAAC,QAAD,CAAW,YAAX,CAAyB,QAAQ,CAAC1U,CAAD,CAASE,CAAT,CAAqB,CACvF,MAAO,CACL+V,SAAU,GADL,CAELnjB,QAASA,QAAQ,CAAC6jB,CAAD,CAAWzqB,CAAX,CAAiB,CAKhC,IAAI4C,EAAKkR,CAAA,CAAO9T,CAAA,CAAKwoB,CAAL,CAAP,CAAgD,IAAhD,CAA4E,CAAA,CAA5E,CACT,OAAOs8C,SAAuB,CAACn+D,CAAD,CAAQrG,CAAR,CAAiB,CAC7CA,CAAAgI,GAAA,CAAWgxC,CAAX,CAAsB,QAAQ,CAAC79B,CAAD,CAAQ,CACpC,IAAI+I,EAAWA,QAAQ,EAAG,CACxB5hB,CAAA,CAAG+D,CAAH,CAAU,CAACo+D,OAAOtpD,CAAR,CAAV,CADwB,CAGtBopD,GAAA,CAAiBvrB,CAAjB,CAAJ,EAAmCtlC,CAAAkrB,QAAnC,CACEv4B,CAAAlH,WAAA,CAAiB+kB,CAAjB,CADF,CAGE7d,CAAAE,OAAA,CAAa2d,CAAb,CAPkC,CAAtC,CAD6C,CANf,CAF7B,CADgF,CAAtD,CAFjB,CAFtB,CAmgBA,KAAIxV,GAAgB,CAAC,UAAD,CAAa,QAAQ,CAACoD,CAAD,CAAW,CAClD,MAAO,CACLuc,aAAc,CAAA,CADT,CAEL/B,WAAY,SAFP,CAGL/C,SAAU,GAHL,CAILwD,SAAU,CAAA,CAJL,CAKLtD,SAAU,GALL,CAMLuJ,MAAO,CAAA,CANF,CAOLnM,KAAMA,QAAQ,CAACyJ,CAAD,CAASnG,CAAT,CAAmBsD,CAAnB,CAA0B25B,CAA1B,CAAgC52B,CAAhC,CAA6C,CAAA,IACnD9kB,CADmD,CAC5CkgB,CAD4C,CAChC84C,CACvBp0C,EAAAlxB,OAAA,CAAcquB,CAAAhf,KAAd,CAA0Bk2D,QAAwB,CAACnnE,CAAD,CAAQ,CAEpDA,CAAJ,CACOouB,CADP,EAEI4E,CAAA,CAAY,QAAQ,CAACntB,CAAD,CAAQuhE,CAAR,CAAkB,CACpCh5C,CAAA,CAAag5C,CACbvhE,EAAA,CAAMA,CAAAjH,OAAA,EAAN,CAAA,CAAwBN,CAAAm3B,cAAA,CAAuB,aAAvB;AAAuCxF,CAAAhf,KAAvC,CAAoD,GAApD,CAIxB/C,EAAA,CAAQ,CACNrI,MAAOA,CADD,CAGRyO,EAAA4gD,MAAA,CAAervD,CAAf,CAAsB8mB,CAAA9P,OAAA,EAAtB,CAAyC8P,CAAzC,CAToC,CAAtC,CAFJ,EAeMu6C,CAQJ,GAPEA,CAAAh9C,OAAA,EACA,CAAAg9C,CAAA,CAAmB,IAMrB,EAJI94C,CAIJ,GAHEA,CAAAhjB,SAAA,EACA,CAAAgjB,CAAA,CAAa,IAEf,EAAIlgB,CAAJ,GACEg5D,CAIA,CAJmB/6D,EAAA,CAAc+B,CAAArI,MAAd,CAInB,CAHAyO,CAAA6gD,MAAA,CAAe+R,CAAf,CAAA3vC,KAAA,CAAsC,QAAQ,EAAG,CAC/C2vC,CAAA,CAAmB,IAD4B,CAAjD,CAGA,CAAAh5D,CAAA,CAAQ,IALV,CAvBF,CAFwD,CAA1D,CAFuD,CAPtD,CAD2C,CAAhC,CAApB,CAkOIkD,GAAqB,CAAC,kBAAD,CAAqB,eAArB,CAAsC,UAAtC,CAAkD,MAAlD,CACP,QAAQ,CAAC4F,CAAD,CAAqB5C,CAArB,CAAsCE,CAAtC,CAAkDkC,CAAlD,CAAwD,CAChF,MAAO,CACLyV,SAAU,KADL,CAELF,SAAU,GAFL,CAGLwD,SAAU,CAAA,CAHL,CAILT,WAAY,SAJP,CAKLnkB,WAAYvB,EAAArI,KALP,CAML+H,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CAAA,IAC3BmlE,EAASnlE,CAAAiP,UAATk2D,EAA2BnlE,CAAA8B,IADA,CAE3BsjE,EAAYplE,CAAAuhC,OAAZ6jC,EAA2B,EAFA,CAG3BC,EAAgBrlE,CAAAslE,WAEpB,OAAO,SAAQ,CAAC3+D,CAAD,CAAQ8jB,CAAR,CAAkBsD,CAAlB,CAAyB25B,CAAzB,CAA+B52B,CAA/B,CAA4C,CAAA,IACrDy0C,EAAgB,CADqC,CAErDzrB,CAFqD,CAGrD0rB,CAHqD,CAIrDC,CAJqD,CAMrDC,EAA4BA,QAAQ,EAAG,CACrCF,CAAJ,GACEA,CAAAx9C,OAAA,EACA,CAAAw9C,CAAA,CAAkB,IAFpB,CAII1rB,EAAJ,GACEA,CAAA5wC,SAAA,EACA;AAAA4wC,CAAA,CAAe,IAFjB,CAII2rB,EAAJ,GACErzD,CAAA6gD,MAAA,CAAewS,CAAf,CAAApwC,KAAA,CAAoC,QAAQ,EAAG,CAC7CmwC,CAAA,CAAkB,IAD2B,CAA/C,CAIA,CADAA,CACA,CADkBC,CAClB,CAAAA,CAAA,CAAiB,IALnB,CATyC,CAkB3C9+D,EAAAjH,OAAA,CAAa4U,CAAAqxD,mBAAA,CAAwBR,CAAxB,CAAb,CAA8CS,QAA6B,CAAC9jE,CAAD,CAAM,CAC/E,IAAI+jE,EAAiBA,QAAQ,EAAG,CAC1B,CAAA3mE,CAAA,CAAUmmE,CAAV,CAAJ,EAAkCA,CAAlC,EAAmD,CAAA1+D,CAAAsyC,MAAA,CAAYosB,CAAZ,CAAnD,EACEnzD,CAAA,EAF4B,CAAhC,CAKI4zD,EAAe,EAAEP,CAEjBzjE,EAAJ,EAGEgT,CAAA,CAAiBhT,CAAjB,CAAsB,CAAA,CAAtB,CAAAuzB,KAAA,CAAiC,QAAQ,CAACwH,CAAD,CAAW,CAClD,GAAIipC,CAAJ,GAAqBP,CAArB,CAAA,CACA,IAAIL,EAAWv+D,CAAA8lB,KAAA,EACfi7B,EAAAl1B,SAAA,CAAgBqK,CAQZl5B,EAAAA,CAAQmtB,CAAA,CAAYo0C,CAAZ,CAAsB,QAAQ,CAACvhE,CAAD,CAAQ,CAChD+hE,CAAA,EACAtzD,EAAA4gD,MAAA,CAAervD,CAAf,CAAsB,IAAtB,CAA4B8mB,CAA5B,CAAA4K,KAAA,CAA2CwwC,CAA3C,CAFgD,CAAtC,CAKZ/rB,EAAA,CAAeorB,CACfO,EAAA,CAAiB9hE,CAEjBm2C,EAAAH,MAAA,CAAmB,uBAAnB,CAA4C73C,CAA5C,CACA6E,EAAAsyC,MAAA,CAAYmsB,CAAZ,CAnBA,CADkD,CAApD,CAqBG,QAAQ,EAAG,CACRU,CAAJ,GAAqBP,CAArB,GACEG,CAAA,EACA,CAAA/+D,CAAAgzC,MAAA,CAAY,sBAAZ,CAAoC73C,CAApC,CAFF,CADY,CArBd,CA2BA,CAAA6E,CAAAgzC,MAAA,CAAY,0BAAZ,CAAwC73C,CAAxC,CA9BF,GAgCE4jE,CAAA,EACA,CAAAhe,CAAAl1B,SAAA,CAAgB,IAjClB,CAR+E,CAAjF,CAxByD,CAL5B,CAN5B,CADyE,CADzD,CAlOzB,CA6TIzgB,GAAgC,CAAC,UAAD,CAClC,QAAQ,CAAC+xD,CAAD,CAAW,CACjB,MAAO,CACL/5C,SAAU,KADL;AAELF,SAAW,IAFN,CAGLC,QAAS,WAHJ,CAIL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQ8jB,CAAR,CAAkBsD,CAAlB,CAAyB25B,CAAzB,CAA+B,CACvC,KAAAzgD,KAAA,CAAWwjB,CAAA,CAAS,CAAT,CAAAnrB,SAAA,EAAX,CAAJ,EAIEmrB,CAAA7mB,MAAA,EACA,CAAAkgE,CAAA,CAAS1tD,EAAA,CAAoBsxC,CAAAl1B,SAApB,CAAmCp2B,CAAnC,CAAA+a,WAAT,CAAA,CAAkExQ,CAAlE,CACIo/D,QAA8B,CAACpiE,CAAD,CAAQ,CACxC8mB,CAAA1mB,OAAA,CAAgBJ,CAAhB,CADwC,CAD1C,CAGG,CAAC8nB,oBAAqBhB,CAAtB,CAHH,CALF,GAYAA,CAAAzmB,KAAA,CAAc0jD,CAAAl1B,SAAd,CACA,CAAAsxC,CAAA,CAASr5C,CAAAiJ,SAAA,EAAT,CAAA,CAA8B/sB,CAA9B,CAbA,CAD2C,CAJxC,CADU,CADe,CA7TpC,CA8YIyI,GAAkBw2C,EAAA,CAAY,CAChC/7B,SAAU,GADsB,CAEhCjjB,QAASA,QAAQ,EAAG,CAClB,MAAO,CACLipB,IAAKA,QAAQ,CAAClpB,CAAD,CAAQrG,CAAR,CAAiBysB,CAAjB,CAAwB,CACnCpmB,CAAAsyC,MAAA,CAAYlsB,CAAA5d,OAAZ,CADmC,CADhC,CADW,CAFY,CAAZ,CA9YtB,CAybIG,GAAyBs2C,EAAA,CAAY,CAAEv4B,SAAU,CAAA,CAAZ,CAAkBxD,SAAU,GAA5B,CAAZ,CAzb7B,CAumBIra,GAAuB,CAAC,SAAD,CAAY,cAAZ,CAA4B,QAAQ,CAACyxC,CAAD,CAAU/tC,CAAV,CAAwB,CAAA,IACjF8yD,EAAQ,KADyE,CAEjFC,EAAU,oBAEd,OAAO,CACLl8C,SAAU,IADL,CAEL5C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CA2CnCkmE,QAASA,EAAiB,CAACC,CAAD,CAAU,CAClC7lE,CAAA21B,KAAA,CAAakwC,CAAb,EAAwB,EAAxB,CADkC,CA3CD,IAC/BC;AAAYpmE,CAAA+jC,MADmB,CAE/BsiC,EAAUrmE,CAAA+tB,MAAAkQ,KAAVooC,EAA6B/lE,CAAAN,KAAA,CAAaA,CAAA+tB,MAAAkQ,KAAb,CAFE,CAG/BloB,EAAS/V,CAAA+V,OAATA,EAAwB,CAHO,CAI/BuwD,EAAQ3/D,CAAAsyC,MAAA,CAAYotB,CAAZ,CAARC,EAAgC,EAJD,CAK/BC,EAAc,EALiB,CAM/BhtC,EAAcrmB,CAAAqmB,YAAA,EANiB,CAO/BC,EAAYtmB,CAAAsmB,UAAA,EAPmB,CAQ/BgtC,EAAmBjtC,CAAnBitC,CAAiCJ,CAAjCI,CAA6C,GAA7CA,CAAmDzwD,CAAnDywD,CAA4DhtC,CAR7B,CAS/BitC,EAAev/D,EAAArI,KATgB,CAU/B6nE,CAEJ3pE,EAAA,CAAQiD,CAAR,CAAc,QAAQ,CAAC46B,CAAD,CAAa+rC,CAAb,CAA4B,CAChD,IAAIC,EAAWX,CAAArvD,KAAA,CAAa+vD,CAAb,CACXC,EAAJ,GACMC,CACJ,EADeD,CAAA,CAAS,CAAT,CAAA,CAAc,GAAd,CAAoB,EACnC,EADyCrmE,CAAA,CAAUqmE,CAAA,CAAS,CAAT,CAAV,CACzC,CAAAN,CAAA,CAAMO,CAAN,CAAA,CAAiBvmE,CAAAN,KAAA,CAAaA,CAAA+tB,MAAA,CAAW44C,CAAX,CAAb,CAFnB,CAFgD,CAAlD,CAOA5pE,EAAA,CAAQupE,CAAR,CAAe,QAAQ,CAAC1rC,CAAD,CAAa19B,CAAb,CAAkB,CACvCqpE,CAAA,CAAYrpE,CAAZ,CAAA,CAAmBgW,CAAA,CAAa0nB,CAAA12B,QAAA,CAAmB8hE,CAAnB,CAA0BQ,CAA1B,CAAb,CADoB,CAAzC,CAKA7/D,EAAAjH,OAAA,CAAa0mE,CAAb,CAAwBU,QAA+B,CAAC3kD,CAAD,CAAS,CAC1D4hB,CAAAA,CAAQke,UAAA,CAAW9/B,CAAX,CACZ,KAAI4kD,EAAa7tB,KAAA,CAAMnV,CAAN,CAEZgjC,EAAL,EAAqBhjC,CAArB,GAA8BuiC,EAA9B,GAGEviC,CAHF,CAGUkd,CAAA5a,UAAA,CAAkBtC,CAAlB,CAA0BhuB,CAA1B,CAHV,CAQKguB,EAAL,GAAe2iC,CAAf,EAA+BK,CAA/B,EAA6C7tB,KAAA,CAAMwtB,CAAN,CAA7C,GACED,CAAA,EAEA,CADAA,CACA,CADe9/D,CAAAjH,OAAA,CAAa6mE,CAAA,CAAYxiC,CAAZ,CAAb,CAAiCmiC,CAAjC,CACf,CAAAQ,CAAA,CAAY3iC,CAHd,CAZ8D,CAAhE,CAxBmC,CAFhC,CAJ8E,CAA5D,CAvmB3B,CA+2BIr0B,GAAoB,CAAC,QAAD,CAAW,UAAX,CAAuB,QAAQ,CAACoE,CAAD,CAAS1B,CAAT,CAAmB,CAExE,IAAI40D,EAAiB1qE,CAAA,CAAO,UAAP,CAArB,CAEI2qE,EAAcA,QAAQ,CAACtgE,CAAD,CAAQjG,CAAR,CAAewmE,CAAf,CAAgCppE,CAAhC,CAAuCqpE,CAAvC,CAAsDjqE,CAAtD,CAA2DkqE,CAA3D,CAAwE,CAEhGzgE,CAAA,CAAMugE,CAAN,CAAA;AAAyBppE,CACrBqpE,EAAJ,GAAmBxgE,CAAA,CAAMwgE,CAAN,CAAnB,CAA0CjqE,CAA1C,CACAyJ,EAAA4mD,OAAA,CAAe7sD,CACfiG,EAAA0gE,OAAA,CAA0B,CAA1B,GAAgB3mE,CAChBiG,EAAA2gE,MAAA,CAAe5mE,CAAf,GAA0B0mE,CAA1B,CAAwC,CACxCzgE,EAAA4gE,QAAA,CAAgB,EAAE5gE,CAAA0gE,OAAF,EAAkB1gE,CAAA2gE,MAAlB,CAEhB3gE,EAAA6gE,KAAA,CAAa,EAAE7gE,CAAA8gE,MAAF,CAA8B,CAA9B,IAAiB/mE,CAAjB,CAAuB,CAAvB,EATmF,CAsBlG,OAAO,CACLqpB,SAAU,GADL,CAEL4E,aAAc,CAAA,CAFT,CAGL/B,WAAY,SAHP,CAIL/C,SAAU,GAJL,CAKLwD,SAAU,CAAA,CALL,CAMLiG,MAAO,CAAA,CANF,CAOL1sB,QAAS8gE,QAAwB,CAACj9C,CAAD,CAAWsD,CAAX,CAAkB,CACjD,IAAI6M,EAAa7M,CAAAte,SAAjB,CACIk4D,EAAqBvrE,CAAAm3B,cAAA,CAAuB,iBAAvB,CAA2CqH,CAA3C,CAAwD,GAAxD,CADzB,CAGIp5B,EAAQo5B,CAAAp5B,MAAA,CAAiB,4FAAjB,CAEZ,IAAKA,CAAAA,CAAL,CACE,KAAMwlE,EAAA,CAAe,MAAf,CACFpsC,CADE,CAAN,CAIF,IAAIgtC,EAAMpmE,CAAA,CAAM,CAAN,CAAV,CACIqmE,EAAMrmE,CAAA,CAAM,CAAN,CADV,CAEIsmE,EAAUtmE,CAAA,CAAM,CAAN,CAFd,CAGIumE,EAAavmE,CAAA,CAAM,CAAN,CAHjB,CAKAA,EAAQomE,CAAApmE,MAAA,CAAU,+CAAV,CAER;GAAKA,CAAAA,CAAL,CACE,KAAMwlE,EAAA,CAAe,QAAf,CACFY,CADE,CAAN,CAGF,IAAIV,EAAkB1lE,CAAA,CAAM,CAAN,CAAlB0lE,EAA8B1lE,CAAA,CAAM,CAAN,CAAlC,CACI2lE,EAAgB3lE,CAAA,CAAM,CAAN,CAEpB,IAAIsmE,CAAJ,GAAiB,CAAA,4BAAA7gE,KAAA,CAAkC6gE,CAAlC,CAAjB,EACI,+EAAA7gE,KAAA,CAAqF6gE,CAArF,CADJ,EAEE,KAAMd,EAAA,CAAe,UAAf,CACJc,CADI,CAAN,CA3B+C,IA+B7CE,CA/B6C,CA+B3BC,CA/B2B,CA+BXC,CA/BW,CA+BOC,CA/BP,CAgC7CC,EAAe,CAAChzB,IAAKx4B,EAAN,CAEfmrD,EAAJ,CACEC,CADF,CACqBl0D,CAAA,CAAOi0D,CAAP,CADrB,EAGEG,CAGA,CAHmBA,QAAQ,CAAChrE,CAAD,CAAMY,CAAN,CAAa,CACtC,MAAO8e,GAAA,CAAQ9e,CAAR,CAD+B,CAGxC,CAAAqqE,CAAA,CAAiBA,QAAQ,CAACjrE,CAAD,CAAM,CAC7B,MAAOA,EADsB,CANjC,CAWA,OAAOmrE,SAAqB,CAACz3C,CAAD,CAASnG,CAAT,CAAmBsD,CAAnB,CAA0B25B,CAA1B,CAAgC52B,CAAhC,CAA6C,CAEnEk3C,CAAJ,GACEC,CADF,CACmBA,QAAQ,CAAC/qE,CAAD,CAAMY,CAAN,CAAa4C,CAAb,CAAoB,CAEvCymE,CAAJ,GAAmBiB,CAAA,CAAajB,CAAb,CAAnB,CAAiDjqE,CAAjD,CACAkrE,EAAA,CAAalB,CAAb,CAAA,CAAgCppE,CAChCsqE,EAAA7a,OAAA,CAAsB7sD,CACtB,OAAOsnE,EAAA,CAAiBp3C,CAAjB,CAAyBw3C,CAAzB,CALoC,CAD/C,CAkBA,KAAIE,EAAeh+D,EAAA,EAGnBsmB,EAAAyB,iBAAA,CAAwBw1C,CAAxB,CAA6BU,QAAuB,CAACx/C,CAAD,CAAa,CAAA,IAC3DroB,CAD2D,CACpDhE,CADoD,CAE3D8rE,EAAe/9C,CAAA,CAAS,CAAT,CAF4C,CAI3Dg+C,CAJ2D,CAO3DC,EAAep+D,EAAA,EAP4C,CAQ3Dq+D,CAR2D,CAS3DzrE,CAT2D,CAStDY,CATsD,CAU3D8qE,CAV2D,CAY3DC,CAZ2D,CAa3D78D,CAb2D,CAc3D88D,CAGAhB,EAAJ,GACEl3C,CAAA,CAAOk3C,CAAP,CADF,CACoB/+C,CADpB,CAIA,IAAIxsB,EAAA,CAAYwsB,CAAZ,CAAJ,CACE8/C,CACA,CADiB9/C,CACjB,CAAAggD,CAAA,CAAcd,CAAd;AAAgCC,CAFlC,KAGO,CACLa,CAAA,CAAcd,CAAd,EAAgCE,CAEhCU,EAAA,CAAiB,EACjB,KAASG,CAAT,GAAoBjgD,EAApB,CACMA,CAAA3rB,eAAA,CAA0B4rE,CAA1B,CAAJ,EAA+D,GAA/D,EAA0CA,CAAAjnE,OAAA,CAAe,CAAf,CAA1C,EACE8mE,CAAA1nE,KAAA,CAAoB6nE,CAApB,CAGJH,EAAAnrE,KAAA,EATK,CAYPirE,CAAA,CAAmBE,CAAAnsE,OACnBosE,EAAA,CAAqB9nD,KAAJ,CAAU2nD,CAAV,CAGjB,KAAKjoE,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwBioE,CAAxB,CAA0CjoE,CAAA,EAA1C,CAIE,GAHAxD,CAGI,CAHG6rB,CAAD,GAAgB8/C,CAAhB,CAAkCnoE,CAAlC,CAA0CmoE,CAAA,CAAenoE,CAAf,CAG5C,CAFJ5C,CAEI,CAFIirB,CAAA,CAAW7rB,CAAX,CAEJ,CADJ0rE,CACI,CADQG,CAAA,CAAY7rE,CAAZ,CAAiBY,CAAjB,CAAwB4C,CAAxB,CACR,CAAA4nE,CAAA,CAAaM,CAAb,CAAJ,CAEE58D,CAGA,CAHQs8D,CAAA,CAAaM,CAAb,CAGR,CAFA,OAAON,CAAA,CAAaM,CAAb,CAEP,CADAF,CAAA,CAAaE,CAAb,CACA,CAD0B58D,CAC1B,CAAA88D,CAAA,CAAepoE,CAAf,CAAA,CAAwBsL,CAL1B,KAMO,CAAA,GAAI08D,CAAA,CAAaE,CAAb,CAAJ,CAKL,KAHA7rE,EAAA,CAAQ+rE,CAAR,CAAwB,QAAQ,CAAC98D,CAAD,CAAQ,CAClCA,CAAJ,EAAaA,CAAArF,MAAb,GAA0B2hE,CAAA,CAAat8D,CAAA0b,GAAb,CAA1B,CAAmD1b,CAAnD,CADsC,CAAxC,CAGM,CAAAg7D,CAAA,CAAe,OAAf,CAEFpsC,CAFE,CAEUguC,CAFV,CAEqB9qE,CAFrB,CAAN,CAKAgrE,CAAA,CAAepoE,CAAf,CAAA,CAAwB,CAACgnB,GAAIkhD,CAAL,CAAgBjiE,MAAOtK,CAAvB,CAAkCsH,MAAOtH,CAAzC,CACxBqsE,EAAA,CAAaE,CAAb,CAAA,CAA0B,CAAA,CAXrB,CAgBT,IAASK,CAAT,GAAqBX,EAArB,CAAmC,CACjCt8D,CAAA,CAAQs8D,CAAA,CAAaW,CAAb,CACR1xC,EAAA,CAAmBttB,EAAA,CAAc+B,CAAArI,MAAd,CACnByO,EAAA6gD,MAAA,CAAe17B,CAAf,CACA,IAAIA,CAAA,CAAiB,CAAjB,CAAAnd,WAAJ,CAGE,IAAK1Z,CAAW,CAAH,CAAG,CAAAhE,CAAA,CAAS66B,CAAA76B,OAAzB,CAAkDgE,CAAlD,CAA0DhE,CAA1D,CAAkEgE,CAAA,EAAlE,CACE62B,CAAA,CAAiB72B,CAAjB,CAAA,aAAA,CAAsC,CAAA,CAG1CsL,EAAArF,MAAAuC,SAAA,EAXiC,CAenC,IAAKxI,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwBioE,CAAxB,CAA0CjoE,CAAA,EAA1C,CAKE,GAJAxD,CAIIyJ,CAJGoiB,CAAD,GAAgB8/C,CAAhB,CAAkCnoE,CAAlC,CAA0CmoE,CAAA,CAAenoE,CAAf,CAI5CiG,CAHJ7I,CAGI6I,CAHIoiB,CAAA,CAAW7rB,CAAX,CAGJyJ,CAFJqF,CAEIrF,CAFImiE,CAAA,CAAepoE,CAAf,CAEJiG,CAAAqF,CAAArF,MAAJ,CAAiB,CAIf8hE,CAAA;AAAWD,CAGX,GACEC,EAAA,CAAWA,CAAAp+D,YADb,OAESo+D,CAFT,EAEqBA,CAAA,aAFrB,CAIkBz8D,EApLrBrI,MAAA,CAAY,CAAZ,CAoLG,EAA4B8kE,CAA5B,EAEEr2D,CAAA8gD,KAAA,CAAcjpD,EAAA,CAAc+B,CAAArI,MAAd,CAAd,CAA0C,IAA1C,CAAgDD,CAAA,CAAO8kE,CAAP,CAAhD,CAEFA,EAAA,CAA2Bx8D,CApL9BrI,MAAA,CAoL8BqI,CApLlBrI,MAAAjH,OAAZ,CAAiC,CAAjC,CAqLGuqE,EAAA,CAAYj7D,CAAArF,MAAZ,CAAyBjG,CAAzB,CAAgCwmE,CAAhC,CAAiDppE,CAAjD,CAAwDqpE,CAAxD,CAAuEjqE,CAAvE,CAA4EyrE,CAA5E,CAhBe,CAAjB,IAmBE73C,EAAA,CAAYo4C,QAA2B,CAACvlE,CAAD,CAAQgD,CAAR,CAAe,CACpDqF,CAAArF,MAAA,CAAcA,CAEd,KAAIwD,EAAUw9D,CAAA7vD,UAAA,CAA6B,CAAA,CAA7B,CACdnU,EAAA,CAAMA,CAAAjH,OAAA,EAAN,CAAA,CAAwByN,CAGxBiI,EAAA4gD,MAAA,CAAervD,CAAf,CAAsB,IAAtB,CAA4BD,CAAA,CAAO8kE,CAAP,CAA5B,CACAA,EAAA,CAAer+D,CAIf6B,EAAArI,MAAA,CAAcA,CACd+kE,EAAA,CAAa18D,CAAA0b,GAAb,CAAA,CAAyB1b,CACzBi7D,EAAA,CAAYj7D,CAAArF,MAAZ,CAAyBjG,CAAzB,CAAgCwmE,CAAhC,CAAiDppE,CAAjD,CAAwDqpE,CAAxD,CAAuEjqE,CAAvE,CAA4EyrE,CAA5E,CAdoD,CAAtD,CAkBJL,EAAA,CAAeI,CA3HgD,CAAjE,CAvBuE,CA7CxB,CAP9C,CA1BiE,CAAlD,CA/2BxB,CAmvCI94D,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACwC,CAAD,CAAW,CACpD,MAAO,CACL2X,SAAU,GADL,CAEL4E,aAAc,CAAA,CAFT,CAGLxH,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnC2G,CAAAjH,OAAA,CAAaM,CAAA2P,OAAb,CAA0Bw5D,QAA0B,CAACrrE,CAAD,CAAQ,CAK1DsU,CAAA,CAAStU,CAAA,CAAQ,aAAR,CAAwB,UAAjC,CAAA,CAA6CwC,CAA7C,CAvKY8oE,SAuKZ,CAAqE,CACnEC,YAvKsBC,iBAsK6C,CAArE,CAL0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CAnvCtB,CAo5CIx6D,GAAkB,CAAC,UAAD;AAAa,QAAQ,CAACsD,CAAD,CAAW,CACpD,MAAO,CACL2X,SAAU,GADL,CAEL4E,aAAc,CAAA,CAFT,CAGLxH,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnC2G,CAAAjH,OAAA,CAAaM,CAAA6O,OAAb,CAA0B06D,QAA0B,CAACzrE,CAAD,CAAQ,CAG1DsU,CAAA,CAAStU,CAAA,CAAQ,UAAR,CAAqB,aAA9B,CAAA,CAA6CwC,CAA7C,CAtUY8oE,SAsUZ,CAAoE,CAClEC,YAtUsBC,iBAqU4C,CAApE,CAH0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CAp5CtB,CAk9CIx5D,GAAmB81C,EAAA,CAAY,QAAQ,CAACj/C,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAChE2G,CAAAjH,OAAA,CAAaM,CAAA6P,QAAb,CAA2B25D,QAA2B,CAACC,CAAD,CAAYC,CAAZ,CAAuB,CACvEA,CAAJ,EAAkBD,CAAlB,GAAgCC,CAAhC,EACE3sE,CAAA,CAAQ2sE,CAAR,CAAmB,QAAQ,CAACzmE,CAAD,CAAMsK,CAAN,CAAa,CAAEjN,CAAA8uD,IAAA,CAAY7hD,CAAZ,CAAmB,EAAnB,CAAF,CAAxC,CAEEk8D,EAAJ,EAAenpE,CAAA8uD,IAAA,CAAYqa,CAAZ,CAJ4D,CAA7E,CAKG,CAAA,CALH,CADgE,CAA3C,CAl9CvB,CA2lDIz5D,GAAoB,CAAC,UAAD,CAAa,QAAQ,CAACoC,CAAD,CAAW,CACtD,MAAO,CACL2X,SAAU,IADL,CAELD,QAAS,UAFJ,CAKLrhB,WAAY,CAAC,QAAD,CAAWkhE,QAA2B,EAAG,CACpD,IAAAC,MAAA,CAAa,EADuC,CAAzC,CALP,CAQLziD,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB2pE,CAAvB,CAA2C,CAAA,IAEnDE,EAAsB,EAF6B,CAGnDC,EAAmB,EAHgC,CAInDC,EAA0B,EAJyB,CAKnDC,EAAiB,EALkC,CAOnDC,EAAgBA,QAAQ,CAACxpE,CAAD,CAAQC,CAAR,CAAe,CACvC,MAAO,SAAQ,EAAG,CAAED,CAAAG,OAAA,CAAaF,CAAb;AAAoB,CAApB,CAAF,CADqB,CAI3CiG,EAAAjH,OAAA,CAVgBM,CAAA+P,SAUhB,EAViC/P,CAAAsI,GAUjC,CAAwB4hE,QAA4B,CAACpsE,CAAD,CAAQ,CAAA,IACtDH,CADsD,CACnDW,CACFX,EAAA,CAAI,CAAT,KAAYW,CAAZ,CAAiByrE,CAAArtE,OAAjB,CAAiDiB,CAAjD,CAAqDW,CAArD,CAAyD,EAAEX,CAA3D,CACEyU,CAAAoU,OAAA,CAAgBujD,CAAA,CAAwBpsE,CAAxB,CAAhB,CAIGA,EAAA,CAFLosE,CAAArtE,OAEK,CAF4B,CAEjC,KAAY4B,CAAZ,CAAiB0rE,CAAAttE,OAAjB,CAAwCiB,CAAxC,CAA4CW,CAA5C,CAAgD,EAAEX,CAAlD,CAAqD,CACnD,IAAIiyD,EAAW3lD,EAAA,CAAc6/D,CAAA,CAAiBnsE,CAAjB,CAAAgG,MAAd,CACfqmE,EAAA,CAAersE,CAAf,CAAAuL,SAAA,EAEAmsB,EADc00C,CAAA,CAAwBpsE,CAAxB,CACd03B,CAD2CjjB,CAAA6gD,MAAA,CAAerD,CAAf,CAC3Cv6B,MAAA,CAAa40C,CAAA,CAAcF,CAAd,CAAuCpsE,CAAvC,CAAb,CAJmD,CAOrDmsE,CAAAptE,OAAA,CAA0B,CAC1BstE,EAAAttE,OAAA,CAAwB,CAExB,EAAKmtE,CAAL,CAA2BF,CAAAC,MAAA,CAAyB,GAAzB,CAA+B9rE,CAA/B,CAA3B,EAAoE6rE,CAAAC,MAAA,CAAyB,GAAzB,CAApE,GACE7sE,CAAA,CAAQ8sE,CAAR,CAA6B,QAAQ,CAACM,CAAD,CAAqB,CACxDA,CAAAv9C,WAAA,CAA8B,QAAQ,CAACw9C,CAAD,CAAcC,CAAd,CAA6B,CACjEL,CAAA7oE,KAAA,CAAoBkpE,CAApB,CACA,KAAIC,EAASH,CAAA7pE,QACb8pE,EAAA,CAAYA,CAAA1tE,OAAA,EAAZ,CAAA,CAAoCN,CAAAm3B,cAAA,CAAuB,qBAAvB,CAGpCu2C,EAAA3oE,KAAA,CAFY6K,CAAErI,MAAOymE,CAATp+D,CAEZ,CACAoG,EAAA4gD,MAAA,CAAeoX,CAAf,CAA4BE,CAAA3vD,OAAA,EAA5B,CAA6C2vD,CAA7C,CAPiE,CAAnE,CADwD,CAA1D,CAlBwD,CAA5D,CAXuD,CARpD,CAD+C,CAAhC,CA3lDxB,CAkpDIp6D,GAAwB01C,EAAA,CAAY,CACtCh5B,WAAY,SAD0B,CAEtC/C,SAAU,IAF4B,CAGtCC,QAAS,WAH6B,CAItC6E,aAAc,CAAA,CAJwB;AAKtCxH,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBysB,CAAjB,CAAwB26B,CAAxB,CAA8B52B,CAA9B,CAA2C,CACvD42B,CAAAkiB,MAAA,CAAW,GAAX,CAAiB78C,CAAA9c,aAAjB,CAAA,CAAwCy3C,CAAAkiB,MAAA,CAAW,GAAX,CAAiB78C,CAAA9c,aAAjB,CAAxC,EAAgF,EAChFy3C,EAAAkiB,MAAA,CAAW,GAAX,CAAiB78C,CAAA9c,aAAjB,CAAA9O,KAAA,CAA0C,CAAEyrB,WAAYkE,CAAd,CAA2BxwB,QAASA,CAApC,CAA1C,CAFuD,CALnB,CAAZ,CAlpD5B,CA6pDI8P,GAA2Bw1C,EAAA,CAAY,CACzCh5B,WAAY,SAD6B,CAEzC/C,SAAU,IAF+B,CAGzCC,QAAS,WAHgC,CAIzC6E,aAAc,CAAA,CAJ2B,CAKzCxH,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0nD,CAAvB,CAA6B52B,CAA7B,CAA0C,CACtD42B,CAAAkiB,MAAA,CAAW,GAAX,CAAA,CAAmBliB,CAAAkiB,MAAA,CAAW,GAAX,CAAnB,EAAsC,EACtCliB,EAAAkiB,MAAA,CAAW,GAAX,CAAAzoE,KAAA,CAAqB,CAAEyrB,WAAYkE,CAAd,CAA2BxwB,QAASA,CAApC,CAArB,CAFsD,CALf,CAAZ,CA7pD/B,CA8tDIkQ,GAAwBo1C,EAAA,CAAY,CACtC77B,SAAU,KAD4B,CAEtC5C,KAAMA,QAAQ,CAACyJ,CAAD,CAASnG,CAAT,CAAmBoG,CAAnB,CAA2BpoB,CAA3B,CAAuCqoB,CAAvC,CAAoD,CAChE,GAAKA,CAAAA,CAAL,CACE,KAAMx0B,EAAA,CAAO,cAAP,CAAA,CAAuB,QAAvB,CAILmH,EAAA,CAAYgnB,CAAZ,CAJK,CAAN,CAOFqG,CAAA,CAAY,QAAQ,CAACntB,CAAD,CAAQ,CAC1B8mB,CAAA7mB,MAAA,EACA6mB,EAAA1mB,OAAA,CAAgBJ,CAAhB,CAF0B,CAA5B,CATgE,CAF5B,CAAZ,CA9tD5B,CAixDIyJ,GAAkB,CAAC,gBAAD,CAAmB,QAAQ,CAACwH,CAAD,CAAiB,CAChE,MAAO,CACLmV,SAAU,GADL;AAELsD,SAAU,CAAA,CAFL,CAGLzmB,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CACd,kBAAjB,EAAIA,CAAAsY,KAAJ,EAIE1D,CAAAsI,IAAA,CAHkBld,CAAA0nB,GAGlB,CAFWpnB,CAAA,CAAQ,CAAR,CAAA21B,KAEX,CAL6B,CAH5B,CADyD,CAA5C,CAjxDtB,CAgyDIs0C,GAAkBjuE,CAAA,CAAO,WAAP,CAhyDtB,CAi8DIgU,GAAqBtR,EAAA,CAAQ,CAC/B+qB,SAAU,GADqB,CAE/BsD,SAAU,CAAA,CAFqB,CAAR,CAj8DzB,CAu8DI/f,GAAkB,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAQ,CAACw2D,CAAD,CAAahwD,CAAb,CAAqB,CAAA,IAEpE02D,EAAoB,wMAFgD,CAGpEC,EAAgB,CAACvhB,cAAerqD,CAAhB,CAGpB,OAAO,CACLkrB,SAAU,GADL,CAELD,QAAS,CAAC,QAAD,CAAW,UAAX,CAFJ,CAGLrhB,WAAY,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAvB,CAAiC,QAAQ,CAACgiB,CAAD;AAAWmG,CAAX,CAAmBC,CAAnB,CAA2B,CAAA,IAC1EluB,EAAO,IADmE,CAE1E+nE,EAAa,EAF6D,CAG1EC,EAAcF,CAH4D,CAK1EG,CAGJjoE,EAAAkoE,UAAA,CAAiBh6C,CAAApgB,QAGjB9N,EAAAmoE,KAAA,CAAYC,QAAQ,CAACC,CAAD,CAAeC,CAAf,CAA4BC,CAA5B,CAA4C,CAC9DP,CAAA,CAAcK,CAEdJ,EAAA,CAAgBM,CAH8C,CAOhEvoE,EAAAwoE,UAAA,CAAiBC,QAAQ,CAACttE,CAAD,CAAQwC,CAAR,CAAiB,CACxCqJ,EAAA,CAAwB7L,CAAxB,CAA+B,gBAA/B,CACA4sE,EAAA,CAAW5sE,CAAX,CAAA,CAAoB,CAAA,CAEhB6sE,EAAA3hB,WAAJ,EAA8BlrD,CAA9B,GACE2sB,CAAAxnB,IAAA,CAAanF,CAAb,CACA,CAAI8sE,CAAAjwD,OAAA,EAAJ,EAA4BiwD,CAAA5iD,OAAA,EAF9B,CAOI1nB,EAAJ,EAAeA,CAAA,CAAQ,CAAR,CAAAoF,aAAA,CAAwB,UAAxB,CAAf,GACEpF,CAAA,CAAQ,CAAR,CAAAsvD,SADF,CACwB,CAAA,CADxB,CAXwC,CAiB1CjtD,EAAA0oE,aAAA,CAAoBC,QAAQ,CAACxtE,CAAD,CAAQ,CAC9B,IAAAytE,UAAA,CAAeztE,CAAf,CAAJ,GACE,OAAO4sE,CAAA,CAAW5sE,CAAX,CACP,CAAI6sE,CAAA3hB,WAAJ,GAA+BlrD,CAA/B,EACE,IAAA0tE,oBAAA,CAAyB1tE,CAAzB,CAHJ,CADkC,CAUpC6E,EAAA6oE,oBAAA,CAA2BC,QAAQ,CAACxoE,CAAD,CAAM,CACnCyoE,CAAAA,CAAa,IAAbA,CAAoB9uD,EAAA,CAAQ3Z,CAAR,CAApByoE,CAAmC,IACvCd,EAAA3nE,IAAA,CAAkByoE,CAAlB,CACAjhD,EAAAgmC,QAAA,CAAiBma,CAAjB,CACAngD,EAAAxnB,IAAA,CAAayoE,CAAb,CACAd,EAAA7qE,KAAA,CAAmB,UAAnB,CAA+B,CAAA,CAA/B,CALuC,CASzC4C,EAAA4oE,UAAA,CAAiBI,QAAQ,CAAC7tE,CAAD,CAAQ,CAC/B,MAAO4sE,EAAAttE,eAAA,CAA0BU,CAA1B,CADwB,CAIjC8yB;CAAA0B,IAAA,CAAW,UAAX,CAAuB,QAAQ,EAAG,CAEhC3vB,CAAA6oE,oBAAA,CAA2B3sE,CAFK,CAAlC,CA1D8E,CAApE,CAHP,CAmELsoB,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB6+D,CAAvB,CAA8B,CA2C1C+M,QAASA,EAAa,CAACjlE,CAAD,CAAQklE,CAAR,CAAuBlB,CAAvB,CAAoCmB,CAApC,CAAgD,CACpEnB,CAAArhB,QAAA,CAAsByiB,QAAQ,EAAG,CAC/B,IAAI9N,EAAY0M,CAAA3hB,WAEZ8iB,EAAAP,UAAA,CAAqBtN,CAArB,CAAJ,EACM2M,CAAAjwD,OAAA,EAEJ,EAF4BiwD,CAAA5iD,OAAA,EAE5B,CADA6jD,CAAA5oE,IAAA,CAAkBg7D,CAAlB,CACA,CAAkB,EAAlB,GAAIA,CAAJ,EAAsB+N,CAAAjsE,KAAA,CAAiB,UAAjB,CAA6B,CAAA,CAA7B,CAHxB,EAKMd,CAAA,CAAYg/D,CAAZ,CAAJ,EAA8B+N,CAA9B,CACEH,CAAA5oE,IAAA,CAAkB,EAAlB,CADF,CAGE6oE,CAAAN,oBAAA,CAA+BvN,CAA/B,CAX2B,CAgBjC4N,EAAAvjE,GAAA,CAAiB,QAAjB,CAA2B,QAAQ,EAAG,CACpC3B,CAAAE,OAAA,CAAa,QAAQ,EAAG,CAClB+jE,CAAAjwD,OAAA,EAAJ,EAA4BiwD,CAAA5iD,OAAA,EAC5B2iD,EAAAzhB,cAAA,CAA0B2iB,CAAA5oE,IAAA,EAA1B,CAFsB,CAAxB,CADoC,CAAtC,CAjBoE,CAyBtEgpE,QAASA,EAAe,CAACtlE,CAAD,CAAQklE,CAAR,CAAuBnkB,CAAvB,CAA6B,CACnD,IAAIwkB,CACJxkB,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CACxB,IAAIppD,EAAQ,IAAI4c,EAAJ,CAAY2qC,CAAAsB,WAAZ,CACZjsD,EAAA,CAAQ8uE,CAAA5rE,KAAA,CAAmB,QAAnB,CAAR,CAAsC,QAAQ,CAACwN,CAAD,CAAS,CACrDA,CAAAmiD,SAAA,CAAkB1wD,CAAA,CAAUiB,CAAAwH,IAAA,CAAU8F,CAAA3P,MAAV,CAAV,CADmC,CAAvD,CAFwB,CAS1B6I,EAAAjH,OAAA,CAAaysE,QAA4B,EAAG,CACrCnqE,EAAA,CAAOkqE,CAAP;AAAiBxkB,CAAAsB,WAAjB,CAAL,GACEkjB,CACA,CADWrqE,EAAA,CAAY6lD,CAAAsB,WAAZ,CACX,CAAAtB,CAAA4B,QAAA,EAFF,CAD0C,CAA5C,CAOAuiB,EAAAvjE,GAAA,CAAiB,QAAjB,CAA2B,QAAQ,EAAG,CACpC3B,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB,IAAIpG,EAAQ,EACZ1D,EAAA,CAAQ8uE,CAAA5rE,KAAA,CAAmB,QAAnB,CAAR,CAAsC,QAAQ,CAACwN,CAAD,CAAS,CACjDA,CAAAmiD,SAAJ,EACEnvD,CAAAU,KAAA,CAAWsM,CAAA3P,MAAX,CAFmD,CAAvD,CAKA4pD,EAAAwB,cAAA,CAAmBzoD,CAAnB,CAPsB,CAAxB,CADoC,CAAtC,CAlBmD,CA+BrD2rE,QAASA,EAAc,CAACzlE,CAAD,CAAQklE,CAAR,CAAuBnkB,CAAvB,CAA6B,CA2DlD2kB,QAASA,EAAc,CAACC,CAAD,CAASpvE,CAAT,CAAcY,CAAd,CAAqB,CAC1C8hB,CAAA,CAAO2sD,CAAP,CAAA,CAAoBzuE,CAChB0uE,EAAJ,GAAa5sD,CAAA,CAAO4sD,CAAP,CAAb,CAA+BtvE,CAA/B,CACA,OAAOovE,EAAA,CAAO3lE,CAAP,CAAciZ,CAAd,CAHmC,CAyD5C6sD,QAASA,EAAkB,CAACxO,CAAD,CAAY,CACrC,IAAIyO,CACJ,IAAI/c,CAAJ,CACE,GAAIgd,CAAJ,EAAe7vE,CAAA,CAAQmhE,CAAR,CAAf,CAAmC,CAEjCyO,CAAA,CAAc,IAAI3vD,EAAJ,CAAY,EAAZ,CACd,KAAS,IAAA6vD,EAAa,CAAtB,CAAyBA,CAAzB,CAAsC3O,CAAAvhE,OAAtC,CAAwDkwE,CAAA,EAAxD,CAEEF,CAAAxvD,IAAA,CAAgBmvD,CAAA,CAAeM,CAAf,CAAwB,IAAxB,CAA8B1O,CAAA,CAAU2O,CAAV,CAA9B,CAAhB,CAAsE,CAAA,CAAtE,CAL+B,CAAnC,IAQEF,EAAA,CAAc,IAAI3vD,EAAJ,CAAYkhD,CAAZ,CATlB,KAWW0O,EAAJ,GACL1O,CADK,CACOoO,CAAA,CAAeM,CAAf,CAAwB,IAAxB,CAA8B1O,CAA9B,CADP,CAIP,OAAO4O,SAAmB,CAAC3vE,CAAD,CAAMY,CAAN,CAAa,CACrC,IAAIgvE,CAEFA,EAAA,CADEH,CAAJ,CACmBA,CADnB,CAEWI,CAAJ,CACYA,CADZ,CAGY/tE,CAGnB,OAAI2wD,EAAJ,CACSzwD,CAAA,CAAUwtE,CAAA1kD,OAAA,CAAmBqkD,CAAA,CAAeS,CAAf,CAA+B5vE,CAA/B,CAAoCY,CAApC,CAAnB,CAAV,CADT,CAGSmgE,CAHT,GAGuBoO,CAAA,CAAeS,CAAf,CAA+B5vE,CAA/B,CAAoCY,CAApC,CAbc,CAjBF,CAmCvCkvE,QAASA,EAAiB,EAAG,CACtBC,CAAL,GACEtmE,CAAAmqC,aAAA,CAAmBo8B,CAAnB,CACA;AAAAD,CAAA,CAAkB,CAAA,CAFpB,CAD2B,CAmB7BE,QAASA,EAAc,CAACC,CAAD,CAAWC,CAAX,CAAkBC,CAAlB,CAAyB,CAC9CF,CAAA,CAASC,CAAT,CAAA,CAAkBD,CAAA,CAASC,CAAT,CAAlB,EAAqC,CACrCD,EAAA,CAASC,CAAT,CAAA,EAAoBC,CAAA,CAAQ,CAAR,CAAa,EAFa,CAKhDJ,QAASA,EAAM,EAAG,CAChBD,CAAA,CAAkB,CAAA,CADF,KAIZM,EAAe,CAAC,GAAG,EAAJ,CAJH,CAKZC,EAAmB,CAAC,EAAD,CALP,CAMZC,CANY,CAOZC,CAPY,CASZC,CATY,CASIC,CATJ,CASqBC,CACjC5P,EAAAA,CAAYvW,CAAAsB,WACZhvB,EAAAA,CAAS8zC,CAAA,CAASnnE,CAAT,CAATqzB,EAA4B,EAXhB,KAYZx8B,EAAOgvE,CAAA,CAr0xBZ/uE,MAAAD,KAAA,CAq0xBiCw8B,CAr0xBjC,CAAAt8B,KAAA,EAq0xBY,CAA+Bs8B,CAZ1B,CAaZ98B,CAbY,CAcZY,CAdY,CAeCpB,CAfD,CAgBAgE,CAhBA,CAiBZ0sE,EAAW,EAEXP,EAAAA,CAAaJ,CAAA,CAAmBxO,CAAnB,CAnBD,KAoBZ8P,EAAc,CAAA,CApBF,CAsBZztE,CAtBY,CAwBZ0tE,CAEJC,EAAA,CAAiB,EAGjB,KAAKvtE,CAAL,CAAa,CAAb,CAAgBhE,CAAA,CAASc,CAAAd,OAAT,CAAsBgE,CAAtB,CAA8BhE,CAA9C,CAAsDgE,CAAA,EAAtD,CAA+D,CAC7DxD,CAAA,CAAMwD,CACN,IAAI8rE,CAAJ,GACEtvE,CACI,CADEM,CAAA,CAAKkD,CAAL,CACF,CAAkB,GAAlB,GAAAxD,CAAA6E,OAAA,CAAW,CAAX,CAFN,EAE6B,QAE7BjE,EAAA,CAAQk8B,CAAA,CAAO98B,CAAP,CAERuwE,EAAA,CAAkBpB,CAAA,CAAe6B,CAAf,CAA0BhxE,CAA1B,CAA+BY,CAA/B,CAAlB,EAA2D,EAC3D,EAAM4vE,CAAN,CAAoBH,CAAA,CAAaE,CAAb,CAApB,IACEC,CACA,CADcH,CAAA,CAAaE,CAAb,CACd,CAD8C,EAC9C,CAAAD,CAAArsE,KAAA,CAAsBssE,CAAtB,CAFF,CAKA7d,EAAA,CAAWid,CAAA,CAAW3vE,CAAX,CAAgBY,CAAhB,CACXiwE,EAAA,CAAcA,CAAd,EAA6Bne,CAE7Byd,EAAA,CAAQhB,CAAA,CAAe8B,CAAf,CAA0BjxE,CAA1B,CAA+BY,CAA/B,CAGRuvE,EAAA,CAAQnuE,CAAA,CAAUmuE,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,EACnCW,EAAA,CAAWrB,CAAA,CAAUA,CAAA,CAAQhmE,CAAR,CAAeiZ,CAAf,CAAV,CAAoC4sD,CAAA,CAAUhvE,CAAA,CAAKkD,CAAL,CAAV,CAAwBA,CACnEisE,EAAJ,GACEsB,CAAA,CAAeD,CAAf,CADF,CAC6B9wE,CAD7B,CAIAwwE,EAAAvsE,KAAA,CAAiB,CAEfumB,GAAIsmD,CAFW,CAGfX,MAAOA,CAHQ,CAIfzd,SAAUA,CAJK,CAAjB,CA1B6D,CAiC1DD,CAAL,GACMye,CAAJ,EAAgC,IAAhC,GAAkBnQ,CAAlB,CAEEsP,CAAA,CAAa,EAAb,CAAAnnE,QAAA,CAAyB,CAACshB,GAAG,EAAJ,CAAQ2lD,MAAM,EAAd,CAAkBzd,SAAS,CAACme,CAA5B,CAAzB,CAFF,CAGYA,CAHZ,EAKER,CAAA,CAAa,EAAb,CAAAnnE,QAAA,CAAyB,CAACshB,GAAG,GAAJ;AAAS2lD,MAAM,EAAf,CAAmBzd,SAAS,CAAA,CAA5B,CAAzB,CANJ,CAWKye,EAAA,CAAa,CAAlB,KAAqBC,CAArB,CAAmCd,CAAA9wE,OAAnC,CACK2xE,CADL,CACkBC,CADlB,CAEKD,CAAA,EAFL,CAEmB,CAEjBZ,CAAA,CAAkBD,CAAA,CAAiBa,CAAjB,CAGlBX,EAAA,CAAcH,CAAA,CAAaE,CAAb,CAEVc,EAAA7xE,OAAJ,EAAgC2xE,CAAhC,EAEEV,CAMA,CANiB,CACfrtE,QAASkuE,CAAA7qE,MAAA,EAAA3D,KAAA,CAA8B,OAA9B,CAAuCytE,CAAvC,CADM,CAEfJ,MAAOK,CAAAL,MAFQ,CAMjB,CAFAO,CAEA,CAFkB,CAACD,CAAD,CAElB,CADAY,CAAAptE,KAAA,CAAuBysE,CAAvB,CACA,CAAA/B,CAAA9nE,OAAA,CAAqB4pE,CAAArtE,QAArB,CARF,GAUEstE,CAIA,CAJkBW,CAAA,CAAkBF,CAAlB,CAIlB,CAHAV,CAGA,CAHiBC,CAAA,CAAgB,CAAhB,CAGjB,CAAID,CAAAN,MAAJ,EAA4BI,CAA5B,EACEE,CAAArtE,QAAAN,KAAA,CAA4B,OAA5B,CAAqC2tE,CAAAN,MAArC,CAA4DI,CAA5D,CAfJ,CAmBAgB,EAAA,CAAc,IACT/tE,EAAA,CAAQ,CAAb,KAAgBhE,CAAhB,CAAyBgxE,CAAAhxE,OAAzB,CAA6CgE,CAA7C,CAAqDhE,CAArD,CAA6DgE,CAAA,EAA7D,CACE+M,CACA,CADSigE,CAAA,CAAYhtE,CAAZ,CACT,CAAA,CAAKmtE,CAAL,CAAsBD,CAAA,CAAgBltE,CAAhB,CAAwB,CAAxB,CAAtB,GAEE+tE,CAWA,CAXcZ,CAAAvtE,QAWd,CAVIutE,CAAAR,MAUJ,GAV6B5/D,CAAA4/D,MAU7B,GATEF,CAAA,CAAeC,CAAf,CAAyBS,CAAAR,MAAzB,CAA+C,CAAA,CAA/C,CAGA,CAFAF,CAAA,CAAeC,CAAf,CAAyB3/D,CAAA4/D,MAAzB,CAAuC,CAAA,CAAvC,CAEA,CADAoB,CAAAx4C,KAAA,CAAiB43C,CAAAR,MAAjB,CAAwC5/D,CAAA4/D,MAAxC,CACA,CAAAoB,CAAA1uE,KAAA,CAAiB,OAAjB,CAA0B8tE,CAAAR,MAA1B,CAMF,EAJIQ,CAAAnmD,GAIJ,GAJ0Bja,CAAAia,GAI1B,EAHE+mD,CAAAxrE,IAAA,CAAgB4qE,CAAAnmD,GAAhB,CAAoCja,CAAAia,GAApC,CAGF,CAAI+mD,CAAA,CAAY,CAAZ,CAAA7e,SAAJ,GAAgCniD,CAAAmiD,SAAhC,GACE6e,CAAA1uE,KAAA,CAAiB,UAAjB,CAA8B8tE,CAAAje,SAA9B,CAAwDniD,CAAAmiD,SAAxD,CACA,CAAIrT,EAAJ,EAIEkyB,CAAA1uE,KAAA,CAAiB,UAAjB;AAA6B8tE,CAAAje,SAA7B,CANJ,CAbF,GA0BoB,EAAlB,GAAIniD,CAAAia,GAAJ,EAAwB0mD,CAAxB,CAEE9tE,CAFF,CAEY8tE,CAFZ,CAOEnrE,CAAC3C,CAAD2C,CAAWyrE,CAAA/qE,MAAA,EAAXV,KAAA,CACSwK,CAAAia,GADT,CAAA3nB,KAAA,CAEU,UAFV,CAEsB0N,CAAAmiD,SAFtB,CAAA5vD,KAAA,CAGU,UAHV,CAGsByN,CAAAmiD,SAHtB,CAAA7vD,KAAA,CAIU,OAJV,CAImB0N,CAAA4/D,MAJnB,CAAAp3C,KAAA,CAKUxoB,CAAA4/D,MALV,CAoBF,CAZAO,CAAAzsE,KAAA,CAAqB0sE,CAArB,CAAsC,CAClCvtE,QAASA,CADyB,CAElC+sE,MAAO5/D,CAAA4/D,MAF2B,CAGlC3lD,GAAIja,CAAAia,GAH8B,CAIlCkoC,SAAUniD,CAAAmiD,SAJwB,CAAtC,CAYA,CANAud,CAAA,CAAeC,CAAf,CAAyB3/D,CAAA4/D,MAAzB,CAAuC,CAAA,CAAvC,CAMA,CALIoB,CAAJ,CACEA,CAAA7d,MAAA,CAAkBtwD,CAAlB,CADF,CAGEqtE,CAAArtE,QAAAyD,OAAA,CAA8BzD,CAA9B,CAEF,CAAAmuE,CAAA,CAAcnuE,CArDhB,CA0DF,KADAI,CAAA,EACA,CAAOktE,CAAAlxE,OAAP,CAAgCgE,CAAhC,CAAA,CACE+M,CAEA,CAFSmgE,CAAAlrD,IAAA,EAET,CADAyqD,CAAA,CAAeC,CAAf,CAAyB3/D,CAAA4/D,MAAzB,CAAuC,CAAA,CAAvC,CACA,CAAA5/D,CAAAnN,QAAA0nB,OAAA,EA1Fe,CA8FnB,IAAA,CAAOumD,CAAA7xE,OAAP,CAAkC2xE,CAAlC,CAAA,CAA8C,CAE5CX,CAAA,CAAca,CAAA7rD,IAAA,EACd,KAAKhiB,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwBgtE,CAAAhxE,OAAxB,CAA4C,EAAEgE,CAA9C,CACEysE,CAAA,CAAeC,CAAf,CAAyBM,CAAA,CAAYhtE,CAAZ,CAAA2sE,MAAzB,CAAmD,CAAA,CAAnD,CAEFK,EAAA,CAAY,CAAZ,CAAAptE,QAAA0nB,OAAA,EAN4C,CAQ9CjrB,CAAA,CAAQqwE,CAAR,CAAkB,QAAQ,CAACrpC,CAAD,CAAQspC,CAAR,CAAe,CAC3B,CAAZ,CAAItpC,CAAJ,CACE+nC,CAAAX,UAAA,CAAqBkC,CAArB,CADF,CAEmB,CAFnB,CAEWtpC,CAFX,EAGE+nC,CAAAT,aAAA,CAAwBgC,CAAxB,CAJqC,CAAzC,CAjLgB,CA9KlB,IAAI7rE,CAEJ,IAAM,EAAAA,CAAA,CAAQmtE,CAAAntE,MAAA,CAAiBgpE,CAAjB,CAAR,CAAN,CACE,KAAMD,GAAA,CAAgB,MAAhB;AAIJoE,CAJI,CAIQlrE,EAAA,CAAYooE,CAAZ,CAJR,CAAN,CAJgD,IAW9CsC,EAAYr6D,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAP,EAAmBA,CAAA,CAAM,CAAN,CAAnB,CAXkC,CAY9C+qE,EAAY/qE,CAAA,CAAM,CAAN,CAAZ+qE,EAAwB/qE,CAAA,CAAM,CAAN,CAZsB,CAa9CotE,EAAW,MAAA3nE,KAAA,CAAYzF,CAAA,CAAM,CAAN,CAAZ,CAAXotE,EAAoCptE,CAAA,CAAM,CAAN,CAbU,CAc9CurE,EAAa6B,CAAA,CAAW96D,CAAA,CAAO86D,CAAP,CAAX,CAA8B,IAdG,CAe9CpC,EAAUhrE,CAAA,CAAM,CAAN,CAfoC,CAgB9C0sE,EAAYp6D,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAP,EAAmB,EAAnB,CAhBkC,CAiB9CxC,EAAU8U,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAA,CAAWA,CAAA,CAAM,CAAN,CAAX,CAAsB+qE,CAA7B,CAjBoC,CAkB9CuB,EAAWh6D,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAP,CAlBmC,CAoB9CmrE,EADQnrE,CAAAqtE,CAAM,CAANA,CACE,CAAQ/6D,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAP,CAAR,CAA2B,IApBS,CAqB9CysE,EAAiB,EArB6B,CA0B9CM,EAAoB,CAAC,CAAC,CAACjuE,QAASurE,CAAV,CAAyBwB,MAAM,EAA/B,CAAD,CAAD,CA1B0B,CA4B9CztD,EAAS,EAETwuD,EAAJ,GAEEtK,CAAA,CAASsK,CAAT,CAAA,CAAqBznE,CAArB,CAQA,CAJAynE,CAAAzxD,YAAA,CAAuB,UAAvB,CAIA,CAAAyxD,CAAApmD,OAAA,EAVF,CAcA6jD,EAAAjoE,MAAA,EAEAioE,EAAAvjE,GAAA,CAAiB,QAAjB,CAmBAwmE,QAAyB,EAAG,CAC1BnoE,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB,IAAIkiB,EAAa+kD,CAAA,CAASnnE,CAAT,CAAboiB,EAAgC,EAApC,CACIk1C,CACJ,IAAItO,CAAJ,CACEsO,CACA,CADY,EACZ,CAAAlhE,CAAA,CAAQ8uE,CAAA5oE,IAAA,EAAR,CAA6B,QAAQ,CAAC8rE,CAAD,CAAc,CAC/CA,CAAA,CAAcpC,CAAA,CAAUsB,CAAA,CAAec,CAAf,CAAV,CAAwCA,CACxD9Q,EAAA98D,KAAA,CAYM,GAAZ,GAZkC4tE,CAYlC,CACS1yE,CADT,CAEmB,EAAZ,GAd2B0yE,CAc3B,CACE,IADF,CAIE1C,CAAA,CADWU,CAAAiC,CAAajC,CAAbiC,CAA0BhwE,CACrC,CAlByB+vE,CAkBzB,CAlBsChmD,CAAAjrB,CAAWixE,CAAXjxE,CAkBtC,CAlBH,CAFiD,CAAnD,CAFF,KAMO,CACL,IAAIixE,EAAcpC,CAAA,CAAUsB,CAAA,CAAepC,CAAA5oE,IAAA,EAAf,CAAV,CAAgD4oE,CAAA5oE,IAAA,EAClEg7D,EAAA,CAQQ,GAAZ,GAR6B8Q,CAQ7B,CACS1yE,CADT,CAEmB,EAAZ,GAVsB0yE,CAUtB,CACE,IADF,CAIE1C,CAAA,CADWU,CAAAiC,CAAajC,CAAbiC,CAA0BhwE,CACrC,CAdoB+vE,CAcpB,CAdiChmD,CAAAjrB,CAAWixE,CAAXjxE,CAcjC,CAhBA,CAIP4pD,CAAAwB,cAAA,CAAmB+U,CAAnB,CACAiP,EAAA,EAdsB,CAAxB,CAD0B,CAnB5B,CAEAxlB,EAAA4B,QAAA;AAAe4jB,CAEfvmE,EAAA0rB,iBAAA,CAAuBy7C,CAAvB,CAAiCd,CAAjC,CACArmE,EAAA0rB,iBAAA,CA4CA48C,QAAkB,EAAG,CACnB,IAAIj1C,EAAS8zC,CAAA,CAASnnE,CAAT,CAAb,CACIuoE,CACJ,IAAIl1C,CAAJ,EAAcl9B,CAAA,CAAQk9B,CAAR,CAAd,CAA+B,CAC7Bk1C,CAAA,CAAgBluD,KAAJ,CAAUgZ,CAAAt9B,OAAV,CACZ,KAF6B,IAEpBiB,EAAI,CAFgB,CAEbW,EAAK07B,CAAAt9B,OAArB,CAAoCiB,CAApC,CAAwCW,CAAxC,CAA4CX,CAAA,EAA5C,CACEuxE,CAAA,CAAUvxE,CAAV,CAAA,CAAe0uE,CAAA,CAAe8B,CAAf,CAA0BxwE,CAA1B,CAA6Bq8B,CAAA,CAAOr8B,CAAP,CAA7B,CAHY,CAA/B,IAMO,IAAIq8B,CAAJ,CAGL,IAASj6B,CAAT,GADAmvE,EACiBl1C,CADL,EACKA,CAAAA,CAAjB,CACMA,CAAA58B,eAAA,CAAsB2C,CAAtB,CAAJ,GACEmvE,CAAA,CAAUnvE,CAAV,CADF,CACoBssE,CAAA,CAAe8B,CAAf,CAA0BpuE,CAA1B,CAAgCi6B,CAAA,CAAOj6B,CAAP,CAAhC,CADpB,CAKJ,OAAOmvE,EAlBY,CA5CrB,CAAkClC,CAAlC,CAEIrd,EAAJ,EACEhpD,CAAA0rB,iBAAA,CAAuB,QAAQ,EAAG,CAAE,MAAOq1B,EAAAqX,YAAT,CAAlC,CAAgEiO,CAAhE,CAtDgD,CAjGpD,GAAKnO,CAAA,CAAM,CAAN,CAAL,CAAA,CAF0C,IAItCiN,EAAajN,CAAA,CAAM,CAAN,CACb8L,EAAAA,CAAc9L,CAAA,CAAM,CAAN,CALwB,KAMtClP,EAAW3vD,CAAA2vD,SAN2B,CAOtCgf,EAAa3uE,CAAAqQ,UAPyB,CAQtC+9D,EAAa,CAAA,CARyB,CAStCpC,CATsC,CAUtCiB,EAAkB,CAAA,CAVoB,CAatCyB,EAAiBhrE,CAAA,CAAOtH,CAAAsa,cAAA,CAAuB,QAAvB,CAAP,CAbqB,CActC83D,EAAkB9qE,CAAA,CAAOtH,CAAAsa,cAAA,CAAuB,UAAvB,CAAP,CAdoB,CAetCk0D,EAAgB8D,CAAA/qE,MAAA,EAGXhG,EAAAA,CAAI,CAAb,KAlB0C,IAkB1BovC,EAAWzsC,CAAAysC,SAAA,EAlBe,CAkBKzuC,EAAKyuC,CAAArwC,OAApD,CAAqEiB,CAArE,CAAyEW,CAAzE,CAA6EX,CAAA,EAA7E,CACE,GAA0B,EAA1B,GAAIovC,CAAA,CAASpvC,CAAT,CAAAG,MAAJ,CAA8B,CAC5BkuE,CAAA,CAAcoC,CAAd,CAA2BrhC,CAAA8J,GAAA,CAAYl5C,CAAZ,CAC3B;KAF4B,CAMhCmuE,CAAAhB,KAAA,CAAgBH,CAAhB,CAA6ByD,CAA7B,CAAyCxD,CAAzC,CAGIjb,EAAJ,GACEgb,CAAAhiB,SADF,CACyBwmB,QAAQ,CAACrxE,CAAD,CAAQ,CACrC,MAAO,CAACA,CAAR,EAAkC,CAAlC,GAAiBA,CAAApB,OADoB,CADzC,CAMIiyE,EAAJ,CAAgBvC,CAAA,CAAezlE,CAAf,CAAsBrG,CAAtB,CAA+BqqE,CAA/B,CAAhB,CACShb,CAAJ,CAAcsc,CAAA,CAAgBtlE,CAAhB,CAAuBrG,CAAvB,CAAgCqqE,CAAhC,CAAd,CACAiB,CAAA,CAAcjlE,CAAd,CAAqBrG,CAArB,CAA8BqqE,CAA9B,CAA2CmB,CAA3C,CAlCL,CAF0C,CAnEvC,CANiE,CAApD,CAv8DtB,CAg+EIp+D,GAAkB,CAAC,cAAD,CAAiB,QAAQ,CAACwF,CAAD,CAAe,CAC5D,IAAIk8D,EAAiB,CACnBjE,UAAWtsE,CADQ,CAEnBwsE,aAAcxsE,CAFK,CAKrB,OAAO,CACLkrB,SAAU,GADL,CAELF,SAAU,GAFL,CAGLjjB,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CAC/B,GAAIf,CAAA,CAAYe,CAAAlC,MAAZ,CAAJ,CAA6B,CAC3B,IAAIo4B,EAAgBhjB,CAAA,CAAa5S,CAAA21B,KAAA,EAAb,CAA6B,CAAA,CAA7B,CACfC,EAAL,EACEl2B,CAAA40B,KAAA,CAAU,OAAV,CAAmBt0B,CAAA21B,KAAA,EAAnB,CAHyB,CAO7B,MAAO,SAAQ,CAACtvB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAEhC2a,EAASra,CAAAqa,OAAA,EAFuB,CAGhCmxD,EAAanxD,CAAA7T,KAAA,CAFIuoE,mBAEJ,CAAbvD,EACEnxD,CAAAA,OAAA,EAAA7T,KAAA,CAHeuoE,mBAGf,CAEDvD,EAAL,EAAoBA,CAAAjB,UAApB,GACEiB,CADF,CACesD,CADf,CAIIl5C,EAAJ,CACEvvB,CAAAjH,OAAA,CAAaw2B,CAAb,CAA4Bo5C,QAA+B,CAACntD,CAAD,CAASC,CAAT,CAAiB,CAC1EpiB,CAAA40B,KAAA,CAAU,OAAV,CAAmBzS,CAAnB,CACIC,EAAJ,GAAeD,CAAf,EACE2pD,CAAAT,aAAA,CAAwBjpD,CAAxB,CAEF0pD,EAAAX,UAAA,CAAqBhpD,CAArB;AAA6B7hB,CAA7B,CAL0E,CAA5E,CADF,CASEwrE,CAAAX,UAAA,CAAqBnrE,CAAAlC,MAArB,CAAiCwC,CAAjC,CAGFA,EAAAgI,GAAA,CAAW,UAAX,CAAuB,QAAQ,EAAG,CAChCwjE,CAAAT,aAAA,CAAwBrrE,CAAAlC,MAAxB,CADgC,CAAlC,CAtBoC,CARP,CAH5B,CANqD,CAAxC,CAh+EtB,CA+gFI0P,GAAiBxO,EAAA,CAAQ,CAC3B+qB,SAAU,GADiB,CAE3BsD,SAAU,CAAA,CAFiB,CAAR,CAKflxB,EAAA+K,QAAA9B,UAAJ,CAEEinC,OAAAE,IAAA,CAAY,gDAAZ,CAFF,EAQArkC,EAAA,EAIA,CAFA+D,EAAA,CAAmB/E,EAAnB,CAEA,CAAAxD,CAAA,CAAOtH,CAAP,CAAA2yD,MAAA,CAAuB,QAAQ,EAAG,CAChC5pD,EAAA,CAAY/I,CAAZ,CAAsBgJ,EAAtB,CADgC,CAAlC,CAZA,CAx3yBqC,CAAtC,CAAD,CAw4yBGjJ,MAx4yBH,CAw4yBWC,QAx4yBX,CA04yBC,EAAAD,MAAA+K,QAAAqoE,MAAA,EAAD,EAA2BpzE,MAAA+K,QAAA5G,QAAA,CAAuBlE,QAAvB,CAAA6D,KAAA,CAAsC,MAAtC,CAAAwwD,QAAA,CAAsD,8MAAtD;",
6
-"sources":["angular.js"],
7
-"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","NODE_TYPE_ELEMENT","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","forEachSorted","keys","Object","sort","i","reverseParams","iteratorFn","value","nextUid","uid","setHashKey","h","$$hashKey","extend","dst","ii","arguments","j","jj","int","str","parseInt","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","isScope","$evalAsync","$watch","isBoolean","isElement","node","nodeName","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","stackSource","stackDest","ngMinErr","push","result","Date","getTime","RegExp","match","lastIndex","emptyObject","create","getPrototypeOf","shallowCopy","src","charAt","equals","o1","o2","t1","t2","keySet","concat","array1","array2","slice","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","startingTag","jqLite","clone","empty","e","elemHtml","append","html","NODE_TYPE_TEXT","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","getAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","skipDestroyOnNextJQueryCleanData","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","createMap","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","animation","filter","directive","run","block","publishExternalAPI","version","uppercase","counter","csp","angularModule","$LocaleProvider","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpBackend","$HttpBackendProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$asyncCallback","$$AsyncCallbackProvider","$$jqLite","$$jqLiteProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","type","unsupported","expandoStore","jqLiteExpandoStore","handle","listenerFns","removeEventListener","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","parent","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","getAliasedAttrName","ALIASED_ATTR","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","anonFn","args","fnText","STRIP_COMMENTS","FN_ARGS","annotate","$inject","argDecl","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","locals","Type","instance","prototype","returnedValue","has","$injector","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","Array","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","supported","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","check","pollFns","pollFn","pollTimeout","cacheStateAndFireUrlChange","cacheState","fireUrlChange","cachedState","history","state","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","safeDecodeURIComponent","rawDocument","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","reloadLocation","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$checkUrlChange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","warn","cookieArray","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","LOCAL_REGEXP","bindings","definition","scopeName","$compileMinErr","mode","collection","optional","attrName","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","require","restrict","$$isolateBindings","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","safeAddClass","$element","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","$new","transcludeOnThisElement","createBoundTranscludeFn","transclude","elementTranscludeOnThisElement","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","elementTransclusion","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","nName","isNgAttr","nAttrs","attributes","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","directiveNName","multiElement","addAttrInterpolateDirective","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","$searchElement","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","scopeToChild","controllerDirectives","$scope","$attrs","$transclude","controllerInstance","controllerAs","templateDirective","$$originalDirective","isolateScopeController","isolateBindingContext","identifier","bindToController","lastValue","parentGet","parentSet","compare","$observe","$$observers","$$scope","literal","b","assign","parentValueWatch","parentValue","$stateful","unwatch","$watchCollection","$on","invokeLinkFn","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","extra","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","attrInterpolatePreLinkFn","$$inter","newValue","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","attributesToCopy","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","dataName","PREFIX_REGEXP","str1","str2","values","tokens1","tokens2","token","jqNodes","globals","CNTRL_REG","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","ident","controllerPrototype","exception","cause","defaultHttpResponseTransform","headers","JSON_PROTECTION_PREFIX","contentType","APPLICATION_JSON","JSON_START","JSON_END","parseHeaders","line","headersGetter","headersObj","transformData","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","requestConfig","response","resp","status","reject","mergeHeaders","defHeaders","reqHeaders","defHeaderName","reqHeaderName","lowercaseDefHeaderName","execHeaders","headerContent","headerFn","header","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","done","headersString","statusText","resolveHttpPromise","resolvePromise","$applyAsync","$$phase","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","params","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","v","toISOString","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","send","this.startSymbol","this.endSymbol","escape","ch","mustHaveExpression","trustedContext","unescapeText","escapedStartRegexp","escapedEndRegexp","parseStringifyInterceptor","getTrusted","valueOf","newErr","$interpolateMinErr","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","exp","endSymbolLength","compute","interpolationFn","$$watchDelegate","objectEquality","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","count","invokeApply","setInterval","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","NUMBER_FORMATS","DECIMAL_SEP","GROUP_SEP","PATTERNS","minInt","minFrac","maxFrac","posPre","posSuf","negPre","negSuf","gSize","lgSize","CURRENCY_SYM","DATETIME_FORMATS","MONTH","SHORTMONTH","DAY","SHORTDAY","AMPMS","medium","fullDate","longDate","mediumDate","shortDate","mediumTime","shortTime","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","trimEmptyHash","stripFile","lastIndexOf","LocationHtml5Url","appBase","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","which","target","absHref","animVal","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","children","isConstant","setter","setValue","fullExp","propertyObj","isPossiblyDangerousMemberName","cspSafeGetterFn","key0","key1","key2","key3","key4","expensiveChecks","eso","o","eso0","eso1","eso2","eso3","eso4","cspSafeGetter","pathVal","getterFnWithEnsureSafeObject","s","getterFn","getterFnCache","getterFnCacheExpensive","getterFnCacheDefault","pathKeys","pathKeysLength","code","needsEnsureSafeObject","lookupJs","evaledFnGetter","Function","sharedGetter","fn.assign","getValueOf","objectValueOf","cacheDefault","cacheExpensive","wrapSharedExpression","wrapped","collectExpressionInputs","inputs","expressionInputDirtyCheck","oldValueOfValue","inputsWatchDelegate","parsedExpression","inputExpressions","$$inputs","lastResult","oldInputValue","expressionInputWatch","newInputValue","oldInputValueOfValues","expressionInputsWatch","changed","oneTimeWatchDelegate","oneTimeWatch","oneTimeListener","old","$$postDigest","oneTimeLiteralWatchDelegate","isAllDefined","allDefined","constantWatchDelegate","constantWatch","constantListener","addInterceptor","interceptorFn","watchDelegate","regularInterceptedExpression","oneTimeInterceptedExpression","$parseOptions","$parseOptionsExpensive","oneTime","cacheKey","parseOptions","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","callOnce","resolveFn","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","Q","resolver","promises","results","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$listeners","$$listenerCount","beginPhase","phase","decrementListenerCount","current","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","destroyChild","child","$$ChildScope","this.$$ChildScope","watchExp","watcher","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","expr","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueue","$eval","isNaN","msg","next","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","currentScope","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","msie","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","transformer","httpOptions","handleError","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","matchAgainstAnyProp","predicateFn","createPredicateFn","actual","expected","item","deepCompare","actualType","expectedType","expectedVal","keyIsDollar","actualVal","$locale","formats","amount","currencySymbol","fractionSize","formatNumber","number","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","parseFloat","fractionLen","min","round","fraction","lgroup","group","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","ms","format","timezone","NUMBER_STRING","DATE_FORMATS_SPLIT","setMinutes","getMinutes","getTimezoneOffset","DATE_FORMATS","object","spacing","limit","Infinity","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","v1","v2","map","predicate","ngDirective","FormController","controls","parentForm","$$parentForm","nullFormCtrl","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$addControl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","set","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","$ngModelMinErr","timezoneOffset","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","validity","VALIDITY_STATE_PROPERTY","badInput","typeMismatch","parseConstantExpr","fallback","parseFn","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","classDirective","arrayDifference","arrayClasses","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","REGEX_STRING_REGEXP","documentMode","isActive_","active","full","major","minor","dot","codeName","JQLite._data","MOUSE_EVENT_MAP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeData","removeAttribute","css","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","related","relatedTarget","contains","off","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","$$annotate","$animateMinErr","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","runAnimationPostDigest","cancelFn","$$cancelFn","defer.promise.$$cancelFn","ngAnimatePostDigest","ngAnimateNotifyComplete","resolveElementClasses","hasClasses","cachedClassManipulation","op","asyncPromise","currentDefer","applyStyles","styles","from","to","animate","enter","leave","move","$$addClassImmediately","$$removeClassImmediately","add","createdCache","STORAGE_KEY","$$setClassImmediately","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","CALL","APPLY","BIND","CONSTANTS","null","true","false","constantGetter","OPERATORS","+","-","*","/","%","===","!==","==","!=","<",">","<=",">=","&&","||","!","ESCAPE","lex","tokens","readString","peek","readNumber","isIdent","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","operator","throwError","chars","isExpOperator","start","end","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ZERO","statements","primary","expect","filterChain","consume","arrayDeclaration","functionCall","objectIndex","fieldAccess","peekToken","e1","e2","e3","e4","peekAhead","t","unaryFn","right","$parseUnaryFn","binaryFn","left","isBranching","$parseBinaryFn","$parseConstant","$parseStatements","inputFn","argsFn","$parseFilter","every","assignment","ternary","$parseAssignment","logicalOR","middle","$parseTernary","logicalAND","equality","relational","additive","multiplicative","unary","field","$parseFieldAccess","indexFn","$parseObjectIndex","fnGetter","contextGetter","expressionText","$parseFunctionCall","elementFns","$parseArrayLiteral","valueFns","$parseObjectLiteral","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","Z","timeZoneGetter","zone","paddedZone","ww","w","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","ngFormCompile","formElement","ngFormPreLink","handleFormSubmission","parentFormCtrl","alias","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","DEFAULT_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","minutes","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","ctrls","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$viewChangeListeners","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","parserValid","allValid","$$writeModelToScope","this.$$runValidators","parseValid","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","trimValues","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","that","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","getStringValue","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","forceAsyncEvents","ngEventHandler","$event","previousElements","ngIfWatchAction","newScope","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","lhs","rhs","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","itemKey","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","tempClasses","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","selectMultipleWatch","setupAsOptions","callExpression","exprFn","valueName","keyName","createIsSelectedFn","selectedSet","trackFn","trackIndex","isSelected","compareValueFn","selectAsFn","scheduleRendering","renderScheduled","render","updateLabelMap","labelMap","label","added","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","existingOption","valuesFn","anySelected","optionId","trackKeysCache","groupByFn","displayFn","nullOption","groupIndex","groupLength","optionGroupsCache","optGroupTemplate","lastElement","optionTemplate","optionsExp","selectAs","track","selectionChanged","selectedKey","viewValueFn","getLabels","toDisplay","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","$$csp"]
8
-}
securis/src/main/webapp/js/angular/chosen.js
deleted file mode 100644
....@@ -1,109 +0,0 @@
1
-// Generated by CoffeeScript 1.6.2
2
-(function() {
3
- var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
4
-
5
- angular.module('localytics.directives', []);
6
-
7
- angular.module('localytics.directives').directive('chosen', function() {
8
- var CHOSEN_OPTION_WHITELIST, NG_OPTIONS_REGEXP, isEmpty, snakeCase;
9
-
10
- NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;
11
- CHOSEN_OPTION_WHITELIST = ['noResultsText', 'allowSingleDeselect', 'disableSearchThreshold', 'disableSearch', 'enableSplitWordSearch', 'inheritSelectClasses', 'maxSelectedOptions', 'placeholderTextMultiple', 'placeholderTextSingle', 'searchContains', 'singleBackstrokeDelete', 'displayDisabledOptions', 'displaySelectedOptions', 'width'];
12
- snakeCase = function(input) {
13
- return input.replace(/[A-Z]/g, function($1) {
14
- return "_" + ($1.toLowerCase());
15
- });
16
- };
17
- isEmpty = function(value) {
18
- var key;
19
-
20
- if (angular.isArray(value)) {
21
- return value.length === 0;
22
- } else if (angular.isObject(value)) {
23
- for (key in value) {
24
- if (value.hasOwnProperty(key)) {
25
- return false;
26
- }
27
- }
28
- }
29
- return true;
30
- };
31
- return {
32
- restrict: 'A',
33
- require: '?ngModel',
34
- terminal: true,
35
- link: function(scope, element, attr, ngModel) {
36
- var chosen, defaultText, disableWithMessage, empty, initOrUpdate, match, options, origRender, removeEmptyMessage, startLoading, stopLoading, valuesExpr, viewWatch;
37
-
38
- element.addClass('localytics-chosen');
39
- options = scope.$eval(attr.chosen) || {};
40
- angular.forEach(attr, function(value, key) {
41
- if (__indexOf.call(CHOSEN_OPTION_WHITELIST, key) >= 0) {
42
- return options[snakeCase(key)] = scope.$eval(value);
43
- }
44
- });
45
- startLoading = function() {
46
- return element.addClass('loading').attr('disabled', true).trigger('chosen:updated');
47
- };
48
- stopLoading = function() {
49
- return element.removeClass('loading').attr('disabled', false).trigger('chosen:updated');
50
- };
51
- chosen = null;
52
- defaultText = null;
53
- empty = false;
54
- initOrUpdate = function() {
55
- if (chosen) {
56
- return element.trigger('chosen:updated');
57
- } else {
58
- chosen = element.chosen(options).data('chosen');
59
- return defaultText = chosen.default_text;
60
- }
61
- };
62
- removeEmptyMessage = function() {
63
- empty = false;
64
- return element.attr('data-placeholder', defaultText);
65
- };
66
- disableWithMessage = function() {
67
- empty = true;
68
- return element.attr('data-placeholder', chosen.results_none_found).attr('disabled', true).trigger('chosen:updated');
69
- };
70
- if (ngModel) {
71
- origRender = ngModel.$render;
72
- ngModel.$render = function() {
73
- origRender();
74
- return initOrUpdate();
75
- };
76
- if (attr.multiple) {
77
- viewWatch = function() {
78
- return ngModel.$viewValue;
79
- };
80
- scope.$watch(viewWatch, ngModel.$render, true);
81
- }
82
- } else {
83
- initOrUpdate();
84
- }
85
- attr.$observe('disabled', function() {
86
- return element.trigger('chosen:updated');
87
- });
88
- if (attr.ngOptions && ngModel) {
89
- match = attr.ngOptions.match(NG_OPTIONS_REGEXP);
90
- valuesExpr = match[7];
91
- return scope.$watchCollection(valuesExpr, function(newVal, oldVal) {
92
- if (angular.isUndefined(newVal)) {
93
- return startLoading();
94
- } else {
95
- if (empty) {
96
- removeEmptyMessage();
97
- }
98
- stopLoading();
99
- if (isEmpty(newVal)) {
100
- return disableWithMessage();
101
- }
102
- }
103
- });
104
- }
105
- }
106
- };
107
- });
108
-
109
-}).call(this);
securis/src/main/webapp/js/angular/toaster.js
deleted file mode 100644
....@@ -1,145 +0,0 @@
1
-'use strict';
2
-
3
-/*
4
- * AngularJS Toaster
5
- * Version: 0.4.1
6
- *
7
- * Copyright 2013 Jiri Kavulak.
8
- * All Rights Reserved.
9
- * Use, reproduction, distribution, and modification of this code is subject to the terms and
10
- * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php
11
- *
12
- * Author: Jiri Kavulak
13
- * Related to project of John Papa and Hans Fjällemark
14
- */
15
-
16
-angular.module('toaster',[] )
17
-.service('toaster', ['$rootScope', function ($rootScope) {
18
- this.pop = function (type, title, body, timeout, bodyOutputType) {
19
- this.toast = {
20
- type: type,
21
- title: title,
22
- body: body,
23
- timeout: timeout,
24
- bodyOutputType: bodyOutputType
25
- };
26
- $rootScope.$broadcast('toaster-newToast');
27
- };
28
-}])
29
-.constant('toasterConfig', {
30
- 'tap-to-dismiss': true,
31
- 'newest-on-top': true,
32
- //'fade-in': 1000, // done in css
33
- //'on-fade-in': undefined, // not implemented
34
- //'fade-out': 1000, // done in css
35
- // 'on-fade-out': undefined, // not implemented
36
- //'extended-time-out': 1000, // not implemented
37
- 'time-out': 5000, // Set timeOut and extendedTimeout to 0 to make it sticky
38
- 'icon-classes': {
39
- error: 'toast-error',
40
- info: 'toast-info',
41
- success: 'toast-success',
42
- warning: 'toast-warning'
43
- },
44
- 'body-output-type': '', // Options: '', 'trustedHtml', 'template'
45
- 'body-template': 'toasterBodyTmpl.html',
46
- 'icon-class': 'toast-info',
47
- 'position-class': 'toast-top-right',
48
- 'title-class': 'toast-title',
49
- 'message-class': 'toast-message'
50
- })
51
-.directive('toasterContainer', ['$compile', '$timeout', '$sce', 'toasterConfig', 'toaster',
52
-function ($compile, $timeout, $sce, toasterConfig, toaster) {
53
- return {
54
- replace: true,
55
- restrict: 'EA',
56
- link: function (scope, elm, attrs){
57
-
58
- var id = 0;
59
-
60
- var mergedConfig = toasterConfig;
61
- if (attrs.toasterOptions) {
62
- angular.extend(mergedConfig, scope.$eval(attrs.toasterOptions));
63
- }
64
-
65
- scope.config = {
66
- position: mergedConfig['position-class'],
67
- title: mergedConfig['title-class'],
68
- message: mergedConfig['message-class'],
69
- tap: mergedConfig['tap-to-dismiss']
70
- };
71
-
72
- function addToast (toast){
73
- toast.type = mergedConfig['icon-classes'][toast.type];
74
- if (!toast.type)
75
- toast.type = mergedConfig['icon-class'];
76
-
77
- id++;
78
- angular.extend(toast, { id: id });
79
-
80
- switch(toast.bodyOutputType)
81
- {
82
- case 'trustedHtml':
83
- toast.html = $sce.trustAsHtml(toast.body);
84
- break;
85
- case 'template':
86
- toast.bodyTemplate = mergedConfig['body-template'];
87
- break;
88
- }
89
-
90
- var timeout = typeof(toast.timeout) == "number" ? toast.timeout : mergedConfig['time-out'];
91
- if (timeout > 0)
92
- setTimeout(toast, timeout);
93
-
94
- if (mergedConfig['newest-on-top'] === true)
95
- scope.toasters.unshift(toast);
96
- else
97
- scope.toasters.push(toast);
98
- }
99
-
100
- function setTimeout(toast, time){
101
- toast.timeout= $timeout(function (){
102
- scope.removeToast(toast.id);
103
- }, time);
104
- }
105
-
106
- scope.toasters = [];
107
- scope.$on('toaster-newToast', function () {
108
- addToast(toaster.toast);
109
- });
110
- },
111
- controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {
112
-
113
- $scope.stopTimer = function(toast){
114
- if(toast.timeout)
115
- $timeout.cancel(toast.timeout);
116
- };
117
-
118
- $scope.removeToast = function (id){
119
- var i = 0;
120
- for (i; i < $scope.toasters.length; i++){
121
- if($scope.toasters[i].id === id)
122
- break;
123
- }
124
- $scope.toasters.splice(i, 1);
125
- };
126
-
127
- $scope.remove = function(id){
128
- if ($scope.config.tap === true){
129
- $scope.removeToast(id);
130
- }
131
- };
132
- }],
133
- template:
134
- '<div id="toast-container" ng-class="config.position">' +
135
- '<div ng-repeat="toaster in toasters" class="toast" ng-class="toaster.type" ng-click="remove(toaster.id)" ng-mouseover="stopTimer(toaster)">' +
136
- '<div ng-class="config.title">{{toaster.title}}</div>' +
137
- '<div ng-class="config.message" ng-switch on="toaster.bodyOutputType">' +
138
- '<div ng-switch-when="trustedHtml" ng-bind-html="toaster.html"></div>' +
139
- '<div ng-switch-when="template"><div ng-include="toaster.bodyTemplate"></div></div>' +
140
- '<div ng-switch-default >{{toaster.body}}</div>' +
141
- '</div>' +
142
- '</div>' +
143
- '</div>'
144
- };
145
-}]);
securis/src/main/webapp/js/catalogs.js
deleted file mode 100644
....@@ -1,286 +0,0 @@
1
-(function() {
2
- 'use strict';
3
-
4
- /*
5
- * Catalogs module
6
- */
7
-
8
- angular
9
- .module('catalogs', [ 'ngResource' ])
10
-
11
- .service(
12
- 'Catalogs',
13
- [
14
- '$rootScope',
15
- '$http',
16
- '$resource',
17
- '$q',
18
- function($rootScope, $http, $resource, $q) {
19
- var resources = {
20
- application : $resource(
21
- 'application/:id', {
22
- id : '@id'
23
- }),
24
- user : $resource('user/:id', {
25
- id : '@username'
26
- }),
27
- organization : $resource(
28
- 'organization/:id', {
29
- id : '@id'
30
- }),
31
- licensetype : $resource(
32
- 'licensetype/:id', {
33
- id : '@id'
34
- })
35
- }
36
-
37
- var _metadata = null;
38
- var _current = null;
39
-
40
- var _list = function() {
41
- return $http.get('js/catalogs.json')
42
- .success(function(data) {
43
- _metadata = data;
44
- })
45
- }
46
- this.init = function() {
47
- if (_metadata) {
48
- console.debug('Catalogs already initilizated');
49
- var defer = $q.defer();
50
- defer.resolve(_metadata);
51
- return defer.promise;
52
- }
53
- return _list();
54
- }
55
- this.getList = function() {
56
- return _metadata;
57
- }
58
- this.getName = function(index) {
59
- if (index === undefined)
60
- return _current ? _current.name : '';
61
- return _metadata ? _metadata[index].name
62
- : '';
63
- }
64
- this.getResource = function(res) {
65
- if (res === undefined)
66
- return _current ? resources[_current.resource]
67
- : null;
68
- return resources[res];
69
- }
70
- this.getPk = function(catalogMetadata) {
71
- if (!catalogMetadata) {
72
- catalogMetadata = _current;
73
- }
74
-
75
- for (var i = 0; i < catalogMetadata.fields.length; i++) {
76
- if (catalogMetadata.fields[i].pk) {
77
- return catalogMetadata.fields[i].name;
78
- }
79
- }
80
-
81
- return null;
82
- }
83
- /**
84
- * Returns catalog metadata
85
- *
86
- * @param index:
87
- * Return current catalog if
88
- * undefined, if string It find the
89
- * catalog by resoource name if
90
- * number it find it by position
91
- */
92
- this.getMetadata = function(index) {
93
- if (!_metadata) {
94
- throw new Error('There is no catalog metadata info');
95
- }
96
- if (index === undefined) {
97
- return _current;
98
- }
99
- if (typeof index === 'string') {
100
- for (var i = _metadata.length - 1; i >= 0
101
- && _metadata[i].resource !== index; i--)
102
- ;
103
- index = i;
104
- }
105
-
106
- return _metadata[index];
107
- }
108
- this.setCurrent = function(index) {
109
- if (!_metadata)
110
- throw new Error(
111
- 'There is no catalog metadata info');
112
- if (index === undefined)
113
- _current = null;
114
- else
115
- _current = _metadata[index];
116
- }
117
- /***********************************************
118
- * Catalog fields methods *
119
- **********************************************/
120
-
121
- /**
122
- * Returns the first field in form that should
123
- * get the focus. We find the first field that
124
- * is not read only
125
- */
126
- this.getFFF = this.getFirstFocusableField = function() {
127
- if (!_current)
128
- throw new Error(
129
- 'There is no current catalog selected');
130
-
131
- for (var i = 0; i < _current.fields.length; i++)
132
- if (!_current.fields[i].readOnly)
133
- return _current.fields[i].name;
134
-
135
- return null;
136
- }
137
-
138
- /**
139
- * Find the field by name or position
140
- */
141
- this.getField = function(key, catalog) {
142
- catalog = catalog || _current;
143
- if (!catalog)
144
- throw new Error('There is no current catalog selected');
145
- var index = -1;
146
- if (typeof key === 'string') {
147
- for (var i = catalog.fields.length - 1; i >= 0
148
- && catalog.fields[i].name !== key; i--);
149
- index = i;
150
- } else {
151
- index = key; // In this case key === field position
152
- }
153
-
154
- return index === -1 ? {}
155
- : catalog.fields[index];
156
- }
157
-
158
- /***********************************************
159
- * Catalog resource operations on server *
160
- **********************************************/
161
-
162
- function _success(response) {
163
- console.debug('$resource action success')
164
- console.log(_current);
165
-
166
- }
167
- function _fail(response) {
168
- console.error('Error trying to get data, HTTP error code: '
169
- + response.status)
170
- }
171
-
172
- this.save = function(data) {
173
- if (!_current) {
174
- throw new Error('There is no current catalog selected');
175
- }
176
- var resource = this.getResource();
177
- return resource.save(data, _success, _fail);
178
- }
179
- this.get = function(id, _onsuccess, _onfail) {
180
- if (!_current) {
181
- throw new Error('There is no current catalog selected');
182
- }
183
- var resource = this.getResource();
184
- return resource.get({id: id}, _onsuccess, _onfail);
185
- }
186
- this.remove = function(data) {
187
- return this.getResource().remove({}, data,
188
- _success, _fail)
189
- }
190
- this.query = function() {
191
- var list = this.getResource().query();
192
- list.$promise.then(_success, _fail);
193
- return list;
194
- }
195
- this.refreshRef = function(refs, res,
196
- preloadedData) {
197
- // We check if there is some field for the
198
- // resource passed as parameter
199
- var field = (function() {
200
- for (var i = _current.fields.length - 1; i >= 0; i--) {
201
- if (_current.fields[i].resource === res)
202
- return _current.fields[i];
203
- }
204
- return null;
205
- })();
206
-
207
- // If field for that resource is not found
208
- // there is nothing to refresh
209
- if (!field)
210
- return;
211
- var resource = this.getResource(res);
212
- var data = preloadedData || resource.query({}, _success, _fail);
213
- var that = this;
214
- data.$promise.then(function(responseData) {
215
- var pk = that.getPk(that
216
- .getMetadata(field.resource))
217
- var comboData = []
218
- responseData.forEach(function(row) {
219
- comboData.push({
220
- id : row[pk],
221
- label : row.label || row.name
222
- || row.code
223
- || row.first_name + ' '
224
- + row.last_name
225
- });
226
- })
227
- refs[field.name] = comboData;
228
- })
229
- }
230
- this.loadRefs = function(callback, refsFields) {
231
- if (!refsFields || refsFields.length === 0) {
232
- if (!_current) {
233
- throw new Error('There is no current catalog selected');
234
- }
235
- refsFields = [];
236
- _current.fields.forEach(function(f) {
237
- if (f.resource) {
238
- refsFields.push(f);
239
- }
240
- });
241
- }
242
-
243
- var that = this;
244
- var promises = []
245
- var refs = []
246
- refsFields.forEach(function(f) {
247
- var resource = that
248
- .getResource(f.resource);
249
- refs[f.name] = resource.query({},
250
- _success, _fail);
251
- promises.push(refs[f.name].$promise);
252
- });
253
-
254
- $q.all(promises)
255
- .then(function() {
256
- refsFields.forEach(function(rf) {
257
- var cat = that.getResource(rf.resource);
258
- var pk = that.getPk(that.getMetadata(rf.resource))
259
- //console.log('PK field for ' + rf.name + ' is ' + pk)
260
- var comboData = []
261
- refs[rf.name].forEach(function(row) {
262
- comboData.push({
263
- id : row[pk],
264
- code : row.code,
265
- label : row.label
266
- || row.name
267
- || row.code
268
- || row.first_name
269
- + ' '
270
- + (row.last_name || '')
271
- });
272
- })
273
- refs[rf.name] = comboData;
274
- });
275
- // Next lines are to load special catalogs with predefined values, just like user roles
276
- _current && _current.fields.forEach(function(f) {
277
- if (f.values)
278
- refs[f.name] = f.values;
279
- });
280
- callback(refs);
281
- })
282
- }
283
-
284
- } ])
285
-
286
-})();
securis/src/main/webapp/js/catalogs.json
deleted file mode 100644
....@@ -1,210 +0,0 @@
1
-[ {
2
- "name" : "Applications",
3
- "resource" : "application",
4
- "list_fields" : [ "name", "description", "creationTimestamp" ],
5
- "fields" : [ {
6
- "name" : "id",
7
- "display" : "ID",
8
- "type" : "number",
9
- "pk" : true,
10
- "autogenerate" : true,
11
- "readOnly" : true
12
- }, {
13
- "name" : "code",
14
- "display" : "Code",
15
- "type" : "string",
16
- "maxlength" : 4,
17
- "mandatory" : true
18
- }, {
19
- "name" : "name",
20
- "display" : "Name",
21
- "type" : "string",
22
- "maxlength" : 45,
23
- "mandatory" : true
24
- }, {
25
- "name" : "description",
26
- "display" : "Description",
27
- "type" : "string",
28
- "maxlength" : 500,
29
- "multiline" : 2
30
- }, {
31
- "name" : "license_filename",
32
- "display" : "License filename",
33
- "type" : "string",
34
- "maxlength" : 100,
35
- "mandatory" : true
36
- }, {
37
- "name" : "creation_timestamp",
38
- "display" : "Creation date",
39
- "autogenerate" : true,
40
- "type" : "date",
41
- "readOnly" : true
42
- }, {
43
- "name" : "metadata",
44
- "display" : "Metadata",
45
- "type" : "metadata",
46
- "allow_creation": true
47
- } ]
48
-}, {
49
- "name" : "License types",
50
- "list_fields" : [ "code", "name", "application_name", "creationTimestamp" ],
51
- "resource" : "licensetype",
52
- "fields" : [ {
53
- "name" : "id",
54
- "display" : "ID",
55
- "type" : "number",
56
- "pk" : true,
57
- "autogenerate" : true,
58
- "readOnly" : true
59
- }, {
60
- "name" : "code",
61
- "display" : "Code",
62
- "type" : "string",
63
- "maxlength" : 10,
64
- "mandatory" : true
65
- }, {
66
- "name" : "name",
67
- "display" : "Name",
68
- "type" : "string",
69
- "maxlength" : 45,
70
- "mandatory" : true
71
- }, {
72
- "name" : "description",
73
- "display" : "Description",
74
- "type" : "string",
75
- "maxlength" : 500,
76
- "multiline" : 2
77
- }, {
78
- "name" : "application_id",
79
- "display" : "Application",
80
- "resource" : "application",
81
- "mandatory" : true,
82
- "type" : "select",
83
- "onchange": "updateMetadata"
84
- }, {
85
- "name" : "creation_timestamp",
86
- "display" : "Creation date",
87
- "autogenerate" : true,
88
- "type" : "date",
89
- "readOnly" : true
90
- }, {
91
- "name" : "application_name",
92
- "display" : "Application",
93
- "listingOnly" : true
94
- }, {
95
- "name" : "metadata",
96
- "display" : "Metadata",
97
- "type" : "metadata",
98
- "allow_creation": false
99
- } ]
100
-}, {
101
- "name" : "Organizations",
102
- "list_fields" : [ "code", "name", "org_parent_name", "creationTimestamp" ],
103
- "resource" : "organization",
104
- "fields" : [ {
105
- "name" : "id",
106
- "display" : "ID",
107
- "type" : "number",
108
- "pk" : true,
109
- "autogenerate" : true,
110
- "readOnly" : true
111
- }, {
112
- "name" : "code",
113
- "display" : "Code",
114
- "type" : "string",
115
- "maxlength" : 10,
116
- "mandatory" : true
117
- }, {
118
- "name" : "name",
119
- "display" : "Name",
120
- "type" : "string",
121
- "maxlength" : 45,
122
- "mandatory" : true
123
- }, {
124
- "name" : "description",
125
- "display" : "Description",
126
- "type" : "string",
127
- "maxlength" : 500,
128
- "multiline" : 2
129
- }, {
130
- "name" : "org_parent_id",
131
- "display" : "Parent organization",
132
- "resource" : "organization",
133
- "type" : "select"
134
- }, {
135
- "name" : "users_ids",
136
- "display" : "Users",
137
- "resource" : "user",
138
- "type" : "multiselect"
139
- }, {
140
- "name" : "creation_timestamp",
141
- "display" : "Creation date",
142
- "autogenerate" : true,
143
- "type" : "date",
144
- "readOnly" : true
145
- }, {
146
- "name" : "org_parent_name",
147
- "display" : "Parent org",
148
- "listingOnly" : true
149
- } ]
150
-}, {
151
- "name" : "Users",
152
- "list_fields" : [ "username", "first_name", "last_name", "lastLogin" ],
153
- "resource" : "user",
154
- "fields" : [ {
155
- "name" : "username",
156
- "display" : "Username",
157
- "type" : "string",
158
- "maxlength" : 45,
159
- "pk" : true,
160
- "readOnly" : true,
161
- "mandatory" : true
162
- }, {
163
- "name" : "email",
164
- "display" : "Email",
165
- "type" : "email",
166
- "maxlength" : 150,
167
- "mandatory" : true
168
- }, {
169
- "name" : "first_name",
170
- "display" : "First name",
171
- "type" : "string",
172
- "maxlength" : 100,
173
- "mandatory" : true
174
- }, {
175
- "name" : "password",
176
- "display" : "Password",
177
- "type" : "password",
178
- "maxlength" : 100,
179
- "mandatory" : false
180
- }, {
181
- "name" : "last_name",
182
- "display" : "Last name",
183
- "type" : "string",
184
- "maxlength" : 100
185
- }, {
186
- "name" : "organizations_ids",
187
- "display" : "Organizations",
188
- "resource" : "organization",
189
- "type" : "multiselect"
190
- }, {
191
- "name" : "roles",
192
- "display" : "Roles",
193
- "values" : [{"id":1, "label":"Advance"}, {"id":2, "label":"Admin"}],
194
- "type" : "multiselect"
195
- }, {
196
- "name" : "lastLogin",
197
- "display" : "Last login",
198
- "autogenerate" : true,
199
- "type" : "date",
200
- "readOnly" : true
201
- }, {
202
- "name" : "creation_timestamp",
203
- "display" : "Creation date",
204
- "autogenerate" : true,
205
- "type" : "date",
206
- "readOnly" : true
207
- }]
208
- }
209
-
210
-]
securis/src/main/webapp/js/commons.js
deleted file mode 100644
....@@ -1,224 +0,0 @@
1
-(function() {
2
- 'use strict';
3
-
4
- var app = angular.module('app', [ 'ngRoute', 'ngAnimate', 'ngResource' ]);
5
-
6
- app.directive(
7
- 'catalogField',
8
- function() {
9
- return {
10
- restrict : 'A', // only activate on element
11
- // attribute
12
- require : '?ngModel', // get a hold of
13
- // NgModelController
14
- link : function(scope, element, attrs, ngModel) {
15
- if (!ngModel)
16
- return; // do nothing if no ng-model
17
- // TODO: Replace the hard-coded form ID by the
18
- // appropiate dynamic field
19
- scope.catalogForm[attrs.name] = scope.catalogForm['{{field.name}}'];
20
- scope.catalogForm[attrs.name].$name = attrs.name;
21
- }
22
- };
23
- });
24
-
25
- app.factory('Catalogs', function($http, $resource) {
26
- var CatalogsService = {
27
- resources : {
28
- application : $resource('application/:appId', {
29
- appId : '@id'
30
- }, {
31
- update : {
32
- method : "PUT"
33
- },
34
- test: {
35
- url: '/application/:appId',
36
- method : "DELETE",
37
- params : {
38
- appId : '@id'
39
- }
40
- }
41
- }),
42
- user : $resource('user/:userId', {
43
- userId : '@id'
44
- }, {
45
- update : {
46
- method : "PUT"
47
- }
48
- }),
49
- licensetype : $resource('licenseType/:licenseTypeId', {
50
- licenseTypeId : '@id'
51
- }, {
52
- update : {
53
- method : "PUT"
54
- }
55
- })
56
-
57
- },
58
- list : function(initFn) {
59
- $http.get('js/catalogs.json').success(function(data) {
60
- console.log(data);
61
- CatalogsService.data = data;
62
- initFn();
63
- })
64
- return CatalogsService;
65
- },
66
- getName : function(index) {
67
- return CatalogsService.data ? CatalogsService.data[index].name
68
- : '';
69
- },
70
- getResource : function(index) {
71
- return CatalogsService.data ? CatalogsService.data[index].resource
72
- : '';
73
- },
74
- getMetadata : function(index) {
75
- return CatalogsService.data ? CatalogsService.data[index] : {};
76
- },
77
- save: function(catalog, data) {
78
- var resource = CatalogsService.resources[catalog.toLowerCase()];
79
- function success(data) {
80
- console.log('success')
81
- console.log(data)
82
- }
83
- function fail(data, status) {
84
- console.log('error')
85
- console.error(data)
86
- console.error(status)
87
- }
88
- if (data.id && data.id !== '')
89
- return resource.update(data, success, fail)
90
- else
91
- return resource.save(data, success, fail)
92
- },
93
- remove: function(catalog, data) {
94
- var resource = CatalogsService.resources[catalog.toLowerCase()];
95
- function success(data) {
96
- console.log('success')
97
- console.log(data)
98
- }
99
- function fail(data, status) {
100
- console.log('error')
101
- console.error(data)
102
- console.error(status)
103
- }
104
- return resource.remove({}, data, success, fail)
105
- },
106
- query: function(catalog, callback) {
107
- console.log('HI catalog ???? ' + catalog);
108
- var resource = CatalogsService.resources[catalog.toLowerCase()];
109
- function success(data) {
110
- console.log('success')
111
- console.log(data)
112
- }
113
- function fail(data, status) {
114
- console.log('error')
115
- console.error(data)
116
- console.error(status)
117
- }
118
- return resource.query({}, success, fail);
119
- }
120
- }
121
-
122
- return CatalogsService;
123
-
124
- });
125
-
126
- app.controller('CatalogsCtrl', [
127
- '$scope',
128
- '$http',
129
- 'Catalogs',
130
- function($scope, $http, Catalogs) {
131
- $scope.formu = {};
132
- $scope.catalogIndex = 0;
133
- $scope.catalogs = Catalogs.list(function() {
134
- $scope.catalogMetadata = Catalogs.getMetadata($scope.catalogIndex);
135
- $scope.list = Catalogs.query(Catalogs.getResource($scope.catalogIndex));
136
- });
137
-
138
- $scope.catalogMetadata = {};
139
- $scope.selectCatalog = function(index, $event) {
140
- $scope.catalogIndex = index;
141
- $scope.catalogMetadata = Catalogs.getMetadata($scope.catalogIndex);
142
- $scope.list = Catalogs.query(Catalogs.getResource($scope.catalogIndex));
143
- console.log($event);
144
- }
145
- $scope.edit = function(data) {
146
- $scope.showForm = true;
147
- $scope.isNew = false;
148
- for (var k in data) {
149
- if (k.indexOf('$') !== 0) $scope.formu[k] = data[k]
150
- }
151
- // TODO: Load in formu values for Form
152
- // $scope.formu = {};
153
- }
154
- $scope.delete = function(data) {
155
- BootstrapDialog.confirm('The record will be deleted, are you sure?', function(result){
156
- if(result) {
157
- var catalogName = Catalogs.getResource($scope.catalogIndex);
158
- var promise = Catalogs.remove(catalogName, data).$promise;
159
- promise.then(function(data) {
160
- $scope.list = Catalogs.query(catalogName);
161
- });
162
- }
163
- });
164
- $scope.showForm = false;
165
- $scope.isNew = false;
166
- // TODO: Load in formu values for Form
167
- // $scope.formu = {};
168
- }
169
-
170
- } ]);
171
-
172
- app.controller('CatalogFormCtrl', [ '$scope', '$http', 'Catalogs',
173
- function($scope, $http, Catalogs) {
174
- $scope.showForm = false;
175
- $scope.scope = $scope;
176
- console.log('Form: currentCatalog:' + $scope.cataLogIndex);
177
-
178
- $scope.editNew = function() {
179
- $scope.showForm = true;
180
- $scope.isNew = true;
181
- // $scope.formu = {};
182
- }
183
- $scope.cancel = function() {
184
- $scope.showForm = false;
185
- }
186
-
187
- $scope.saveCatalog = function() {
188
- if ($scope.catalogForm.$invalid) {
189
- alert(JSON.stringify($scope.catalogForm))
190
- } else {
191
- var catalogName = Catalogs.getResource($scope.catalogIndex);
192
- var promise = Catalogs.save(catalogName, $scope.formu).$promise;
193
- promise.then(function(data) {
194
- $scope.$parent.list = Catalogs.query(catalogName);
195
- });
196
- }
197
- }
198
- } ]);
199
-
200
- app.controller('CatalogListCtrl', [ '$scope', '$http', '$filter', 'Catalogs',
201
- function($scope, $http, $filter, Catalogs) {
202
- console.log('List: currentCatalog: ' + $scope.currentCatalog);
203
- var _indexOfField = function(name) {
204
- if (!$scope.catalogMetadata) return -1;
205
- for (var i = $scope.catalogMetadata.fields.length - 1; i >= 0 && $scope.catalogMetadata.fields[i].name !== name; i--);
206
- return i;
207
- }
208
-
209
- $scope.print = function(name, value) {
210
- var index = _indexOfField(name);
211
- if (index === -1) return value;
212
- var type = $scope.catalogMetadata.fields[index].type;
213
-
214
- return type === 'date' ? $filter('date')(value, 'yyyy-MM-dd') : value;
215
- }
216
-
217
- $scope.display = function(name) {
218
- var index = _indexOfField(name);
219
- return index === -1 ? '' : $scope.catalogMetadata.fields[index].display;
220
- }
221
-
222
- } ]);
223
-
224
-})();
securis/src/main/webapp/js/i18n.js
deleted file mode 100644
....@@ -1,82 +0,0 @@
1
-(function() {
2
- 'use strict';
3
-
4
- /*
5
- * Catalogs module
6
- */
7
-
8
- angular.module('i18n', [])
9
-
10
- .service('$L', ['$http', function ($http) {
11
- var url_tpl = '/lang/messages_{0}.json';
12
- var _defaultLang = 'en';
13
- var _currentLang = 'en';
14
- var _messages = null;
15
-
16
- /**
17
- * It works similar to MessageFormat in Java
18
- */
19
- var format = function() {
20
- var args = arguments;
21
-
22
- return this.replace(/\{(\d+)\}/g, function() {
23
- return args[arguments[1]];
24
- });
25
- };
26
-
27
- this.setLocale = function(newLoc) {
28
- _currentLang = newLoc;
29
- if (_currentLang === defaultLang)
30
- _messages = null;
31
- else {
32
- $http.get(format.apply(url_tpl, [newLoc])).success(function(data) {
33
- _messages = data;
34
- // TODO: Launch event ???
35
- });
36
- }
37
- }
38
-
39
- /**
40
- * It accepts direct messages and templates:
41
- * {
42
- * "hello": "hola",
43
- * "Hello {0}!!: "Hola {0}!!"
44
- * }
45
- * $L.get('hello'); // This returns "hola"
46
- * $L.get('Hello {0}!!', 'John'); // This returns: "Hola John!!" if languaje is spanish
47
- */
48
- this.get = function(msg) {
49
- if (!_messages || !_messages[msg]) {
50
- if (arguments.length === 1) return msg;
51
- var params = Array.prototype.slice.call(arguments, 1);
52
- return format.apply(msg, params);
53
- }
54
-
55
- if (arguments.length === 1) return _messages[msg];
56
- var params = Array.prototype.slice.call(arguments, 1);
57
- return format.apply(_messages[msg], params);
58
- }
59
-
60
- var that = this;
61
- String.prototype.$i18n = function() {
62
- var args = [this];
63
- Array.prototype.push.apply(args, Array.prototype.slice.call(arguments, 0));
64
- return that.get.apply(that, args)
65
- };
66
-
67
- }])
68
- .directive(
69
- 'i18n',
70
- function($L) {
71
- return {
72
- restrict : 'A', // only activate on element attribute
73
- require : '',
74
- link : function(scope, element, attrs) {
75
- var txt = attrs.i18n || element.text();
76
- element.text($L.get(txt));
77
- }
78
- };
79
- });
80
-
81
-
82
-})();
securis/src/main/webapp/js/lang/messages_es.json
deleted file mode 100644
....@@ -1,4 +0,0 @@
1
-{
2
-"": "",
3
-"": ""
4
-}
securis/src/main/webapp/js/lang/messages_fr.json
deleted file mode 100644
....@@ -1,4 +0,0 @@
1
-{
2
-"": "",
3
-"": ""
4
-}
securis/src/main/webapp/js/licenses.js
deleted file mode 100644
....@@ -1,926 +0,0 @@
1
-(function() {
2
- 'use strict';
3
-
4
-
5
-
6
- var HTTP_ERRORS = {
7
- 401: "Unathorized action",
8
- 418: "Application error",
9
- 403: "Forbidden action",
10
- 500: "Server error",
11
- 404: "Element not found"
12
- }
13
-
14
- var app = angular.module('securis');
15
- app.service('Packs', ['$L','$resource', '$http', 'toaster', function($L, $resource, $http, toaster) {
16
- var PACK_STATUS = {
17
- CREATED: 'CR',
18
- ACTIVE: 'AC',
19
- ONHOLD: 'OH',
20
- EXPIRED: 'EX',
21
- CANCELLED: 'CA'
22
- }
23
- var PACK_STATUSES = {
24
- 'CR': $L.get('Created'),
25
- 'AC': $L.get('Active'),
26
- 'OH': $L.get('On Hold'),
27
- 'EX': $L.get('Expired'),
28
- 'CA': $L.get('Cancelled')
29
- };
30
- /**
31
- * These transitions could be get from server, class Pack.Status, but we
32
- * copy them for simplicity, this info won't change easily
33
- */
34
- var PACK_ACTIONS_BY_STATUS = {
35
- edit: [PACK_STATUS.CREATED, PACK_STATUS.EXPIRED, PACK_STATUS.ONHOLD, PACK_STATUS.ACTIVE],
36
- activate: [PACK_STATUS.CREATED, PACK_STATUS.EXPIRED, PACK_STATUS.ONHOLD],
37
- putonhold: [PACK_STATUS.ACTIVE],
38
- cancel: [PACK_STATUS.EXPIRED, PACK_STATUS.ONHOLD, PACK_STATUS.ACTIVE],
39
- 'delete': [PACK_STATUS.CREATED, PACK_STATUS.CANCELLED]
40
- }
41
-
42
- var packResource = $resource('pack/:packId/:action',
43
- {
44
- packId : '@id',
45
- action : '@action'
46
- },
47
- {
48
- activate: {
49
- method: "POST",
50
- params: {action: "activate"}
51
- },
52
- putonhold: {
53
- method: "POST",
54
- params: {action: "putonhold"}
55
- },
56
- cancel: {
57
- method: "POST",
58
- params: {action: "cancel"}
59
- }
60
- }
61
- );
62
- this.getStatusColor = function(status) {
63
- var COLORS_BY_STATUS = {
64
- 'CR': '#808080',
65
- 'AC': '#329e5a',
66
- 'OH': '#9047c7',
67
- 'EX': '#ea7824',
68
- 'CA': '#a21717'
69
- };
70
-
71
- return COLORS_BY_STATUS[status];
72
- },
73
- this.getStatusName = function(status) {
74
- return PACK_STATUSES[status];
75
- }
76
-
77
- this.savePackData = function(pack, isNew, _onsuccess) {
78
- var _success = function() {
79
- _onsuccess();
80
- toaster.pop('success', 'Packs', $L.get("Pack '{0}' {1} successfully", pack.code, isNew ? $L.get("created") : $L.get("updated")));
81
- }
82
- var _error = function(error) {
83
- console.log(error);
84
- toaster.pop('error', 'Packs', $L.get("Error {0} pack '{1}'. Reason: {2}", isNew ? $L.get("creating") : $L.get("updating"), pack.code, $L.get(error.headers('X-SECURIS-ERROR-MSG'))));
85
- }
86
- packResource.save(pack, _success, _error);
87
- }
88
-
89
- this.isActionAvailable = function(action, pack) {
90
- var validStatuses = PACK_ACTIONS_BY_STATUS[action];
91
- return pack && validStatuses && validStatuses.indexOf(pack.status) !== -1;
92
- }
93
- var _createSuccessCallback = function(actionName, message, _innerCallback) {
94
- return function() {
95
- _innerCallback && _innerCallback();
96
- toaster.pop('success', actionName, message);
97
- }
98
- }
99
- var _createErrorCallback = function(pack, actionName, _innerCallback) {
100
- return function(error) {
101
- console.log(error);
102
- _innerCallback && _innerCallback();
103
- toaster.pop('error', actionName, $L.get("Error on action '{0}', pack '{1}'. Reason: {2}", actionName, pack.code, $L.get(error.headers('X-SECURIS-ERROR-MSG'))));
104
- }
105
- }
106
- this.getPacksList = function(_onsuccess, _onerror) {
107
- var query = packResource.query();
108
- query.$promise.then(_onsuccess, _onerror);
109
- return query;
110
- }
111
- this.activate = function(pack, _onsuccess, _onerror) {
112
- console.log('Activation on pack: ' + pack.id);
113
- var _success = _createSuccessCallback($L.get('Activation'), $L.get("Pack '{0}' {1} successfully", pack.code, $L.get("activated")), _onsuccess);
114
- var _error = _createErrorCallback(pack, $L.get('Activation'), _onerror);
115
- packResource.activate({id: pack.id}, _success, _error);
116
- }
117
- this.putonhold = function(pack, _onsuccess, _onerror) {
118
- console.log('Put on hold on pack: ' + pack.id);
119
- var _success = _createSuccessCallback($L.get('Put on hold'), $L.get("Pack '{0}' {1} successfully", pack.code, $L.get("put on hold")), _onsuccess);
120
- var _error = _createErrorCallback(pack, $L.get('Put on hold'), _onerror);
121
- packResource.putonhold({id: pack.id}, _success, _error);
122
- }
123
- this.nextliccode = function(packId, _onsuccess, _onerror) {
124
- console.log('Get next code: ' + packId);
125
- var _error = function(data, status, headers, config) {
126
- console.log(headers);
127
- toaster.pop('error', $L.get('Getting next code suffix'), $L.get("Error getting license code, pack ID: '{0}'. Reason: {1}", packId, $L.get(headers('X-SECURIS-ERROR-MSG'))));
128
- }
129
- $http.get("/securis/pack/"+packId+"/next_license_code").success(_onsuccess).error(_error);
130
- }
131
- this.cancel = function(pack, extra_data, _onsuccess, _onerror) {
132
- console.log('Cancellation on pack: ' + pack.id);
133
- var _success = _createSuccessCallback($L.get('Cancellation'), $L.get("Pack '{0}' {1} successfully", pack.code, $L.get("cancelled")), _onsuccess);
134
- var _error = _createErrorCallback(pack, $L.get('Cancellation'), _onerror);
135
- var params = angular.extend({id: pack.id}, extra_data);
136
- packResource.cancel(params, _success, _error);
137
- }
138
- this.delete = function(pack, _onsuccess, _onerror) {
139
- console.log('Delete on pack: ' + pack.id);
140
- var _success = _createSuccessCallback($L.get('Deletion'), $L.get("Pack '{0}' {1} successfully", pack.code, $L.get("deleted")), _onsuccess);
141
- var _error = _createErrorCallback(pack, $L.get('Deletion'), _onerror);
142
- packResource.delete({packId: pack.id}, _success, _error);
143
- }
144
-
145
- }]);
146
-
147
- app.service('Licenses', ['$L', '$resource', 'toaster', 'Packs', function($L, $resource, toaster, Packs) {
148
- var LIC_STATUS = {
149
- CREATED: 'CR',
150
- ACTIVE: 'AC',
151
- REQUESTED: 'RE',
152
- PREACTIVE: 'PA',
153
- EXPIRED: 'EX',
154
- BLOCKED: 'BL',
155
- CANCELLED: 'CA'
156
- }
157
-
158
- var LIC_STATUSES = {
159
- 'CR': $L.get('Created'),
160
- 'AC': $L.get('Active'),
161
- 'PA': $L.get('Pre-active'),
162
- 'RE': $L.get('Requested'),
163
- 'EX': $L.get('Expired'),
164
- 'BL': $L.get('Blocked'),
165
- 'CA': $L.get('Cancelled')
166
- };
167
-
168
- /**
169
- * These transitions could be get from server, class License.Status, but
170
- * we copy them for simplicity, this info won't change easily
171
- */
172
- var LIC_ACTIONS_BY_STATUS = {
173
- edit: [LIC_STATUS.REQUESTED, LIC_STATUS.CREATED, LIC_STATUS.EXPIRED, LIC_STATUS.PREACTIVE, LIC_STATUS.ACTIVE, LIC_STATUS.CANCELLED, LIC_STATUS.BLOCKED],
174
- add_request: [LIC_STATUS.CREATED],
175
- activate: [LIC_STATUS.CREATED, LIC_STATUS.REQUESTED, LIC_STATUS.PREACTIVE],
176
- send: [LIC_STATUS.ACTIVE, LIC_STATUS.PREACTIVE],
177
- download: [LIC_STATUS.ACTIVE, LIC_STATUS.PREACTIVE],
178
- block: [LIC_STATUS.CANCELLED],
179
- unblock: [LIC_STATUS.BLOCKED],
180
- cancel: [LIC_STATUS.REQUESTED, LIC_STATUS.EXPIRED, LIC_STATUS.PREACTIVE, LIC_STATUS.ACTIVE],
181
- 'delete': [LIC_STATUS.CREATED, LIC_STATUS.CANCELLED, LIC_STATUS.BLOCKED]
182
- }
183
-
184
- var licenseResource = $resource('license/:licenseId/:action', {
185
- licenseId : '@id',
186
- action : '@action'
187
- },
188
- {
189
- activate: {
190
- method: "POST",
191
- params: {action: "activate"}
192
- },
193
- cancel: {
194
- method: "POST",
195
- params: {action: "cancel"}
196
- }, // Download a file cannot be done form AJAX, We should do it
197
- // manually, using $http
198
- download: {
199
- method: "GET",
200
- params: {action: "download"}
201
- },
202
- block: {
203
- method: "POST",
204
- params: {action: "block"}
205
- },
206
- sendEmail: {
207
- method: "POST",
208
- params: {action: "send"}
209
- },
210
- unblock: {
211
- method: "POST",
212
- params: {action: "unblock"}
213
- }
214
- });
215
-
216
-
217
- this.isActionAvailable = function(action, lic) {
218
- var validStatuses = LIC_ACTIONS_BY_STATUS[action];
219
- return lic && validStatuses && validStatuses.indexOf(lic.status) !== -1;
220
- }
221
- this.getStatusColor = function(status) {
222
- var COLORS_BY_STATUS = {
223
- 'CR': '#808080',
224
- 'AC': '#329e5a',
225
- 'RE': '#2981d4',
226
- 'EX': '#ea7824',
227
- 'BL': '#ff0000',
228
- 'CA': '#a21717'
229
- };
230
-
231
- return COLORS_BY_STATUS[status];
232
- },
233
- this.getStatusName = function(status) {
234
- return LIC_STATUSES[status];
235
- }
236
-
237
- this.saveLicenseData = function(license, isNew, _onsuccess) {
238
- var _success = function() {
239
- _onsuccess();
240
- toaster.pop('success', 'Licenses', $L.get("License '{0}' {1} successfully", license.code, isNew ? $L.get("created") : $L.get("updated")));
241
- }
242
- var _error = function(error) {
243
- console.log(error);
244
- toaster.pop('error', 'Licenses', $L.get("Error {0} license '{1}'. Reason: {2}", isNew ? $L.get("creating") : $L.get("updating"), license.code, $L.get(error.headers('X-SECURIS-ERROR-MSG'))), 5000);
245
- if (error.headers('X-SECURIS-ERROR-CODE') === '1301') {
246
- Packs.nextliccode(license.pack_id, function(data) {
247
- if (license.code !== data) {
248
- // Only if the new code is different we can think about an erro related with License CODE
249
- license.code = data;
250
- toaster.pop('info', 'Licenses', $L.get("New license code, {0}, has been generated, please try again", license.code), 5000);
251
- }
252
- });
253
- }
254
- }
255
- licenseResource.save(license, _success, _error);
256
- }
257
-
258
- var _createSuccessCallback = function(actionName, message, _innerCallback) {
259
- return function() {
260
- _innerCallback && _innerCallback();
261
- toaster.pop('success', actionName, message);
262
- }
263
- }
264
- var _createErrorCallback = function(license, actionName, _innerCallback) {
265
- return function(error) {
266
- console.log(error);
267
- _innerCallback && _innerCallback();
268
- toaster.pop('error', actionName, $L.get("Error on action '{0}', license '{1}'. Reason: {2}", actionName, license.code, $L.get(error.headers('X-SECURIS-ERROR-MSG'))));
269
- }
270
- }
271
-
272
- this.getLicensesList = function(pack, _onsuccess, _onerror) {
273
- var query = licenseResource.query({packId: pack.id});
274
- query.$promise.then(_onsuccess, _onerror);
275
- return query;
276
- }
277
- this.activate = function(license, _onsuccess, _onerror) {
278
- console.log('Activation on license: ' + license.id);
279
- var _success = _createSuccessCallback($L.get('Activation'), $L.get("License '{0}' {1} successfully", license.code, $L.get("activated")), _onsuccess);
280
- var _error = _createErrorCallback(license, $L.get('Activation'), _onerror);
281
- licenseResource.activate({id: license.id}, _success, _error);
282
- }
283
- this.block = function(license, _onsuccess, _onerror) {
284
- console.log('Block on license: ' + license.id);
285
- var _success = _createSuccessCallback($L.get('Block'), $L.get("License '{0}' {1} successfully", license.code, $L.get("blocked")), _onsuccess);
286
- var _error = _createErrorCallback(license, $L.get('Block'), _onerror);
287
- licenseResource.block({id: license.id}, _success, _error);
288
- }
289
- this.unblock = function(license, _onsuccess, _onerror) {
290
- console.log('Unblock on license: ' + license.id);
291
- var _success = _createSuccessCallback($L.get('Unblock'), $L.get("License '{0}' {1} successfully", license.code, $L.get("unblocked")), _onsuccess);
292
- var _error = _createErrorCallback(license, $L.get('Unblock'), _onerror);
293
- licenseResource.unblock({id: license.id}, _success, _error);
294
- }
295
- this.send = function(license, _onsuccess, _onerror) {
296
- console.log('Sending email: ' + license.id);
297
- var _success = _createSuccessCallback($L.get('Send email'), $L.get("License '{0}' was sent by email ({1}) successfully", license.code, license.email), _onsuccess);
298
- var _error = _createErrorCallback(license, $L.get('Send email'), _onerror);
299
- licenseResource.sendEmail({id: license.id}, _success, _error);
300
- }
301
- this.download = function(license, _onsuccess, _onerror) {
302
- console.log('Download license: ' + license.id);
303
- var _success = _createSuccessCallback($L.get('Download'), $L.get("License '{0}' {1} successfully", license.code, $L.get("downloaded")), _onsuccess);
304
- var _error = _createErrorCallback(license, $L.get('Download license file'), _onerror);
305
- // window.open(downloadPath, '_blank', '');
306
- var _success2 = function(data, headers) {
307
- // console.log(headers.get("Content-Disposition"));
308
- // attachment; filename="license.lic"
309
- var filename = JSON.parse(headers('Content-Disposition').match(/".*"$/g)[0]);
310
- data.$promise.then(function(content) {
311
- saveAs( new Blob([ JSON.stringify(content, null, 2) ], { type : 'application/octet-stream' }), filename);
312
- });
313
- _success();
314
- };
315
- licenseResource.download({licenseId: license.id}, _success2, _error);
316
- }
317
- this.cancel = function(license, extra_data, _onsuccess, _onerror) {
318
- console.log('Cancellation on license: ' + license.id);
319
- var _success = _createSuccessCallback($L.get('Cancellation'), $L.get("License '{0}' {1} successfully", license.code, $L.get("cancelled")), _onsuccess);
320
- var _error = _createErrorCallback(license, $L.get('Cancellation'), _onerror);
321
- var params = angular.extend({id: license.id}, extra_data);
322
- licenseResource.cancel(params, _success, _error);
323
- }
324
- this.delete = function(license, _onsuccess, _onerror) {
325
- console.log('Delete on license: ' + license.id);
326
- var _success = _createSuccessCallback($L.get('Deletion'), $L.get("License '{0}' {1} successfully", license.code, $L.get("deleted")), _onsuccess);
327
- var _error = _createErrorCallback(license, $L.get('Deletion'), _onerror);
328
- licenseResource.delete({licenseId: license.id}, _success, _error);
329
- }
330
- }]);
331
-
332
- app.directive('fileLoader',
333
- function($timeout, $parse) {
334
- return {
335
- restrict : 'A', // only activate on element attribute
336
- require : '',
337
- link : function(scope, element, attrs) {
338
- console.log('scope.license: ' + scope.$parent.license);
339
- var setter = $parse(attrs.fileLoader).assign;
340
- element.bind('change', function(evt) {
341
- if (!window.FileReader) { // Browser is not
342
- // compatible
343
- BootstrapDialog.alert($L.get("Open your .req file with a text editor and copy&paste the content in the form text field?"));
344
- return;
345
- }
346
- console.log('File selected');
347
- // console.log('scope.license: ' +
348
- // scope.$parent.license);
349
- var field = $parse(attrs.fileLoader);
350
- // console.log('field: ' + field);
351
- var fileList = evt.target.files;
352
- if (fileList != null && fileList[0]) {
353
- var reader = new FileReader();
354
- reader.onerror = function(data) {
355
- setter(scope.$parent, 'ERROR');
356
- scope.$apply();
357
- }
358
- reader.onload = function(data) {
359
- setter(scope.$parent, reader.result);
360
- scope.$apply();
361
- }
362
-
363
- reader.readAsText(fileList[0]);
364
- element.val('');
365
- } else {
366
- setter(scope.$parent, '');
367
- scope.$apply();
368
- }
369
- });
370
-
371
- }
372
- };
373
- });
374
-
375
-
376
- app.controller('PackAndLicensesCtrl', [
377
- '$scope',
378
- '$http',
379
- 'toaster',
380
- '$store',
381
- '$L',
382
- function($scope, $http, toaster, $store, $L) {
383
- $store.set('location', '/licenses');
384
-
385
- $scope.maxLengthErrorMsg = function(displayname, fieldMaxlength) {
386
- return $L.get("{0} length is too long (max: {1}).", $L.get(displayname), fieldMaxlength);
387
- }
388
- $scope.mandatoryFieldErrorMsg = function(displayname) {
389
- return $L.get("'{0}' is required.", $L.get(displayname));
390
- }
391
- $scope.field1ShouldBeGreaterThanField2 = function(field1, field2) {
392
- return $L.get("{0} should be greater than {1}", $L.get(field1), $L.get(field2));
393
- }
394
- $scope.ellipsis = function(txt, len) {
395
- if (!txt || txt.length <= len) return txt;
396
- return txt.substring(0, len) + '...';
397
- }
398
- $scope.currentPack = $store.get('currentPack');
399
- if ($scope.currentPack) {
400
- $scope.currentPack._selected = true;
401
- setTimeout(function() {
402
- $scope.$broadcast('pack_changed', $scope.currentPack);
403
- }, 0);
404
- }
405
-
406
- }]);
407
-
408
- app.controller('PacksCtrl', [
409
- '$scope',
410
- '$http',
411
- '$resource',
412
- 'toaster',
413
- 'Catalogs',
414
- 'Packs',
415
- '$store',
416
- '$L',
417
- function($scope, $http, $resource, toaster, Catalogs, Packs, $store, $L) {
418
- $scope.Packs = Packs;
419
-
420
-
421
- $scope.mandatory = {
422
- code: true,
423
- num_licenses: true,
424
- init_valid_date: true,
425
- end_valid_date: true,
426
- status: true,
427
- organization_id: true,
428
- license_type_id: true
429
- }
430
- $scope.maxlength = {
431
- code: 50,
432
- comments: 1024
433
- }
434
- $scope.refs = {};
435
- Catalogs.init().then(function() {
436
- var refFields = [{resource: 'organization', name: 'organization_id'},{resource: 'licensetype', name: 'license_type_id'}];
437
- Catalogs.loadRefs(function(refs) {
438
- $scope.refs = refs;
439
- $scope._extendPackListing($scope.packs);
440
- }, refFields);
441
- });
442
-
443
- // Used to create the form with the
444
- // appropriate data
445
- $scope.isNew = undefined;
446
-
447
- // Selected pack from listing
448
- // pack is the edited pack, in creation
449
- // contains the data for
450
- // the new pack
451
- $scope.pack = null;
452
-
453
- $scope.packs = Packs.getPacksList(function(list) {
454
- $scope._extendPackListing(list);
455
- });
456
-
457
- /**
458
- * Added calculated fields like org_code and lic_type_code to pack listing
459
- */
460
- $scope._extendPackListing = function(listing) {
461
- angular.forEach(listing, function(elem) {
462
- elem.organization_code = $scope.getOrganizationCode(elem.organization_id);
463
- elem.license_type_code = $scope.getLicenseTypeCode(elem.license_type_id);
464
- });
465
- }
466
-
467
- $scope.save = function() {
468
- Packs.savePackData($scope.pack, $scope.isNew, function() {
469
- if (!$scope.isNew) {
470
- $scope.showForm = false;
471
- } else {
472
- $scope.newPack();
473
- }
474
- $scope.packs = Packs.getPacksList(function(list) {
475
- $scope._extendPackListing(list);
476
- });
477
- });
478
- }
479
-
480
- /**
481
- * Execute an action over the pack,
482
- * activation, onhold, cancellation
483
- */
484
- $scope.execute = function(action, pack) {
485
- pack = pack || $scope.pack;
486
- var _execute = function(extra_data) {
487
- if (extra_data) {
488
- Packs[action](pack || $scope.pack, extra_data, function() {
489
- if (!$scope.isNew) $scope.showForm = false;
490
- $scope.packs = Packs.getPacksList(function(list) {
491
- $scope._extendPackListing(list);
492
- });
493
- });
494
- } else {
495
- Packs[action](pack || $scope.pack, function() {
496
- if (!$scope.isNew) $scope.showForm = false;
497
- $scope.packs = Packs.getPacksList(function(list) {
498
- $scope._extendPackListing(list);
499
- });
500
- });
501
- }
502
- }
503
- if (action === 'delete') {
504
- BootstrapDialog.confirm($L.get("The pack '{0}' will be deleted, are you sure ?", pack.code), function(answer) {
505
- if (answer) {
506
- _execute();
507
- }
508
- });
509
- } else {
510
- if (action === 'cancel') {
511
- BootstrapDialog.show({
512
- title: $L.get("Pack cancellation"),
513
- type: BootstrapDialog.TYPE_DANGER,
514
- message: function(dialog) {
515
- var $content = $('<div></div>');
516
- var $message = $('<div></div>');
517
- $message.append($('<label/>').text($L.get("The pack '{0}' and all its licenses will be cancelled, this action cannot be undone", pack.code)));
518
- $content.append($message);
519
-
520
- var $message = $('<div style="margin-top:10pt;"/>');
521
- var pageToLoad = dialog.getData('pageToLoad');
522
- $message.append($('<label style="margin-right:5pt;"/>').text($L.get("Cancellation reason:") + " "));
523
- $message.append($('<input type="text" style="width:100%;" maxlength="512" id="_pack_cancellation_reason"/>'));
524
- $content.append($message);
525
- return $content;
526
- },
527
- closable: true,
528
- buttons: [{
529
- id: 'btn-cancel',
530
- label: $L.get('Close'),
531
- cssClass: 'btn-default',
532
- action: function(dialogRef) {
533
- dialogRef.close();
534
- }
535
- }, {
536
- id: 'btn-ok',
537
- label: $L.get('Cancel pack'),
538
- cssClass: 'btn-primary',
539
- action: function(dialogRef){
540
- var reason = $('#_pack_cancellation_reason').val();
541
- console.log('Ready to cancel pack, by reason: ' + reason);
542
- if (!reason) {
543
- $('#_pack_cancellation_reason').focus();
544
- } else {
545
- _execute({reason: reason});
546
- dialogRef.close();
547
- }
548
- }
549
- }]
550
- });
551
- } else {
552
- _execute();
553
- }
554
- }
555
- }
556
-
557
-
558
- $scope.newPack = function() {
559
- $scope.isNew = true;
560
- $scope.showForm = true;
561
- $scope.pack = {
562
- license_preactivation: true,
563
- status: 'CR',
564
- num_licenses: 1,
565
- init_valid_date: new Date(),
566
- preactivation_valid_period: 7,
567
- renew_valid_period: 365,
568
- license_type_id: null,
569
- organization_id: null // !$scope.refs.organization_id
570
- // ||
571
- // !$scope.refs.organization_id.length
572
- // ? null :
573
- // $scope.refs.organization_id[0].id
574
- }
575
- setTimeout(function() {
576
- $('#code').focus();
577
- }, 0);
578
- }
579
-
580
- $scope.editPack = function(selectedPack) {
581
- $scope.isNew = false;
582
- $scope.showForm = true;
583
- if (!(selectedPack.init_valid_date instanceof Date)) {
584
- selectedPack.init_valid_date = new Date(selectedPack.init_valid_date);
585
- }
586
- if (!(selectedPack.end_valid_date instanceof Date)) {
587
- selectedPack.end_valid_date = new Date(selectedPack.end_valid_date);
588
- }
589
-
590
- $scope.pack = selectedPack;
591
-
592
- // $scope.pack.organization_name =
593
- // $scope.getLabelFromId('organization_id',
594
- // $scope.pack.organization_id);
595
- $scope.pack.license_type_name = $scope.getLabelFromId('license_type_id', $scope.pack.license_type_id);
596
- $scope.pack.status_name = Packs.getStatusName($scope.pack.status);
597
-
598
- setTimeout(function() {
599
- $('#code').focus();
600
- }, 0);
601
- }
602
-
603
- $scope.deletePack = function(selectedPack) {
604
- $scope.showForm = false;
605
- BootstrapDialog.confirm($L.get("The pack '{0}' will be deleted, are you sure?", selectedPack.code), function(result){
606
- if(result) {
607
- var promise = packResource.remove({}, {id: selectedPack.id}).$promise;
608
- promise.then(function(data) {
609
- $scope.selectPack(null);
610
- $scope.packs = packResource.query();
611
- toaster.pop('success', Catalogs.getName(), $L.get("Pack '{0}' deleted successfully", selectedPack.code));
612
- },function(error) {
613
- console.log(error);
614
- toaster.pop('error', Catalogs.getName(), $L.get("Error deleting pack, reason: {0}. Details: {1}", $L.get(HTTP_ERRORS[error.status]), error.headers('X-SECURIS-ERROR-MSG')), 10000);
615
- });
616
- }
617
- });
618
- $scope.isNew = false;
619
- }
620
-
621
-
622
- $scope.cancel = function() {
623
- $scope.showForm = false;
624
- }
625
-
626
- $scope.selectPack = function(pack) {
627
- if ($scope.$parent.currentPack) {
628
- $scope.$parent.currentPack._selected = false;
629
- }
630
- $scope.$parent.currentPack = pack._selected ? pack : null;
631
- $store.put('currentPack', $scope.$parent.currentPack);
632
- $scope.$parent.$broadcast('pack_changed', $scope.$parent.currentPack);
633
- }
634
-
635
- $scope.getLabelFromId = function(field, myid) {
636
- var label = null;
637
- $scope.refs[field].forEach(function (elem) {
638
- if (elem.id === myid) {
639
- label = elem.label;
640
- }
641
- });
642
- return label;
643
- }
644
-
645
- $scope.getOrganizationCode = function(orgId) {
646
- return $scope._getCodeFromId('organization_id', orgId);
647
- }
648
-
649
- $scope.getLicenseTypeCode = function(ltId) {
650
- return $scope._getCodeFromId('license_type_id', ltId);
651
- }
652
-
653
- $scope._getCodeFromId = function(field, myid) {
654
- if (!myid) {
655
- return null;
656
- }
657
- var list = $scope.refs[field];
658
- for(var i = 0; list && i < list.length; i++) {
659
- var elem = list[i];
660
- if (elem.id === myid) {
661
- return elem.code;
662
- }
663
- }
664
- return null;
665
- }
666
-
667
- $scope.createMetadataRow = function() {
668
- if (!$scope.formu.metadata) {
669
- $scope.formu.metadata = [];
670
- }
671
- $scope.formu.metadata.push({key: '', value: '', mandatory: true});
672
- }
673
- $scope.removeMetadataKey = function(row_md) {
674
- $scope.formu.metadata.splice( $scope.formu.metadata.indexOf(row_md), 1 );
675
- }
676
- $scope.updateMetadata = function() {
677
- // Called when LicType ID change
678
- // in current field
679
- var newLTId = $scope.pack['license_type_id'];
680
- if (newLTId) {
681
- // Only if there is a "valid"
682
- // value selected we should
683
- // update the metadata
684
- Catalogs.getResource('licensetype').get({id: newLTId}).$promise.then(function(lt) {
685
- $scope.pack.metadata = [];
686
- lt.metadata.forEach(function(md) {
687
- $scope.pack.metadata.push({
688
- key: md.key,
689
- value: md.value,
690
- readonly: !!md.value,
691
- mandatory: md.mandatory
692
- });
693
- });
694
- });
695
- }
696
- }
697
- } ]);
698
-
699
- app.controller('LicensesCtrl', [
700
- '$scope',
701
- '$http',
702
- '$resource',
703
- 'toaster',
704
- 'Licenses',
705
- 'Packs',
706
- '$store',
707
- '$L',
708
- function($scope, $http, $resource, toaster, Licenses, Packs, $store, $L) {
709
- $scope.Licenses = Licenses;
710
- $scope.$on('pack_changed', function(evt, message) {
711
- $scope.licenses = Licenses.getLicensesList($scope.currentPack);
712
- $scope.creationAvailable = $scope.currentPack.status == 'AC';
713
- if ($scope.showForm) {
714
- if ($scope.isNew) {
715
- $scope.license.pack_id = $scope.currentPack.id
716
- } else {
717
- $scope.showForm = false;
718
- }
719
- }
720
- })
721
-
722
- $scope.mandatory = {
723
- code: true,
724
- email: true
725
- }
726
- $scope.maxlength = {
727
- activation_code: 36,
728
- code: 50,
729
- full_name: 100,
730
- email: 100,
731
- request_data: 500,
732
- comments: 1024
733
- }
734
- $scope.refs = {};
735
-
736
- // Used to create the form with the
737
- // appropriate data
738
- $scope.isNew = undefined;
739
-
740
- // Selected license from listing
741
- // license is the edited license, in
742
- // creation contains the data for
743
- // the new license
744
- $scope.license = null;
745
- if ($scope.currentPack) {
746
- $scope.licenses = Licenses.getLicensesList($scope.currentPack);
747
- }
748
-
749
- $scope.save = function() {
750
- Licenses.saveLicenseData($scope.license, $scope.isNew, function() {
751
- if (!$scope.isNew) {
752
- $scope.showForm = false;
753
- } else {
754
- $scope.newLicense();
755
- }
756
- $scope.licenses = Licenses.getLicensesList($scope.currentPack);
757
- });
758
- }
759
-
760
- $scope.newLicense = function() {
761
- if (!$scope.currentPack) {
762
- BootstrapDialog.show({
763
- title: $L.get('New license'),
764
- type: BootstrapDialog.TYPE_WARNING,
765
- message: $L.get('Please, select a pack before to create a new license'),
766
- buttons: [{
767
- label: 'OK',
768
- action: function(dialog) {
769
- dialog.close();
770
- }
771
- }]
772
- });
773
- return;
774
- }
775
- if (!$scope.creationAvailable) {
776
- BootstrapDialog.show({
777
- title: $L.get('Pack not active'),
778
- type: BootstrapDialog.TYPE_WARNING,
779
- message: $L.get('Current pack is not active, so licenses cannot be created'),
780
- buttons: [{
781
- label: 'OK',
782
- action: function(dialog) {
783
- dialog.close();
784
- }
785
- }]
786
- });
787
- return;
788
- }
789
-
790
- $scope.isNew = true;
791
- $scope.showForm = true;
792
- $scope.license = {
793
- pack_id: $scope.currentPack.id,
794
- activation_code: $scope.createUUID()
795
- }
796
- Packs.nextliccode($scope.currentPack.id, function(data) {
797
- console.log('New code: ' + data);
798
- $scope.license.code = data;
799
- });
800
- setTimeout(function() {
801
- $('#licenseForm * #email').focus();
802
- }, 0);
803
- }
804
- $scope.createUUID = function () {
805
- // http://www.ietf.org/rfc/rfc4122.txt
806
- var s = new Array(36);
807
- var hexDigits = "0123456789abcdef";
808
- for (var i = 0; i < 36; i++) {
809
- s[i] = hexDigits.substr(Math.random() * 0x10 | 0, 1);
810
- }
811
- s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
812
- s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
813
- s[8] = s[13] = s[18] = s[23] = "-";
814
-
815
- var uuid = s.join("");
816
- return uuid;
817
- }
818
- $scope.editLicense = function(selectedlicense) {
819
- $scope.isNew = false;
820
- $scope.showForm = true;
821
- $scope.license = selectedlicense;
822
- $scope.license.status_name = Licenses.getStatusName($scope.license.status);
823
- $scope.license.activation_code = $scope.license.activation_code || $scope.createUUID();
824
-
825
- setTimeout(function() {
826
- $('#licenseForm * #code').focus();
827
- }, 0);
828
- }
829
-
830
- $scope.deletelicense = function(selectedlicense) {
831
- $scope.showForm = false;
832
- BootstrapDialog.confirm($L.get("The license '{0}' will be deleted, are you sure?", selectedlicense.code), function(result){
833
- if(result) {
834
- var promise = licenseResource.remove({}, {id: selectedlicense.id}).$promise;
835
- promise.then(function(data) {
836
- $scope.selectlicense(null);
837
- $scope.licenses = Licenses.getLicensesList($scope.currentPack);
838
- toaster.pop('success', Catalogs.getName(), $L.get("License '{0}' deleted successfully", selectedlicense.code));
839
- },function(error) {
840
- console.log(error);
841
- toaster.pop('error', Catalogs.getName(), $L.get("Error deleting license, reason: {0}. Details: {1}", $L.get(HTTP_ERRORS[error.status]), error.headers('X-SECURIS-ERROR-MSG')), 10000);
842
- });
843
- }
844
- });
845
- $scope.isNew = false;
846
- }
847
-
848
- $scope.execute = function(action, license) {
849
- if (!license) {
850
- license = $scope.license;
851
- }
852
- var _execute = function(extra_data) {
853
- if (extra_data) {
854
- Licenses[action](license, extra_data, function() {
855
- if (!$scope.isNew) $scope.showForm = false;
856
- $scope.licenses = Licenses.getLicensesList($scope.currentPack);
857
- });
858
- } else {
859
- Licenses[action](license, function() {
860
- if (!$scope.isNew) $scope.showForm = false;
861
- $scope.licenses = Licenses.getLicensesList($scope.currentPack);
862
- });
863
- }
864
- }
865
- if (action === 'delete') {
866
- BootstrapDialog.confirm($L.get("The license '{0}' will be deleted, are you sure?", license.code), function(result){
867
- if(result) {
868
- _execute();
869
- }
870
- });
871
- } else {
872
- if (action === 'cancel') {
873
- BootstrapDialog.show({
874
- title: $L.get("License cancellation"),
875
- type: BootstrapDialog.TYPE_DANGER,
876
- message: function(dialog) {
877
- var $content = $('<div></div>');
878
- var $message = $('<div></div>');
879
- var pageToLoad = dialog.getData('pageToLoad');
880
- $message.append($('<label/>').text($L.get("This action cannot be undone.", license.code)));
881
- $content.append($message);
882
-
883
- var $message = $('<div style="margin-top:10pt;"/>');
884
- $message.append($('<label style="margin-right:5pt;"/>').text($L.get("Cancellation reason:") + " "));
885
- $message.append($('<input type="text" style="width:100%;" maxlength="512" id="_lic_cancellation_reason"/>'));
886
- $content.append($message);
887
- return $content;
888
- },
889
- closable: true,
890
- buttons: [{
891
- id: 'btn-cancel',
892
- label: $L.get('Close'),
893
- cssClass: 'btn-default',
894
- action: function(dialogRef) {
895
- dialogRef.close();
896
- }
897
- }, {
898
- id: 'btn-ok',
899
- label: $L.get('Cancel license'),
900
- cssClass: 'btn-primary',
901
- action: function(dialogRef){
902
- var reason = $('#_lic_cancellation_reason').val();
903
- console.log('Ready to cancel license, by reason: ' + reason);
904
- if (!reason) {
905
- $('#_lic_cancellation_reason').focus();
906
- } else {
907
- _execute({reason: reason});
908
- dialogRef.close();
909
- }
910
- }
911
- }]
912
- });
913
- } else {
914
- _execute();
915
- }
916
- }
917
- }
918
-
919
-
920
- $scope.cancel = function() {
921
- $scope.showForm = false;
922
- }
923
-
924
- } ]);
925
-
926
-})();
securis/src/main/webapp/js/login.js
deleted file mode 100644
....@@ -1,48 +0,0 @@
1
-(function() {
2
- 'use strict';
3
-
4
- var app = angular.module('securis');
5
-
6
- app.controller('LoginCtrl', ['$scope', '$http', '$location', 'toaster', '$L', '$store',
7
- function($scope, $http, $location, toaster, $L, $store) {
8
-
9
-
10
- $('#username').focus();
11
-
12
- $scope.submit = function() {
13
- console.log('Sending user: ' + $scope.username + ' pass: ' + $scope.password);
14
- $http({ method: 'POST',
15
- url: 'user/login',
16
- headers: {
17
- "Content-Type": "application/x-www-form-urlencoded"
18
- },
19
- data: $.param({
20
- username: $scope.username,
21
- password: $scope.password
22
- })
23
- }).
24
- success(function(data, status, headers, config) {
25
- toaster.pop('success', $L.get('Login successful'), $L.get('User {0} has logged in application', $scope.username), 1500);
26
- var location = $store.get('location') || '/licenses';
27
-
28
- $location.path(location);
29
- $store.put('username', $scope.username);
30
- $store.put('token', data.token);
31
- $http.defaults.headers.common['X-SECURIS-TOKEN'] = data.token;
32
- }).
33
- error(function(data, status, headers, config) {
34
- if (status === 403 /* forbidden */ || status === 401 /* unauthorized */) {
35
- toaster.pop('error', $L.get('Login error'), $L.get('Invalid credentials'), 2000);
36
- } else if (status === 418 /* Teapot */) {
37
- toaster.pop('error', $L.get('Login error'), $L.get(headers['X-SECURIS-ERROR-MSG']), 2000);
38
- } else {
39
- console.error(data + " status: "+ status);
40
- toaster.pop('error', $L.get('Unexpected Login error'), $L.get('Unexpected error HTTP ({0}) accessing to server. Contact with the administrator.', status), 5000);
41
- }
42
- $('#username').focus();
43
- });
44
- return false;
45
- }
46
- }]);
47
-
48
-})();
securis/src/main/webapp/js/main.js
deleted file mode 100644
....@@ -1,115 +0,0 @@
1
-(function() {
2
- 'use strict';
3
-
4
- var m = angular.module('securis', [ 'ngRoute', 'ngResource', 'toaster', 'localytics.directives', 'catalogs', 'i18n' ]);
5
-
6
- m.service('$store', function() {
7
- this.get = function(key, defaultValue) {
8
- return store.get(key) || defaultValue;
9
- }
10
- this.set = this.put = function(key, value) {
11
- store.set(key, value);
12
- }
13
- this.remove = this.delete = function(key) {
14
- return store.remove(key);
15
- }
16
- this.clear = this.clearAll = function() {
17
- store.clear();
18
- }
19
- this.getAll = function() {
20
- return store.getAll();
21
- }
22
- });
23
-
24
- m.factory('securisHttpInterceptor', function($q, $location, $store, toaster) {
25
- var isUnauthorizedAccess = function(rejection) {
26
- return rejection.status === 401 /* Unauthorized */;
27
- }
28
- return {
29
- 'request': function(config) {
30
- var token = $store.get('token');
31
- if (token) {
32
- var la = $store.get('last_access');
33
- var now = new Date().getTime();
34
- if (la !== null) {
35
- if (now > (la + 1800000)) { // Session timeout is 1/2
36
- // hour
37
- $store.clear();
38
- $location.path('/login');
39
- toaster.pop('warning', 'Session has expired', null, 4000);
40
- } else {
41
- console.debug('Last access recent');
42
- }
43
- }
44
- $store.set('last_access', now);
45
- }
46
- return config || $q.when(config);
47
- },
48
- 'responseError': function(rejection) {
49
- // do something on error
50
- if (isUnauthorizedAccess(rejection)) {
51
- if ($location.path() !== '/login') {
52
- $store.clear();
53
- $location.path('/login');
54
- console.error('There was an unathorized access to url {0}, method: {1}'.$i18n(rejection.config.url, rejection.config.method));
55
- } else {
56
- // console.log('Error on login ...')
57
- }
58
- }
59
- return $q.reject(rejection);
60
- }
61
- };
62
- });
63
-
64
- m.config(function($routeProvider, $locationProvider, $httpProvider) {
65
- console.debug('Configuring routes...');
66
- $routeProvider.when('/login', {
67
- templateUrl: 'login.html',
68
- controller: 'LoginCtrl'
69
- });
70
- $routeProvider.when('/licenses', {
71
- templateUrl: 'licenses.html',
72
- controller: 'PackAndLicensesCtrl'
73
- });
74
- $routeProvider.when('/admin', {
75
- templateUrl: 'admin.html',
76
- controller: 'AdminCtrl'
77
- });
78
-
79
- // configure html5 to get links working on jsfiddle
80
- $locationProvider.html5Mode(true);
81
- $httpProvider.interceptors.push('securisHttpInterceptor');
82
- });
83
-
84
- m.controller('MainCtrl', ['$scope', '$http', '$location', '$L', '$store',
85
- function($scope, $http, $location, $L, $store) {
86
-
87
- $scope.$location = $location;
88
-
89
- $location.path('/login');
90
- if ($store.get('token') != null) {
91
-
92
- $http.get('check', {
93
- headers: {
94
- 'X-SECURIS-TOKEN': $store.get('token')
95
- }
96
- }).success(function(data) {
97
- if (data.valid) {
98
- $http.defaults.headers.common['X-SECURIS-TOKEN'] = $store.get('token');
99
- var location = $store.get('location') || '/licenses';
100
-
101
- $location.path(location);
102
- $store.set('user', data.user);
103
- }
104
- });
105
- }
106
-
107
- $scope.logout = function() {
108
- $store.remove('user');
109
- $store.remove('token');
110
- $location.path('/login');
111
- }
112
-
113
- }]);
114
-
115
-})();
securis/src/main/webapp/js/vendor/FileSaver.js
deleted file mode 100644
....@@ -1,245 +0,0 @@
1
-/* FileSaver.js
2
- * A saveAs() FileSaver implementation.
3
- * 2014-08-29
4
- *
5
- * By Eli Grey, http://eligrey.com
6
- * License: X11/MIT
7
- * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
8
- */
9
-
10
-/*global self */
11
-/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
12
-
13
-/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
14
-
15
-var saveAs = saveAs
16
- // IE 10+ (native saveAs)
17
- || (typeof navigator !== "undefined" &&
18
- navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator))
19
- // Everyone else
20
- || (function(view) {
21
- "use strict";
22
- // IE <10 is explicitly unsupported
23
- if (typeof navigator !== "undefined" &&
24
- /MSIE [1-9]\./.test(navigator.userAgent)) {
25
- return;
26
- }
27
- var
28
- doc = view.document
29
- // only get URL when necessary in case Blob.js hasn't overridden it yet
30
- , get_URL = function() {
31
- return view.URL || view.webkitURL || view;
32
- }
33
- , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
34
- , can_use_save_link = "download" in save_link
35
- , click = function(node) {
36
- var event = doc.createEvent("MouseEvents");
37
- event.initMouseEvent(
38
- "click", true, false, view, 0, 0, 0, 0, 0
39
- , false, false, false, false, 0, null
40
- );
41
- node.dispatchEvent(event);
42
- }
43
- , webkit_req_fs = view.webkitRequestFileSystem
44
- , req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
45
- , throw_outside = function(ex) {
46
- (view.setImmediate || view.setTimeout)(function() {
47
- throw ex;
48
- }, 0);
49
- }
50
- , force_saveable_type = "application/octet-stream"
51
- , fs_min_size = 0
52
- // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 for
53
- // the reasoning behind the timeout and revocation flow
54
- , arbitrary_revoke_timeout = 10
55
- , revoke = function(file) {
56
- var revoker = function() {
57
- if (typeof file === "string") { // file is an object URL
58
- get_URL().revokeObjectURL(file);
59
- } else { // file is a File
60
- file.remove();
61
- }
62
- };
63
- if (view.chrome) {
64
- revoker();
65
- } else {
66
- setTimeout(revoker, arbitrary_revoke_timeout);
67
- }
68
- }
69
- , dispatch = function(filesaver, event_types, event) {
70
- event_types = [].concat(event_types);
71
- var i = event_types.length;
72
- while (i--) {
73
- var listener = filesaver["on" + event_types[i]];
74
- if (typeof listener === "function") {
75
- try {
76
- listener.call(filesaver, event || filesaver);
77
- } catch (ex) {
78
- throw_outside(ex);
79
- }
80
- }
81
- }
82
- }
83
- , FileSaver = function(blob, name) {
84
- // First try a.download, then web filesystem, then object URLs
85
- var
86
- filesaver = this
87
- , type = blob.type
88
- , blob_changed = false
89
- , object_url
90
- , target_view
91
- , dispatch_all = function() {
92
- dispatch(filesaver, "writestart progress write writeend".split(" "));
93
- }
94
- // on any filesys errors revert to saving with object URLs
95
- , fs_error = function() {
96
- // don't create more object URLs than needed
97
- if (blob_changed || !object_url) {
98
- object_url = get_URL().createObjectURL(blob);
99
- }
100
- if (target_view) {
101
- target_view.location.href = object_url;
102
- } else {
103
- var new_tab = view.open(object_url, "_blank");
104
- if (new_tab == undefined && typeof safari !== "undefined") {
105
- //Apple do not allow window.open, see http://bit.ly/1kZffRI
106
- view.location.href = object_url
107
- }
108
- }
109
- filesaver.readyState = filesaver.DONE;
110
- dispatch_all();
111
- revoke(object_url);
112
- }
113
- , abortable = function(func) {
114
- return function() {
115
- if (filesaver.readyState !== filesaver.DONE) {
116
- return func.apply(this, arguments);
117
- }
118
- };
119
- }
120
- , create_if_not_found = {create: true, exclusive: false}
121
- , slice
122
- ;
123
- filesaver.readyState = filesaver.INIT;
124
- if (!name) {
125
- name = "download";
126
- }
127
- if (can_use_save_link) {
128
- //blob = new Blob([ blob ], { type : 'application/json' });
129
- //object_url = (window.URL || window.webkitURL).createObjectURL( blob );
130
- object_url = get_URL().createObjectURL(blob);
131
- save_link.href = object_url;
132
- save_link.download = name;
133
- click(save_link);
134
- filesaver.readyState = filesaver.DONE;
135
- dispatch_all();
136
- revoke(object_url);
137
- return;
138
- }
139
- // Object and web filesystem URLs have a problem saving in Google Chrome when
140
- // viewed in a tab, so I force save with application/octet-stream
141
- // http://code.google.com/p/chromium/issues/detail?id=91158
142
- // Update: Google errantly closed 91158, I submitted it again:
143
- // https://code.google.com/p/chromium/issues/detail?id=389642
144
- if (view.chrome && type && type !== force_saveable_type) {
145
- slice = blob.slice || blob.webkitSlice;
146
- blob = slice.call(blob, 0, blob.size, force_saveable_type);
147
- blob_changed = true;
148
- }
149
- // Since I can't be sure that the guessed media type will trigger a download
150
- // in WebKit, I append .download to the filename.
151
- // https://bugs.webkit.org/show_bug.cgi?id=65440
152
- if (webkit_req_fs && name !== "download") {
153
- name += ".download";
154
- }
155
- if (type === force_saveable_type || webkit_req_fs) {
156
- target_view = view;
157
- }
158
- if (!req_fs) {
159
- fs_error();
160
- return;
161
- }
162
- fs_min_size += blob.size;
163
- req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
164
- fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
165
- var save = function() {
166
- dir.getFile(name, create_if_not_found, abortable(function(file) {
167
- file.createWriter(abortable(function(writer) {
168
- writer.onwriteend = function(event) {
169
- target_view.location.href = file.toURL();
170
- filesaver.readyState = filesaver.DONE;
171
- dispatch(filesaver, "writeend", event);
172
- revoke(file);
173
- };
174
- writer.onerror = function() {
175
- var error = writer.error;
176
- if (error.code !== error.ABORT_ERR) {
177
- fs_error();
178
- }
179
- };
180
- "writestart progress write abort".split(" ").forEach(function(event) {
181
- writer["on" + event] = filesaver["on" + event];
182
- });
183
- writer.write(blob);
184
- filesaver.abort = function() {
185
- writer.abort();
186
- filesaver.readyState = filesaver.DONE;
187
- };
188
- filesaver.readyState = filesaver.WRITING;
189
- }), fs_error);
190
- }), fs_error);
191
- };
192
- dir.getFile(name, {create: false}, abortable(function(file) {
193
- // delete file if it already exists
194
- file.remove();
195
- save();
196
- }), abortable(function(ex) {
197
- if (ex.code === ex.NOT_FOUND_ERR) {
198
- save();
199
- } else {
200
- fs_error();
201
- }
202
- }));
203
- }), fs_error);
204
- }), fs_error);
205
- }
206
- , FS_proto = FileSaver.prototype
207
- , saveAs = function(blob, name) {
208
- return new FileSaver(blob, name);
209
- }
210
- ;
211
- FS_proto.abort = function() {
212
- var filesaver = this;
213
- filesaver.readyState = filesaver.DONE;
214
- dispatch(filesaver, "abort");
215
- };
216
- FS_proto.readyState = FS_proto.INIT = 0;
217
- FS_proto.WRITING = 1;
218
- FS_proto.DONE = 2;
219
-
220
- FS_proto.error =
221
- FS_proto.onwritestart =
222
- FS_proto.onprogress =
223
- FS_proto.onwrite =
224
- FS_proto.onabort =
225
- FS_proto.onerror =
226
- FS_proto.onwriteend =
227
- null;
228
-
229
- return saveAs;
230
-}(
231
- typeof self !== "undefined" && self
232
- || typeof window !== "undefined" && window
233
- || this.content
234
-));
235
-// `self` is undefined in Firefox for Android content script context
236
-// while `this` is nsIContentFrameMessageManager
237
-// with an attribute `content` that corresponds to the window
238
-
239
-if (typeof module !== "undefined" && module !== null) {
240
- module.exports = saveAs;
241
-} else if ((typeof define !== "undefined" && define !== null) && (define.amd != null)) {
242
- define([], function() {
243
- return saveAs;
244
- });
245
-}
securis/src/main/webapp/js/vendor/bootstrap-dialog.js
deleted file mode 100644
....@@ -1,654 +0,0 @@
1
-/* ================================================
2
- * Make use of Twitter Bootstrap's modal more monkey-friendly.
3
- *
4
- * For Bootstrap 3.
5
- *
6
- * javanoob@hotmail.com
7
- *
8
- * Licensed under The MIT License.
9
- * ================================================ */
10
-var BootstrapDialog = null;
11
-!function($) {
12
- "use strict";
13
-
14
- BootstrapDialog = function(options) {
15
- this.defaultOptions = {
16
- id: BootstrapDialog.newGuid(),
17
- type: BootstrapDialog.TYPE_PRIMARY,
18
- size: BootstrapDialog.SIZE_NORMAL,
19
- cssClass: '',
20
- title: null,
21
- message: null,
22
- buttons: [],
23
- closable: true,
24
- spinicon: BootstrapDialog.ICON_SPINNER,
25
- data: {},
26
- onshow: null,
27
- onhide: null,
28
- autodestroy: true
29
- };
30
- this.indexedButtons = {};
31
- this.realized = false;
32
- this.opened = false;
33
- this.initOptions(options);
34
- this.holdThisInstance();
35
- };
36
-
37
- /**
38
- * Some constants.
39
- */
40
- BootstrapDialog.NAMESPACE = 'bootstrap-dialog';
41
-
42
- BootstrapDialog.TYPE_DEFAULT = 'type-default';
43
- BootstrapDialog.TYPE_INFO = 'type-info';
44
- BootstrapDialog.TYPE_PRIMARY = 'type-primary';
45
- BootstrapDialog.TYPE_SUCCESS = 'type-success';
46
- BootstrapDialog.TYPE_WARNING = 'type-warning';
47
- BootstrapDialog.TYPE_DANGER = 'type-danger';
48
-
49
- BootstrapDialog.DEFAULT_TEXTS = {};
50
- BootstrapDialog.DEFAULT_TEXTS[BootstrapDialog.TYPE_DEFAULT] = 'Information';
51
- BootstrapDialog.DEFAULT_TEXTS[BootstrapDialog.TYPE_INFO] = 'Information';
52
- BootstrapDialog.DEFAULT_TEXTS[BootstrapDialog.TYPE_PRIMARY] = 'Information';
53
- BootstrapDialog.DEFAULT_TEXTS[BootstrapDialog.TYPE_SUCCESS] = 'Success';
54
- BootstrapDialog.DEFAULT_TEXTS[BootstrapDialog.TYPE_WARNING] = 'Warning';
55
- BootstrapDialog.DEFAULT_TEXTS[BootstrapDialog.TYPE_DANGER] = 'Danger';
56
-
57
- BootstrapDialog.SIZE_NORMAL = 'size-normal';
58
- BootstrapDialog.SIZE_LARGE = 'size-large';
59
-
60
- BootstrapDialog.BUTTON_SIZES = {};
61
- BootstrapDialog.BUTTON_SIZES[BootstrapDialog.SIZE_NORMAL] = '';
62
- BootstrapDialog.BUTTON_SIZES[BootstrapDialog.SIZE_LARGE] = 'btn-lg';
63
-
64
- BootstrapDialog.ICON_SPINNER = 'glyphicon glyphicon-asterisk';
65
-
66
- /**
67
- * Open / Close all created dialogs all at once.
68
- */
69
- BootstrapDialog.dialogs = {};
70
- BootstrapDialog.openAll = function() {
71
- $.each(BootstrapDialog.dialogs, function(id, dialogInstance) {
72
- dialogInstance.open();
73
- });
74
- };
75
- BootstrapDialog.closeAll = function() {
76
- $.each(BootstrapDialog.dialogs, function(id, dialogInstance) {
77
- dialogInstance.close();
78
- });
79
- };
80
-
81
- BootstrapDialog.prototype = {
82
- constructor: BootstrapDialog,
83
- initOptions: function(options) {
84
- this.options = $.extend(true, this.defaultOptions, options);
85
-
86
- return this;
87
- },
88
- holdThisInstance: function() {
89
- BootstrapDialog.dialogs[this.getId()] = this;
90
-
91
- return this;
92
- },
93
- initModalStuff: function() {
94
- this.setModal(this.createModal())
95
- .setModalDialog(this.createModalDialog())
96
- .setModalContent(this.createModalContent())
97
- .setModalHeader(this.createModalHeader())
98
- .setModalBody(this.createModalBody())
99
- .setModalFooter(this.createModalFooter());
100
-
101
- this.getModal().append(this.getModalDialog());
102
- this.getModalDialog().append(this.getModalContent());
103
- this.getModalContent()
104
- .append(this.getModalHeader())
105
- .append(this.getModalBody())
106
- .append(this.getModalFooter());
107
-
108
- return this;
109
- },
110
- createModal: function() {
111
- return $('<div class="modal fade" tabindex="-1" id="' + this.getId() + '"></div>');
112
- },
113
- getModal: function() {
114
- return this.$modal;
115
- },
116
- setModal: function($modal) {
117
- this.$modal = $modal;
118
-
119
- return this;
120
- },
121
- createModalDialog: function() {
122
- return $('<div class="modal-dialog"></div>');
123
- },
124
- getModalDialog: function() {
125
- return this.$modalDialog;
126
- },
127
- setModalDialog: function($modalDialog) {
128
- this.$modalDialog = $modalDialog;
129
-
130
- return this;
131
- },
132
- createModalContent: function() {
133
- return $('<div class="modal-content"></div>');
134
- },
135
- getModalContent: function() {
136
- return this.$modalContent;
137
- },
138
- setModalContent: function($modalContent) {
139
- this.$modalContent = $modalContent;
140
-
141
- return this;
142
- },
143
- createModalHeader: function() {
144
- return $('<div class="modal-header"></div>');
145
- },
146
- getModalHeader: function() {
147
- return this.$modalHeader;
148
- },
149
- setModalHeader: function($modalHeader) {
150
- this.$modalHeader = $modalHeader;
151
-
152
- return this;
153
- },
154
- createModalBody: function() {
155
- return $('<div class="modal-body"></div>');
156
- },
157
- getModalBody: function() {
158
- return this.$modalBody;
159
- },
160
- setModalBody: function($modalBody) {
161
- this.$modalBody = $modalBody;
162
-
163
- return this;
164
- },
165
- createModalFooter: function() {
166
- return $('<div class="modal-footer"></div>');
167
- },
168
- getModalFooter: function() {
169
- return this.$modaFooter;
170
- },
171
- setModalFooter: function($modaFooter) {
172
- this.$modaFooter = $modaFooter;
173
-
174
- return this;
175
- },
176
- createDynamicContent: function(rawContent) {
177
- var content = null;
178
- if (typeof rawContent === 'function') {
179
- content = rawContent.call(rawContent, this);
180
- } else {
181
- content = rawContent;
182
- }
183
- if (typeof content === 'string') {
184
- content = this.formatStringContent(content);
185
- }
186
-
187
- return content;
188
- },
189
- formatStringContent: function(content) {
190
- return content.replace(/\r\n/g, '<br />').replace(/[\r\n]/g, '<br />');
191
- },
192
- setData: function(key, value) {
193
- this.options.data[key] = value;
194
-
195
- return this;
196
- },
197
- getData: function(key) {
198
- return this.options.data[key];
199
- },
200
- setId: function(id) {
201
- this.options.id = id;
202
-
203
- return this;
204
- },
205
- getId: function() {
206
- return this.options.id;
207
- },
208
- getType: function() {
209
- return this.options.type;
210
- },
211
- setType: function(type) {
212
- this.options.type = type;
213
-
214
- return this;
215
- },
216
- getSize: function() {
217
- return this.options.size;
218
- },
219
- setSize: function(size) {
220
- this.options.size = size;
221
-
222
- return this;
223
- },
224
- getCssClass: function() {
225
- return this.options.cssClass;
226
- },
227
- setCssClass: function(cssClass){
228
- this.options.cssClass = cssClass;
229
-
230
- return this;
231
- },
232
- getTitle: function() {
233
- return this.options.title;
234
- },
235
- setTitle: function(title) {
236
- this.options.title = title;
237
-
238
- return this;
239
- },
240
- getMessage: function() {
241
- return this.options.message;
242
- },
243
- setMessage: function(message) {
244
- this.options.message = message;
245
-
246
- return this;
247
- },
248
- isClosable: function() {
249
- return this.options.closable;
250
- },
251
- setClosable: function(closable) {
252
- this.options.closable = closable;
253
- this.updateClosable();
254
-
255
- return this;
256
- },
257
- getSpinicon: function() {
258
- return this.options.spinicon;
259
- },
260
- setSpinicon: function(spinicon) {
261
- this.options.spinicon = spinicon;
262
-
263
- return this;
264
- },
265
- addButton: function(button) {
266
- this.options.buttons.push(button);
267
-
268
- return this;
269
- },
270
- addButtons: function(buttons) {
271
- var that = this;
272
-
273
- $.each(buttons, function(index, button) {
274
- that.addButton(button);
275
- });
276
-
277
- return this;
278
- },
279
- getButtons: function() {
280
- return this.options.buttons;
281
- },
282
- setButtons: function(buttons) {
283
- this.options.buttons = buttons;
284
-
285
- return this;
286
- },
287
- /**
288
- * If there is id provided for a button option, it will be in dialog.indexedButtons list.
289
- *
290
- * In that case you can use dialog.getButton(id) to find the button.
291
- *
292
- * @param {type} id
293
- * @returns {undefined}
294
- */
295
- getButton: function(id) {
296
- if (typeof this.indexedButtons[id] !== 'undefined') {
297
- return this.indexedButtons[id];
298
- }
299
-
300
- return null;
301
- },
302
- getButtonSize: function() {
303
- if (typeof BootstrapDialog.BUTTON_SIZES[this.getSize()] !== 'undefined') {
304
- return BootstrapDialog.BUTTON_SIZES[this.getSize()];
305
- }
306
-
307
- return '';
308
- },
309
- isAutodestroy: function() {
310
- return this.options.autodestroy;
311
- },
312
- setAutodestroy: function(autodestroy) {
313
- this.options.autodestroy = autodestroy;
314
- },
315
- getDefaultText: function() {
316
- return BootstrapDialog.DEFAULT_TEXTS[this.getType()];
317
- },
318
- getNamespace: function(name) {
319
- return BootstrapDialog.NAMESPACE + '-' + name;
320
- },
321
- createHeaderContent: function() {
322
- var $container = $('<div></div>');
323
- $container.addClass(this.getNamespace('header'));
324
-
325
- // title
326
- $container.append(this.createTitleContent());
327
-
328
- // Close button
329
- $container.append(this.createCloseButton());
330
-
331
- return $container;
332
- },
333
- createTitleContent: function() {
334
- var $title = $('<div></div>');
335
- $title.addClass(this.getNamespace('title'));
336
- $title.append(this.getTitle() !== null ? this.createDynamicContent(this.getTitle()) : this.getDefaultText());
337
-
338
- return $title;
339
- },
340
- createCloseButton: function() {
341
- var $container = $('<div></div>');
342
- $container.addClass(this.getNamespace('close-button'));
343
- var $icon = $('<button class="close">×</button>');
344
- $container.append($icon);
345
- $container.on('click', {dialog: this}, function(event) {
346
- event.data.dialog.close();
347
- });
348
-
349
- return $container;
350
- },
351
- createBodyContent: function() {
352
- var $container = $('<div></div>');
353
- $container.addClass(this.getNamespace('body'));
354
-
355
- // Message
356
- $container.append(this.createMessageContent());
357
-
358
- return $container;
359
- },
360
- createMessageContent: function() {
361
- var $message = $('<div></div>');
362
- $message.addClass(this.getNamespace('message'));
363
- $message.append(this.createDynamicContent(this.getMessage()));
364
-
365
- return $message;
366
- },
367
- createFooterContent: function() {
368
- var $container = $('<div></div>');
369
- $container.addClass(this.getNamespace('footer'));
370
-
371
- // Buttons
372
- $container.append(this.createFooterButtons());
373
-
374
- return $container;
375
- },
376
- createFooterButtons: function() {
377
- var that = this;
378
- var $container = $('<div></div>');
379
- $container.addClass(this.getNamespace('footer-buttons'));
380
- this.indexedButtons = {};
381
- $.each(this.options.buttons, function(index, button) {
382
- var $button = that.createButton(button);
383
- if (typeof button.id !== 'undefined') {
384
- that.indexedButtons[button.id] = $button;
385
- }
386
- $container.append($button);
387
- });
388
-
389
- return $container;
390
- },
391
- createButton: function(button) {
392
- var $button = $('<button class="btn"></button>');
393
- $button.addClass(this.getButtonSize());
394
-
395
- // Icon
396
- if (typeof button.icon !== undefined && $.trim(button.icon) !== '') {
397
- $button.append(this.createButtonIcon(button.icon));
398
- }
399
-
400
- // Label
401
- if (typeof button.label !== undefined) {
402
- $button.append(button.label);
403
- }
404
-
405
- // Css class
406
- if (typeof button.cssClass !== undefined && $.trim(button.cssClass) !== '') {
407
- $button.addClass(button.cssClass);
408
- } else {
409
- $button.addClass('btn-default');
410
- }
411
-
412
- // Button on click
413
- $button.on('click', {dialog: this, button: button}, function(event) {
414
- var dialog = event.data.dialog;
415
- var button = event.data.button;
416
- if (typeof button.action === 'function') {
417
- button.action.call(this, dialog);
418
- }
419
-
420
- if (button.autospin) {
421
- var $button = $(this);
422
- $button.find('.' + dialog.getNamespace('button-icon')).remove();
423
- $button.prepend(dialog.createButtonIcon(dialog.getSpinicon()).addClass('icon-spin'));
424
- }
425
- });
426
-
427
- return $button;
428
- },
429
- createButtonIcon: function(icon) {
430
- var $icon = $('<span></span>');
431
- $icon.addClass(this.getNamespace('button-icon')).addClass(icon);
432
-
433
- return $icon;
434
- },
435
- /**
436
- * Invoke this only after the dialog is realized.
437
- *
438
- * @param {type} enable
439
- * @returns {undefined}
440
- */
441
- enableButtons: function(enable) {
442
- var $buttons = this.getModalFooter().find('.btn');
443
- $buttons.prop("disabled", !enable).toggleClass('disabled', !enable);
444
-
445
- return this;
446
- },
447
- /**
448
- * Invoke this only after the dialog is realized.
449
- *
450
- * @param {type} enable
451
- * @returns {undefined}
452
- */
453
- updateClosable: function() {
454
- if (this.isRealized()) {
455
- // Backdrop, I did't find a way to change bs3 backdrop option after the dialog is popped up, so here's a new wheel.
456
- var $theBigMask = this.getModal();
457
- $theBigMask.off('click').on('click', {dialog: this}, function(event) {
458
- event.target === this && event.data.dialog.isClosable() && event.data.dialog.close();
459
- });
460
-
461
- // Close button
462
- this.getModalHeader().find('.' + this.getNamespace('close-button')).toggle(this.isClosable());
463
-
464
- // ESC key support
465
- $theBigMask.off('keyup').on('keyup', {dialog: this}, function(event) {
466
- event.which === 27 && event.data.dialog.isClosable() && event.data.dialog.close();
467
- });
468
- }
469
-
470
- return this;
471
- },
472
- /**
473
- * Set handler for modal event 'show'.
474
- * This is a setter!
475
- *
476
- * @param {type} onopen
477
- * @returns {_L9.BootstrapDialog.prototype}
478
- */
479
- onShow: function(onshow) {
480
- this.options.onshow = onshow;
481
-
482
- return this;
483
- },
484
- /**
485
- * Set handler for modal event 'hide'.
486
- * This is a setter!
487
- *
488
- * @param {type} onclose
489
- * @returns {_L9.BootstrapDialog.prototype}
490
- */
491
- onHide: function(onhide) {
492
- this.options.onhide = onhide;
493
-
494
- return this;
495
- },
496
- isRealized: function() {
497
- return this.realized;
498
- },
499
- setRealized: function(realized) {
500
- this.realized = realized;
501
-
502
- return this;
503
- },
504
- isOpened: function() {
505
- return this.opened;
506
- },
507
- setOpened: function(opened) {
508
- this.opened = opened;
509
-
510
- return this;
511
- },
512
- handleModalEvents: function() {
513
- this.getModal().on('show.bs.modal', {dialog: this}, function(event) {
514
- var dialog = event.data.dialog;
515
- typeof dialog.options.onshow === 'function' && dialog.options.onshow(dialog);
516
- dialog.showPageScrollBar(true);
517
- });
518
- this.getModal().on('hide.bs.modal', {dialog: this}, function(event) {
519
- var dialog = event.data.dialog;
520
- typeof dialog.options.onhide === 'function' && dialog.options.onhide(dialog);
521
- });
522
- this.getModal().on('hidden.bs.modal', {dialog: this}, function(event) {
523
- var dialog = event.data.dialog;
524
- dialog.isAutodestroy() && $(this).remove();
525
- dialog.showPageScrollBar(false);
526
- });
527
-
528
- return this;
529
- },
530
- showPageScrollBar: function(show) {
531
- $(document.body).toggleClass('modal-open', show);
532
- },
533
- realize: function() {
534
- this.initModalStuff();
535
- this.getModal().addClass(BootstrapDialog.NAMESPACE)
536
- .addClass(this.getType())
537
- .addClass(this.getSize())
538
- .addClass(this.getCssClass());
539
- this.getModalHeader().append(this.createHeaderContent());
540
- this.getModalBody().append(this.createBodyContent());
541
- this.getModalFooter().append(this.createFooterContent());
542
- this.getModal().modal({
543
- backdrop: 'static',
544
- keyboard: false,
545
- show: false
546
- });
547
- this.handleModalEvents();
548
- this.setRealized(true);
549
-
550
- return this;
551
- },
552
- open: function() {
553
- !this.isRealized() && this.realize();
554
- this.updateClosable();
555
- this.getModal().modal('show');
556
- this.setOpened(true);
557
-
558
- return this;
559
- },
560
- close: function() {
561
- this.getModal().modal('hide');
562
- if (this.isAutodestroy()) {
563
- delete BootstrapDialog.dialogs[this.getId()];
564
- }
565
- this.setOpened(false);
566
-
567
- return this;
568
- }
569
- };
570
-
571
- /**
572
- * RFC4122 version 4 compliant unique id creator.
573
- *
574
- * Added by https://github.com/tufanbarisyildirim/
575
- *
576
- * @returns {String}
577
- */
578
- BootstrapDialog.newGuid = function() {
579
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
580
- var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
581
- return v.toString(16);
582
- });
583
- };
584
-
585
- /* ================================================
586
- * For lazy people
587
- * ================================================ */
588
-
589
- /**
590
- * Shortcut function: show
591
- *
592
- * @param {type} options
593
- * @returns {undefined}
594
- */
595
- BootstrapDialog.show = function(options) {
596
- new BootstrapDialog(options).open();
597
- };
598
-
599
- /**
600
- * Alert window
601
- *
602
- * @param {type} message
603
- * @param {type} callback
604
- * @returns {undefined}
605
- */
606
- BootstrapDialog.alert = function(message, callback) {
607
- new BootstrapDialog({
608
- message: message,
609
- data: {
610
- 'callback': callback
611
- },
612
- closable: false,
613
- buttons: [{
614
- label: 'OK',
615
- action: function(dialog) {
616
- typeof dialog.getData('callback') === 'function' && dialog.getData('callback')(true);
617
- dialog.close();
618
- }
619
- }]
620
- }).open();
621
- };
622
-
623
- /**
624
- * Confirm window
625
- *
626
- * @param {type} message
627
- * @param {type} callback
628
- * @returns {undefined}
629
- */
630
- BootstrapDialog.confirm = function(message, callback) {
631
- new BootstrapDialog({
632
- title: 'Confirmation',
633
- message: message,
634
- closable: false,
635
- data: {
636
- 'callback': callback
637
- },
638
- buttons: [{
639
- label: 'Cancel',
640
- action: function(dialog) {
641
- typeof dialog.getData('callback') === 'function' && dialog.getData('callback')(false);
642
- dialog.close();
643
- }
644
- }, {
645
- label: 'OK',
646
- cssClass: 'btn-primary',
647
- action: function(dialog) {
648
- typeof dialog.getData('callback') === 'function' && dialog.getData('callback')(true);
649
- dialog.close();
650
- }
651
- }]
652
- }).open();
653
- };
654
-}(window.jQuery);
securis/src/main/webapp/js/vendor/bootstrap.js
deleted file mode 100644
....@@ -1,2114 +0,0 @@
1
-/*!
2
- * Bootstrap v3.2.0 (http://getbootstrap.com)
3
- * Copyright 2011-2014 Twitter, Inc.
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */
6
-
7
-if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
8
-
9
-/* ========================================================================
10
- * Bootstrap: transition.js v3.2.0
11
- * http://getbootstrap.com/javascript/#transitions
12
- * ========================================================================
13
- * Copyright 2011-2014 Twitter, Inc.
14
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
15
- * ======================================================================== */
16
-
17
-
18
-+function ($) {
19
- 'use strict';
20
-
21
- // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
22
- // ============================================================
23
-
24
- function transitionEnd() {
25
- var el = document.createElement('bootstrap')
26
-
27
- var transEndEventNames = {
28
- WebkitTransition : 'webkitTransitionEnd',
29
- MozTransition : 'transitionend',
30
- OTransition : 'oTransitionEnd otransitionend',
31
- transition : 'transitionend'
32
- }
33
-
34
- for (var name in transEndEventNames) {
35
- if (el.style[name] !== undefined) {
36
- return { end: transEndEventNames[name] }
37
- }
38
- }
39
-
40
- return false // explicit for ie8 ( ._.)
41
- }
42
-
43
- // http://blog.alexmaccaw.com/css-transitions
44
- $.fn.emulateTransitionEnd = function (duration) {
45
- var called = false
46
- var $el = this
47
- $(this).one('bsTransitionEnd', function () { called = true })
48
- var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
49
- setTimeout(callback, duration)
50
- return this
51
- }
52
-
53
- $(function () {
54
- $.support.transition = transitionEnd()
55
-
56
- if (!$.support.transition) return
57
-
58
- $.event.special.bsTransitionEnd = {
59
- bindType: $.support.transition.end,
60
- delegateType: $.support.transition.end,
61
- handle: function (e) {
62
- if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
63
- }
64
- }
65
- })
66
-
67
-}(jQuery);
68
-
69
-/* ========================================================================
70
- * Bootstrap: alert.js v3.2.0
71
- * http://getbootstrap.com/javascript/#alerts
72
- * ========================================================================
73
- * Copyright 2011-2014 Twitter, Inc.
74
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
75
- * ======================================================================== */
76
-
77
-
78
-+function ($) {
79
- 'use strict';
80
-
81
- // ALERT CLASS DEFINITION
82
- // ======================
83
-
84
- var dismiss = '[data-dismiss="alert"]'
85
- var Alert = function (el) {
86
- $(el).on('click', dismiss, this.close)
87
- }
88
-
89
- Alert.VERSION = '3.2.0'
90
-
91
- Alert.prototype.close = function (e) {
92
- var $this = $(this)
93
- var selector = $this.attr('data-target')
94
-
95
- if (!selector) {
96
- selector = $this.attr('href')
97
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
98
- }
99
-
100
- var $parent = $(selector)
101
-
102
- if (e) e.preventDefault()
103
-
104
- if (!$parent.length) {
105
- $parent = $this.hasClass('alert') ? $this : $this.parent()
106
- }
107
-
108
- $parent.trigger(e = $.Event('close.bs.alert'))
109
-
110
- if (e.isDefaultPrevented()) return
111
-
112
- $parent.removeClass('in')
113
-
114
- function removeElement() {
115
- // detach from parent, fire event then clean up data
116
- $parent.detach().trigger('closed.bs.alert').remove()
117
- }
118
-
119
- $.support.transition && $parent.hasClass('fade') ?
120
- $parent
121
- .one('bsTransitionEnd', removeElement)
122
- .emulateTransitionEnd(150) :
123
- removeElement()
124
- }
125
-
126
-
127
- // ALERT PLUGIN DEFINITION
128
- // =======================
129
-
130
- function Plugin(option) {
131
- return this.each(function () {
132
- var $this = $(this)
133
- var data = $this.data('bs.alert')
134
-
135
- if (!data) $this.data('bs.alert', (data = new Alert(this)))
136
- if (typeof option == 'string') data[option].call($this)
137
- })
138
- }
139
-
140
- var old = $.fn.alert
141
-
142
- $.fn.alert = Plugin
143
- $.fn.alert.Constructor = Alert
144
-
145
-
146
- // ALERT NO CONFLICT
147
- // =================
148
-
149
- $.fn.alert.noConflict = function () {
150
- $.fn.alert = old
151
- return this
152
- }
153
-
154
-
155
- // ALERT DATA-API
156
- // ==============
157
-
158
- $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
159
-
160
-}(jQuery);
161
-
162
-/* ========================================================================
163
- * Bootstrap: button.js v3.2.0
164
- * http://getbootstrap.com/javascript/#buttons
165
- * ========================================================================
166
- * Copyright 2011-2014 Twitter, Inc.
167
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
168
- * ======================================================================== */
169
-
170
-
171
-+function ($) {
172
- 'use strict';
173
-
174
- // BUTTON PUBLIC CLASS DEFINITION
175
- // ==============================
176
-
177
- var Button = function (element, options) {
178
- this.$element = $(element)
179
- this.options = $.extend({}, Button.DEFAULTS, options)
180
- this.isLoading = false
181
- }
182
-
183
- Button.VERSION = '3.2.0'
184
-
185
- Button.DEFAULTS = {
186
- loadingText: 'loading...'
187
- }
188
-
189
- Button.prototype.setState = function (state) {
190
- var d = 'disabled'
191
- var $el = this.$element
192
- var val = $el.is('input') ? 'val' : 'html'
193
- var data = $el.data()
194
-
195
- state = state + 'Text'
196
-
197
- if (data.resetText == null) $el.data('resetText', $el[val]())
198
-
199
- $el[val](data[state] == null ? this.options[state] : data[state])
200
-
201
- // push to event loop to allow forms to submit
202
- setTimeout($.proxy(function () {
203
- if (state == 'loadingText') {
204
- this.isLoading = true
205
- $el.addClass(d).attr(d, d)
206
- } else if (this.isLoading) {
207
- this.isLoading = false
208
- $el.removeClass(d).removeAttr(d)
209
- }
210
- }, this), 0)
211
- }
212
-
213
- Button.prototype.toggle = function () {
214
- var changed = true
215
- var $parent = this.$element.closest('[data-toggle="buttons"]')
216
-
217
- if ($parent.length) {
218
- var $input = this.$element.find('input')
219
- if ($input.prop('type') == 'radio') {
220
- if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
221
- else $parent.find('.active').removeClass('active')
222
- }
223
- if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
224
- }
225
-
226
- if (changed) this.$element.toggleClass('active')
227
- }
228
-
229
-
230
- // BUTTON PLUGIN DEFINITION
231
- // ========================
232
-
233
- function Plugin(option) {
234
- return this.each(function () {
235
- var $this = $(this)
236
- var data = $this.data('bs.button')
237
- var options = typeof option == 'object' && option
238
-
239
- if (!data) $this.data('bs.button', (data = new Button(this, options)))
240
-
241
- if (option == 'toggle') data.toggle()
242
- else if (option) data.setState(option)
243
- })
244
- }
245
-
246
- var old = $.fn.button
247
-
248
- $.fn.button = Plugin
249
- $.fn.button.Constructor = Button
250
-
251
-
252
- // BUTTON NO CONFLICT
253
- // ==================
254
-
255
- $.fn.button.noConflict = function () {
256
- $.fn.button = old
257
- return this
258
- }
259
-
260
-
261
- // BUTTON DATA-API
262
- // ===============
263
-
264
- $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
265
- var $btn = $(e.target)
266
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
267
- Plugin.call($btn, 'toggle')
268
- e.preventDefault()
269
- })
270
-
271
-}(jQuery);
272
-
273
-/* ========================================================================
274
- * Bootstrap: carousel.js v3.2.0
275
- * http://getbootstrap.com/javascript/#carousel
276
- * ========================================================================
277
- * Copyright 2011-2014 Twitter, Inc.
278
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
279
- * ======================================================================== */
280
-
281
-
282
-+function ($) {
283
- 'use strict';
284
-
285
- // CAROUSEL CLASS DEFINITION
286
- // =========================
287
-
288
- var Carousel = function (element, options) {
289
- this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))
290
- this.$indicators = this.$element.find('.carousel-indicators')
291
- this.options = options
292
- this.paused =
293
- this.sliding =
294
- this.interval =
295
- this.$active =
296
- this.$items = null
297
-
298
- this.options.pause == 'hover' && this.$element
299
- .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
300
- .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
301
- }
302
-
303
- Carousel.VERSION = '3.2.0'
304
-
305
- Carousel.DEFAULTS = {
306
- interval: 5000,
307
- pause: 'hover',
308
- wrap: true
309
- }
310
-
311
- Carousel.prototype.keydown = function (e) {
312
- switch (e.which) {
313
- case 37: this.prev(); break
314
- case 39: this.next(); break
315
- default: return
316
- }
317
-
318
- e.preventDefault()
319
- }
320
-
321
- Carousel.prototype.cycle = function (e) {
322
- e || (this.paused = false)
323
-
324
- this.interval && clearInterval(this.interval)
325
-
326
- this.options.interval
327
- && !this.paused
328
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
329
-
330
- return this
331
- }
332
-
333
- Carousel.prototype.getItemIndex = function (item) {
334
- this.$items = item.parent().children('.item')
335
- return this.$items.index(item || this.$active)
336
- }
337
-
338
- Carousel.prototype.to = function (pos) {
339
- var that = this
340
- var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
341
-
342
- if (pos > (this.$items.length - 1) || pos < 0) return
343
-
344
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
345
- if (activeIndex == pos) return this.pause().cycle()
346
-
347
- return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
348
- }
349
-
350
- Carousel.prototype.pause = function (e) {
351
- e || (this.paused = true)
352
-
353
- if (this.$element.find('.next, .prev').length && $.support.transition) {
354
- this.$element.trigger($.support.transition.end)
355
- this.cycle(true)
356
- }
357
-
358
- this.interval = clearInterval(this.interval)
359
-
360
- return this
361
- }
362
-
363
- Carousel.prototype.next = function () {
364
- if (this.sliding) return
365
- return this.slide('next')
366
- }
367
-
368
- Carousel.prototype.prev = function () {
369
- if (this.sliding) return
370
- return this.slide('prev')
371
- }
372
-
373
- Carousel.prototype.slide = function (type, next) {
374
- var $active = this.$element.find('.item.active')
375
- var $next = next || $active[type]()
376
- var isCycling = this.interval
377
- var direction = type == 'next' ? 'left' : 'right'
378
- var fallback = type == 'next' ? 'first' : 'last'
379
- var that = this
380
-
381
- if (!$next.length) {
382
- if (!this.options.wrap) return
383
- $next = this.$element.find('.item')[fallback]()
384
- }
385
-
386
- if ($next.hasClass('active')) return (this.sliding = false)
387
-
388
- var relatedTarget = $next[0]
389
- var slideEvent = $.Event('slide.bs.carousel', {
390
- relatedTarget: relatedTarget,
391
- direction: direction
392
- })
393
- this.$element.trigger(slideEvent)
394
- if (slideEvent.isDefaultPrevented()) return
395
-
396
- this.sliding = true
397
-
398
- isCycling && this.pause()
399
-
400
- if (this.$indicators.length) {
401
- this.$indicators.find('.active').removeClass('active')
402
- var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
403
- $nextIndicator && $nextIndicator.addClass('active')
404
- }
405
-
406
- var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
407
- if ($.support.transition && this.$element.hasClass('slide')) {
408
- $next.addClass(type)
409
- $next[0].offsetWidth // force reflow
410
- $active.addClass(direction)
411
- $next.addClass(direction)
412
- $active
413
- .one('bsTransitionEnd', function () {
414
- $next.removeClass([type, direction].join(' ')).addClass('active')
415
- $active.removeClass(['active', direction].join(' '))
416
- that.sliding = false
417
- setTimeout(function () {
418
- that.$element.trigger(slidEvent)
419
- }, 0)
420
- })
421
- .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
422
- } else {
423
- $active.removeClass('active')
424
- $next.addClass('active')
425
- this.sliding = false
426
- this.$element.trigger(slidEvent)
427
- }
428
-
429
- isCycling && this.cycle()
430
-
431
- return this
432
- }
433
-
434
-
435
- // CAROUSEL PLUGIN DEFINITION
436
- // ==========================
437
-
438
- function Plugin(option) {
439
- return this.each(function () {
440
- var $this = $(this)
441
- var data = $this.data('bs.carousel')
442
- var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
443
- var action = typeof option == 'string' ? option : options.slide
444
-
445
- if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
446
- if (typeof option == 'number') data.to(option)
447
- else if (action) data[action]()
448
- else if (options.interval) data.pause().cycle()
449
- })
450
- }
451
-
452
- var old = $.fn.carousel
453
-
454
- $.fn.carousel = Plugin
455
- $.fn.carousel.Constructor = Carousel
456
-
457
-
458
- // CAROUSEL NO CONFLICT
459
- // ====================
460
-
461
- $.fn.carousel.noConflict = function () {
462
- $.fn.carousel = old
463
- return this
464
- }
465
-
466
-
467
- // CAROUSEL DATA-API
468
- // =================
469
-
470
- $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
471
- var href
472
- var $this = $(this)
473
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
474
- if (!$target.hasClass('carousel')) return
475
- var options = $.extend({}, $target.data(), $this.data())
476
- var slideIndex = $this.attr('data-slide-to')
477
- if (slideIndex) options.interval = false
478
-
479
- Plugin.call($target, options)
480
-
481
- if (slideIndex) {
482
- $target.data('bs.carousel').to(slideIndex)
483
- }
484
-
485
- e.preventDefault()
486
- })
487
-
488
- $(window).on('load', function () {
489
- $('[data-ride="carousel"]').each(function () {
490
- var $carousel = $(this)
491
- Plugin.call($carousel, $carousel.data())
492
- })
493
- })
494
-
495
-}(jQuery);
496
-
497
-/* ========================================================================
498
- * Bootstrap: collapse.js v3.2.0
499
- * http://getbootstrap.com/javascript/#collapse
500
- * ========================================================================
501
- * Copyright 2011-2014 Twitter, Inc.
502
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
503
- * ======================================================================== */
504
-
505
-
506
-+function ($) {
507
- 'use strict';
508
-
509
- // COLLAPSE PUBLIC CLASS DEFINITION
510
- // ================================
511
-
512
- var Collapse = function (element, options) {
513
- this.$element = $(element)
514
- this.options = $.extend({}, Collapse.DEFAULTS, options)
515
- this.transitioning = null
516
-
517
- if (this.options.parent) this.$parent = $(this.options.parent)
518
- if (this.options.toggle) this.toggle()
519
- }
520
-
521
- Collapse.VERSION = '3.2.0'
522
-
523
- Collapse.DEFAULTS = {
524
- toggle: true
525
- }
526
-
527
- Collapse.prototype.dimension = function () {
528
- var hasWidth = this.$element.hasClass('width')
529
- return hasWidth ? 'width' : 'height'
530
- }
531
-
532
- Collapse.prototype.show = function () {
533
- if (this.transitioning || this.$element.hasClass('in')) return
534
-
535
- var startEvent = $.Event('show.bs.collapse')
536
- this.$element.trigger(startEvent)
537
- if (startEvent.isDefaultPrevented()) return
538
-
539
- var actives = this.$parent && this.$parent.find('> .panel > .in')
540
-
541
- if (actives && actives.length) {
542
- var hasData = actives.data('bs.collapse')
543
- if (hasData && hasData.transitioning) return
544
- Plugin.call(actives, 'hide')
545
- hasData || actives.data('bs.collapse', null)
546
- }
547
-
548
- var dimension = this.dimension()
549
-
550
- this.$element
551
- .removeClass('collapse')
552
- .addClass('collapsing')[dimension](0)
553
-
554
- this.transitioning = 1
555
-
556
- var complete = function () {
557
- this.$element
558
- .removeClass('collapsing')
559
- .addClass('collapse in')[dimension]('')
560
- this.transitioning = 0
561
- this.$element
562
- .trigger('shown.bs.collapse')
563
- }
564
-
565
- if (!$.support.transition) return complete.call(this)
566
-
567
- var scrollSize = $.camelCase(['scroll', dimension].join('-'))
568
-
569
- this.$element
570
- .one('bsTransitionEnd', $.proxy(complete, this))
571
- .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
572
- }
573
-
574
- Collapse.prototype.hide = function () {
575
- if (this.transitioning || !this.$element.hasClass('in')) return
576
-
577
- var startEvent = $.Event('hide.bs.collapse')
578
- this.$element.trigger(startEvent)
579
- if (startEvent.isDefaultPrevented()) return
580
-
581
- var dimension = this.dimension()
582
-
583
- this.$element[dimension](this.$element[dimension]())[0].offsetHeight
584
-
585
- this.$element
586
- .addClass('collapsing')
587
- .removeClass('collapse')
588
- .removeClass('in')
589
-
590
- this.transitioning = 1
591
-
592
- var complete = function () {
593
- this.transitioning = 0
594
- this.$element
595
- .trigger('hidden.bs.collapse')
596
- .removeClass('collapsing')
597
- .addClass('collapse')
598
- }
599
-
600
- if (!$.support.transition) return complete.call(this)
601
-
602
- this.$element
603
- [dimension](0)
604
- .one('bsTransitionEnd', $.proxy(complete, this))
605
- .emulateTransitionEnd(350)
606
- }
607
-
608
- Collapse.prototype.toggle = function () {
609
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
610
- }
611
-
612
-
613
- // COLLAPSE PLUGIN DEFINITION
614
- // ==========================
615
-
616
- function Plugin(option) {
617
- return this.each(function () {
618
- var $this = $(this)
619
- var data = $this.data('bs.collapse')
620
- var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
621
-
622
- if (!data && options.toggle && option == 'show') option = !option
623
- if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
624
- if (typeof option == 'string') data[option]()
625
- })
626
- }
627
-
628
- var old = $.fn.collapse
629
-
630
- $.fn.collapse = Plugin
631
- $.fn.collapse.Constructor = Collapse
632
-
633
-
634
- // COLLAPSE NO CONFLICT
635
- // ====================
636
-
637
- $.fn.collapse.noConflict = function () {
638
- $.fn.collapse = old
639
- return this
640
- }
641
-
642
-
643
- // COLLAPSE DATA-API
644
- // =================
645
-
646
- $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
647
- var href
648
- var $this = $(this)
649
- var target = $this.attr('data-target')
650
- || e.preventDefault()
651
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
652
- var $target = $(target)
653
- var data = $target.data('bs.collapse')
654
- var option = data ? 'toggle' : $this.data()
655
- var parent = $this.attr('data-parent')
656
- var $parent = parent && $(parent)
657
-
658
- if (!data || !data.transitioning) {
659
- if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
660
- $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
661
- }
662
-
663
- Plugin.call($target, option)
664
- })
665
-
666
-}(jQuery);
667
-
668
-/* ========================================================================
669
- * Bootstrap: dropdown.js v3.2.0
670
- * http://getbootstrap.com/javascript/#dropdowns
671
- * ========================================================================
672
- * Copyright 2011-2014 Twitter, Inc.
673
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
674
- * ======================================================================== */
675
-
676
-
677
-+function ($) {
678
- 'use strict';
679
-
680
- // DROPDOWN CLASS DEFINITION
681
- // =========================
682
-
683
- var backdrop = '.dropdown-backdrop'
684
- var toggle = '[data-toggle="dropdown"]'
685
- var Dropdown = function (element) {
686
- $(element).on('click.bs.dropdown', this.toggle)
687
- }
688
-
689
- Dropdown.VERSION = '3.2.0'
690
-
691
- Dropdown.prototype.toggle = function (e) {
692
- var $this = $(this)
693
-
694
- if ($this.is('.disabled, :disabled')) return
695
-
696
- var $parent = getParent($this)
697
- var isActive = $parent.hasClass('open')
698
-
699
- clearMenus()
700
-
701
- if (!isActive) {
702
- if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
703
- // if mobile we use a backdrop because click events don't delegate
704
- $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
705
- }
706
-
707
- var relatedTarget = { relatedTarget: this }
708
- $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
709
-
710
- if (e.isDefaultPrevented()) return
711
-
712
- $this.trigger('focus')
713
-
714
- $parent
715
- .toggleClass('open')
716
- .trigger('shown.bs.dropdown', relatedTarget)
717
- }
718
-
719
- return false
720
- }
721
-
722
- Dropdown.prototype.keydown = function (e) {
723
- if (!/(38|40|27)/.test(e.keyCode)) return
724
-
725
- var $this = $(this)
726
-
727
- e.preventDefault()
728
- e.stopPropagation()
729
-
730
- if ($this.is('.disabled, :disabled')) return
731
-
732
- var $parent = getParent($this)
733
- var isActive = $parent.hasClass('open')
734
-
735
- if (!isActive || (isActive && e.keyCode == 27)) {
736
- if (e.which == 27) $parent.find(toggle).trigger('focus')
737
- return $this.trigger('click')
738
- }
739
-
740
- var desc = ' li:not(.divider):visible a'
741
- var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
742
-
743
- if (!$items.length) return
744
-
745
- var index = $items.index($items.filter(':focus'))
746
-
747
- if (e.keyCode == 38 && index > 0) index-- // up
748
- if (e.keyCode == 40 && index < $items.length - 1) index++ // down
749
- if (!~index) index = 0
750
-
751
- $items.eq(index).trigger('focus')
752
- }
753
-
754
- function clearMenus(e) {
755
- if (e && e.which === 3) return
756
- $(backdrop).remove()
757
- $(toggle).each(function () {
758
- var $parent = getParent($(this))
759
- var relatedTarget = { relatedTarget: this }
760
- if (!$parent.hasClass('open')) return
761
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
762
- if (e.isDefaultPrevented()) return
763
- $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
764
- })
765
- }
766
-
767
- function getParent($this) {
768
- var selector = $this.attr('data-target')
769
-
770
- if (!selector) {
771
- selector = $this.attr('href')
772
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
773
- }
774
-
775
- var $parent = selector && $(selector)
776
-
777
- return $parent && $parent.length ? $parent : $this.parent()
778
- }
779
-
780
-
781
- // DROPDOWN PLUGIN DEFINITION
782
- // ==========================
783
-
784
- function Plugin(option) {
785
- return this.each(function () {
786
- var $this = $(this)
787
- var data = $this.data('bs.dropdown')
788
-
789
- if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
790
- if (typeof option == 'string') data[option].call($this)
791
- })
792
- }
793
-
794
- var old = $.fn.dropdown
795
-
796
- $.fn.dropdown = Plugin
797
- $.fn.dropdown.Constructor = Dropdown
798
-
799
-
800
- // DROPDOWN NO CONFLICT
801
- // ====================
802
-
803
- $.fn.dropdown.noConflict = function () {
804
- $.fn.dropdown = old
805
- return this
806
- }
807
-
808
-
809
- // APPLY TO STANDARD DROPDOWN ELEMENTS
810
- // ===================================
811
-
812
- $(document)
813
- .on('click.bs.dropdown.data-api', clearMenus)
814
- .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
815
- .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
816
- .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
817
-
818
-}(jQuery);
819
-
820
-/* ========================================================================
821
- * Bootstrap: modal.js v3.2.0
822
- * http://getbootstrap.com/javascript/#modals
823
- * ========================================================================
824
- * Copyright 2011-2014 Twitter, Inc.
825
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
826
- * ======================================================================== */
827
-
828
-
829
-+function ($) {
830
- 'use strict';
831
-
832
- // MODAL CLASS DEFINITION
833
- // ======================
834
-
835
- var Modal = function (element, options) {
836
- this.options = options
837
- this.$body = $(document.body)
838
- this.$element = $(element)
839
- this.$backdrop =
840
- this.isShown = null
841
- this.scrollbarWidth = 0
842
-
843
- if (this.options.remote) {
844
- this.$element
845
- .find('.modal-content')
846
- .load(this.options.remote, $.proxy(function () {
847
- this.$element.trigger('loaded.bs.modal')
848
- }, this))
849
- }
850
- }
851
-
852
- Modal.VERSION = '3.2.0'
853
-
854
- Modal.DEFAULTS = {
855
- backdrop: true,
856
- keyboard: true,
857
- show: true
858
- }
859
-
860
- Modal.prototype.toggle = function (_relatedTarget) {
861
- return this.isShown ? this.hide() : this.show(_relatedTarget)
862
- }
863
-
864
- Modal.prototype.show = function (_relatedTarget) {
865
- var that = this
866
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
867
-
868
- this.$element.trigger(e)
869
-
870
- if (this.isShown || e.isDefaultPrevented()) return
871
-
872
- this.isShown = true
873
-
874
- this.checkScrollbar()
875
- this.$body.addClass('modal-open')
876
-
877
- this.setScrollbar()
878
- this.escape()
879
-
880
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
881
-
882
- this.backdrop(function () {
883
- var transition = $.support.transition && that.$element.hasClass('fade')
884
-
885
- if (!that.$element.parent().length) {
886
- that.$element.appendTo(that.$body) // don't move modals dom position
887
- }
888
-
889
- that.$element
890
- .show()
891
- .scrollTop(0)
892
-
893
- if (transition) {
894
- that.$element[0].offsetWidth // force reflow
895
- }
896
-
897
- that.$element
898
- .addClass('in')
899
- .attr('aria-hidden', false)
900
-
901
- that.enforceFocus()
902
-
903
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
904
-
905
- transition ?
906
- that.$element.find('.modal-dialog') // wait for modal to slide in
907
- .one('bsTransitionEnd', function () {
908
- that.$element.trigger('focus').trigger(e)
909
- })
910
- .emulateTransitionEnd(300) :
911
- that.$element.trigger('focus').trigger(e)
912
- })
913
- }
914
-
915
- Modal.prototype.hide = function (e) {
916
- if (e) e.preventDefault()
917
-
918
- e = $.Event('hide.bs.modal')
919
-
920
- this.$element.trigger(e)
921
-
922
- if (!this.isShown || e.isDefaultPrevented()) return
923
-
924
- this.isShown = false
925
-
926
- this.$body.removeClass('modal-open')
927
-
928
- this.resetScrollbar()
929
- this.escape()
930
-
931
- $(document).off('focusin.bs.modal')
932
-
933
- this.$element
934
- .removeClass('in')
935
- .attr('aria-hidden', true)
936
- .off('click.dismiss.bs.modal')
937
-
938
- $.support.transition && this.$element.hasClass('fade') ?
939
- this.$element
940
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
941
- .emulateTransitionEnd(300) :
942
- this.hideModal()
943
- }
944
-
945
- Modal.prototype.enforceFocus = function () {
946
- $(document)
947
- .off('focusin.bs.modal') // guard against infinite focus loop
948
- .on('focusin.bs.modal', $.proxy(function (e) {
949
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
950
- this.$element.trigger('focus')
951
- }
952
- }, this))
953
- }
954
-
955
- Modal.prototype.escape = function () {
956
- if (this.isShown && this.options.keyboard) {
957
- this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
958
- e.which == 27 && this.hide()
959
- }, this))
960
- } else if (!this.isShown) {
961
- this.$element.off('keyup.dismiss.bs.modal')
962
- }
963
- }
964
-
965
- Modal.prototype.hideModal = function () {
966
- var that = this
967
- this.$element.hide()
968
- this.backdrop(function () {
969
- that.$element.trigger('hidden.bs.modal')
970
- })
971
- }
972
-
973
- Modal.prototype.removeBackdrop = function () {
974
- this.$backdrop && this.$backdrop.remove()
975
- this.$backdrop = null
976
- }
977
-
978
- Modal.prototype.backdrop = function (callback) {
979
- var that = this
980
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
981
-
982
- if (this.isShown && this.options.backdrop) {
983
- var doAnimate = $.support.transition && animate
984
-
985
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
986
- .appendTo(this.$body)
987
-
988
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
989
- if (e.target !== e.currentTarget) return
990
- this.options.backdrop == 'static'
991
- ? this.$element[0].focus.call(this.$element[0])
992
- : this.hide.call(this)
993
- }, this))
994
-
995
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
996
-
997
- this.$backdrop.addClass('in')
998
-
999
- if (!callback) return
1000
-
1001
- doAnimate ?
1002
- this.$backdrop
1003
- .one('bsTransitionEnd', callback)
1004
- .emulateTransitionEnd(150) :
1005
- callback()
1006
-
1007
- } else if (!this.isShown && this.$backdrop) {
1008
- this.$backdrop.removeClass('in')
1009
-
1010
- var callbackRemove = function () {
1011
- that.removeBackdrop()
1012
- callback && callback()
1013
- }
1014
- $.support.transition && this.$element.hasClass('fade') ?
1015
- this.$backdrop
1016
- .one('bsTransitionEnd', callbackRemove)
1017
- .emulateTransitionEnd(150) :
1018
- callbackRemove()
1019
-
1020
- } else if (callback) {
1021
- callback()
1022
- }
1023
- }
1024
-
1025
- Modal.prototype.checkScrollbar = function () {
1026
- if (document.body.clientWidth >= window.innerWidth) return
1027
- this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
1028
- }
1029
-
1030
- Modal.prototype.setScrollbar = function () {
1031
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
1032
- if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
1033
- }
1034
-
1035
- Modal.prototype.resetScrollbar = function () {
1036
- this.$body.css('padding-right', '')
1037
- }
1038
-
1039
- Modal.prototype.measureScrollbar = function () { // thx walsh
1040
- var scrollDiv = document.createElement('div')
1041
- scrollDiv.className = 'modal-scrollbar-measure'
1042
- this.$body.append(scrollDiv)
1043
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
1044
- this.$body[0].removeChild(scrollDiv)
1045
- return scrollbarWidth
1046
- }
1047
-
1048
-
1049
- // MODAL PLUGIN DEFINITION
1050
- // =======================
1051
-
1052
- function Plugin(option, _relatedTarget) {
1053
- return this.each(function () {
1054
- var $this = $(this)
1055
- var data = $this.data('bs.modal')
1056
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
1057
-
1058
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
1059
- if (typeof option == 'string') data[option](_relatedTarget)
1060
- else if (options.show) data.show(_relatedTarget)
1061
- })
1062
- }
1063
-
1064
- var old = $.fn.modal
1065
-
1066
- $.fn.modal = Plugin
1067
- $.fn.modal.Constructor = Modal
1068
-
1069
-
1070
- // MODAL NO CONFLICT
1071
- // =================
1072
-
1073
- $.fn.modal.noConflict = function () {
1074
- $.fn.modal = old
1075
- return this
1076
- }
1077
-
1078
-
1079
- // MODAL DATA-API
1080
- // ==============
1081
-
1082
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
1083
- var $this = $(this)
1084
- var href = $this.attr('href')
1085
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
1086
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
1087
-
1088
- if ($this.is('a')) e.preventDefault()
1089
-
1090
- $target.one('show.bs.modal', function (showEvent) {
1091
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
1092
- $target.one('hidden.bs.modal', function () {
1093
- $this.is(':visible') && $this.trigger('focus')
1094
- })
1095
- })
1096
- Plugin.call($target, option, this)
1097
- })
1098
-
1099
-}(jQuery);
1100
-
1101
-/* ========================================================================
1102
- * Bootstrap: tooltip.js v3.2.0
1103
- * http://getbootstrap.com/javascript/#tooltip
1104
- * Inspired by the original jQuery.tipsy by Jason Frame
1105
- * ========================================================================
1106
- * Copyright 2011-2014 Twitter, Inc.
1107
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1108
- * ======================================================================== */
1109
-
1110
-
1111
-+function ($) {
1112
- 'use strict';
1113
-
1114
- // TOOLTIP PUBLIC CLASS DEFINITION
1115
- // ===============================
1116
-
1117
- var Tooltip = function (element, options) {
1118
- this.type =
1119
- this.options =
1120
- this.enabled =
1121
- this.timeout =
1122
- this.hoverState =
1123
- this.$element = null
1124
-
1125
- this.init('tooltip', element, options)
1126
- }
1127
-
1128
- Tooltip.VERSION = '3.2.0'
1129
-
1130
- Tooltip.DEFAULTS = {
1131
- animation: true,
1132
- placement: 'top',
1133
- selector: false,
1134
- template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
1135
- trigger: 'hover focus',
1136
- title: '',
1137
- delay: 0,
1138
- html: false,
1139
- container: false,
1140
- viewport: {
1141
- selector: 'body',
1142
- padding: 0
1143
- }
1144
- }
1145
-
1146
- Tooltip.prototype.init = function (type, element, options) {
1147
- this.enabled = true
1148
- this.type = type
1149
- this.$element = $(element)
1150
- this.options = this.getOptions(options)
1151
- this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
1152
-
1153
- var triggers = this.options.trigger.split(' ')
1154
-
1155
- for (var i = triggers.length; i--;) {
1156
- var trigger = triggers[i]
1157
-
1158
- if (trigger == 'click') {
1159
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1160
- } else if (trigger != 'manual') {
1161
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
1162
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
1163
-
1164
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1165
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1166
- }
1167
- }
1168
-
1169
- this.options.selector ?
1170
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1171
- this.fixTitle()
1172
- }
1173
-
1174
- Tooltip.prototype.getDefaults = function () {
1175
- return Tooltip.DEFAULTS
1176
- }
1177
-
1178
- Tooltip.prototype.getOptions = function (options) {
1179
- options = $.extend({}, this.getDefaults(), this.$element.data(), options)
1180
-
1181
- if (options.delay && typeof options.delay == 'number') {
1182
- options.delay = {
1183
- show: options.delay,
1184
- hide: options.delay
1185
- }
1186
- }
1187
-
1188
- return options
1189
- }
1190
-
1191
- Tooltip.prototype.getDelegateOptions = function () {
1192
- var options = {}
1193
- var defaults = this.getDefaults()
1194
-
1195
- this._options && $.each(this._options, function (key, value) {
1196
- if (defaults[key] != value) options[key] = value
1197
- })
1198
-
1199
- return options
1200
- }
1201
-
1202
- Tooltip.prototype.enter = function (obj) {
1203
- var self = obj instanceof this.constructor ?
1204
- obj : $(obj.currentTarget).data('bs.' + this.type)
1205
-
1206
- if (!self) {
1207
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1208
- $(obj.currentTarget).data('bs.' + this.type, self)
1209
- }
1210
-
1211
- clearTimeout(self.timeout)
1212
-
1213
- self.hoverState = 'in'
1214
-
1215
- if (!self.options.delay || !self.options.delay.show) return self.show()
1216
-
1217
- self.timeout = setTimeout(function () {
1218
- if (self.hoverState == 'in') self.show()
1219
- }, self.options.delay.show)
1220
- }
1221
-
1222
- Tooltip.prototype.leave = function (obj) {
1223
- var self = obj instanceof this.constructor ?
1224
- obj : $(obj.currentTarget).data('bs.' + this.type)
1225
-
1226
- if (!self) {
1227
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1228
- $(obj.currentTarget).data('bs.' + this.type, self)
1229
- }
1230
-
1231
- clearTimeout(self.timeout)
1232
-
1233
- self.hoverState = 'out'
1234
-
1235
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
1236
-
1237
- self.timeout = setTimeout(function () {
1238
- if (self.hoverState == 'out') self.hide()
1239
- }, self.options.delay.hide)
1240
- }
1241
-
1242
- Tooltip.prototype.show = function () {
1243
- var e = $.Event('show.bs.' + this.type)
1244
-
1245
- if (this.hasContent() && this.enabled) {
1246
- this.$element.trigger(e)
1247
-
1248
- var inDom = $.contains(document.documentElement, this.$element[0])
1249
- if (e.isDefaultPrevented() || !inDom) return
1250
- var that = this
1251
-
1252
- var $tip = this.tip()
1253
-
1254
- var tipId = this.getUID(this.type)
1255
-
1256
- this.setContent()
1257
- $tip.attr('id', tipId)
1258
- this.$element.attr('aria-describedby', tipId)
1259
-
1260
- if (this.options.animation) $tip.addClass('fade')
1261
-
1262
- var placement = typeof this.options.placement == 'function' ?
1263
- this.options.placement.call(this, $tip[0], this.$element[0]) :
1264
- this.options.placement
1265
-
1266
- var autoToken = /\s?auto?\s?/i
1267
- var autoPlace = autoToken.test(placement)
1268
- if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
1269
-
1270
- $tip
1271
- .detach()
1272
- .css({ top: 0, left: 0, display: 'block' })
1273
- .addClass(placement)
1274
- .data('bs.' + this.type, this)
1275
-
1276
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1277
-
1278
- var pos = this.getPosition()
1279
- var actualWidth = $tip[0].offsetWidth
1280
- var actualHeight = $tip[0].offsetHeight
1281
-
1282
- if (autoPlace) {
1283
- var orgPlacement = placement
1284
- var $parent = this.$element.parent()
1285
- var parentDim = this.getPosition($parent)
1286
-
1287
- placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
1288
- placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
1289
- placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
1290
- placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
1291
- placement
1292
-
1293
- $tip
1294
- .removeClass(orgPlacement)
1295
- .addClass(placement)
1296
- }
1297
-
1298
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
1299
-
1300
- this.applyPlacement(calculatedOffset, placement)
1301
-
1302
- var complete = function () {
1303
- that.$element.trigger('shown.bs.' + that.type)
1304
- that.hoverState = null
1305
- }
1306
-
1307
- $.support.transition && this.$tip.hasClass('fade') ?
1308
- $tip
1309
- .one('bsTransitionEnd', complete)
1310
- .emulateTransitionEnd(150) :
1311
- complete()
1312
- }
1313
- }
1314
-
1315
- Tooltip.prototype.applyPlacement = function (offset, placement) {
1316
- var $tip = this.tip()
1317
- var width = $tip[0].offsetWidth
1318
- var height = $tip[0].offsetHeight
1319
-
1320
- // manually read margins because getBoundingClientRect includes difference
1321
- var marginTop = parseInt($tip.css('margin-top'), 10)
1322
- var marginLeft = parseInt($tip.css('margin-left'), 10)
1323
-
1324
- // we must check for NaN for ie 8/9
1325
- if (isNaN(marginTop)) marginTop = 0
1326
- if (isNaN(marginLeft)) marginLeft = 0
1327
-
1328
- offset.top = offset.top + marginTop
1329
- offset.left = offset.left + marginLeft
1330
-
1331
- // $.fn.offset doesn't round pixel values
1332
- // so we use setOffset directly with our own function B-0
1333
- $.offset.setOffset($tip[0], $.extend({
1334
- using: function (props) {
1335
- $tip.css({
1336
- top: Math.round(props.top),
1337
- left: Math.round(props.left)
1338
- })
1339
- }
1340
- }, offset), 0)
1341
-
1342
- $tip.addClass('in')
1343
-
1344
- // check to see if placing tip in new offset caused the tip to resize itself
1345
- var actualWidth = $tip[0].offsetWidth
1346
- var actualHeight = $tip[0].offsetHeight
1347
-
1348
- if (placement == 'top' && actualHeight != height) {
1349
- offset.top = offset.top + height - actualHeight
1350
- }
1351
-
1352
- var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
1353
-
1354
- if (delta.left) offset.left += delta.left
1355
- else offset.top += delta.top
1356
-
1357
- var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
1358
- var arrowPosition = delta.left ? 'left' : 'top'
1359
- var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
1360
-
1361
- $tip.offset(offset)
1362
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
1363
- }
1364
-
1365
- Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
1366
- this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
1367
- }
1368
-
1369
- Tooltip.prototype.setContent = function () {
1370
- var $tip = this.tip()
1371
- var title = this.getTitle()
1372
-
1373
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1374
- $tip.removeClass('fade in top bottom left right')
1375
- }
1376
-
1377
- Tooltip.prototype.hide = function () {
1378
- var that = this
1379
- var $tip = this.tip()
1380
- var e = $.Event('hide.bs.' + this.type)
1381
-
1382
- this.$element.removeAttr('aria-describedby')
1383
-
1384
- function complete() {
1385
- if (that.hoverState != 'in') $tip.detach()
1386
- that.$element.trigger('hidden.bs.' + that.type)
1387
- }
1388
-
1389
- this.$element.trigger(e)
1390
-
1391
- if (e.isDefaultPrevented()) return
1392
-
1393
- $tip.removeClass('in')
1394
-
1395
- $.support.transition && this.$tip.hasClass('fade') ?
1396
- $tip
1397
- .one('bsTransitionEnd', complete)
1398
- .emulateTransitionEnd(150) :
1399
- complete()
1400
-
1401
- this.hoverState = null
1402
-
1403
- return this
1404
- }
1405
-
1406
- Tooltip.prototype.fixTitle = function () {
1407
- var $e = this.$element
1408
- if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
1409
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1410
- }
1411
- }
1412
-
1413
- Tooltip.prototype.hasContent = function () {
1414
- return this.getTitle()
1415
- }
1416
-
1417
- Tooltip.prototype.getPosition = function ($element) {
1418
- $element = $element || this.$element
1419
- var el = $element[0]
1420
- var isBody = el.tagName == 'BODY'
1421
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
1422
- scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
1423
- width: isBody ? $(window).width() : $element.outerWidth(),
1424
- height: isBody ? $(window).height() : $element.outerHeight()
1425
- }, isBody ? { top: 0, left: 0 } : $element.offset())
1426
- }
1427
-
1428
- Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
1429
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1430
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
1431
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
1432
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
1433
-
1434
- }
1435
-
1436
- Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
1437
- var delta = { top: 0, left: 0 }
1438
- if (!this.$viewport) return delta
1439
-
1440
- var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
1441
- var viewportDimensions = this.getPosition(this.$viewport)
1442
-
1443
- if (/right|left/.test(placement)) {
1444
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
1445
- var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
1446
- if (topEdgeOffset < viewportDimensions.top) { // top overflow
1447
- delta.top = viewportDimensions.top - topEdgeOffset
1448
- } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
1449
- delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
1450
- }
1451
- } else {
1452
- var leftEdgeOffset = pos.left - viewportPadding
1453
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth
1454
- if (leftEdgeOffset < viewportDimensions.left) { // left overflow
1455
- delta.left = viewportDimensions.left - leftEdgeOffset
1456
- } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
1457
- delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
1458
- }
1459
- }
1460
-
1461
- return delta
1462
- }
1463
-
1464
- Tooltip.prototype.getTitle = function () {
1465
- var title
1466
- var $e = this.$element
1467
- var o = this.options
1468
-
1469
- title = $e.attr('data-original-title')
1470
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1471
-
1472
- return title
1473
- }
1474
-
1475
- Tooltip.prototype.getUID = function (prefix) {
1476
- do prefix += ~~(Math.random() * 1000000)
1477
- while (document.getElementById(prefix))
1478
- return prefix
1479
- }
1480
-
1481
- Tooltip.prototype.tip = function () {
1482
- return (this.$tip = this.$tip || $(this.options.template))
1483
- }
1484
-
1485
- Tooltip.prototype.arrow = function () {
1486
- return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
1487
- }
1488
-
1489
- Tooltip.prototype.validate = function () {
1490
- if (!this.$element[0].parentNode) {
1491
- this.hide()
1492
- this.$element = null
1493
- this.options = null
1494
- }
1495
- }
1496
-
1497
- Tooltip.prototype.enable = function () {
1498
- this.enabled = true
1499
- }
1500
-
1501
- Tooltip.prototype.disable = function () {
1502
- this.enabled = false
1503
- }
1504
-
1505
- Tooltip.prototype.toggleEnabled = function () {
1506
- this.enabled = !this.enabled
1507
- }
1508
-
1509
- Tooltip.prototype.toggle = function (e) {
1510
- var self = this
1511
- if (e) {
1512
- self = $(e.currentTarget).data('bs.' + this.type)
1513
- if (!self) {
1514
- self = new this.constructor(e.currentTarget, this.getDelegateOptions())
1515
- $(e.currentTarget).data('bs.' + this.type, self)
1516
- }
1517
- }
1518
-
1519
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
1520
- }
1521
-
1522
- Tooltip.prototype.destroy = function () {
1523
- clearTimeout(this.timeout)
1524
- this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
1525
- }
1526
-
1527
-
1528
- // TOOLTIP PLUGIN DEFINITION
1529
- // =========================
1530
-
1531
- function Plugin(option) {
1532
- return this.each(function () {
1533
- var $this = $(this)
1534
- var data = $this.data('bs.tooltip')
1535
- var options = typeof option == 'object' && option
1536
-
1537
- if (!data && option == 'destroy') return
1538
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
1539
- if (typeof option == 'string') data[option]()
1540
- })
1541
- }
1542
-
1543
- var old = $.fn.tooltip
1544
-
1545
- $.fn.tooltip = Plugin
1546
- $.fn.tooltip.Constructor = Tooltip
1547
-
1548
-
1549
- // TOOLTIP NO CONFLICT
1550
- // ===================
1551
-
1552
- $.fn.tooltip.noConflict = function () {
1553
- $.fn.tooltip = old
1554
- return this
1555
- }
1556
-
1557
-}(jQuery);
1558
-
1559
-/* ========================================================================
1560
- * Bootstrap: popover.js v3.2.0
1561
- * http://getbootstrap.com/javascript/#popovers
1562
- * ========================================================================
1563
- * Copyright 2011-2014 Twitter, Inc.
1564
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1565
- * ======================================================================== */
1566
-
1567
-
1568
-+function ($) {
1569
- 'use strict';
1570
-
1571
- // POPOVER PUBLIC CLASS DEFINITION
1572
- // ===============================
1573
-
1574
- var Popover = function (element, options) {
1575
- this.init('popover', element, options)
1576
- }
1577
-
1578
- if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1579
-
1580
- Popover.VERSION = '3.2.0'
1581
-
1582
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
1583
- placement: 'right',
1584
- trigger: 'click',
1585
- content: '',
1586
- template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1587
- })
1588
-
1589
-
1590
- // NOTE: POPOVER EXTENDS tooltip.js
1591
- // ================================
1592
-
1593
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
1594
-
1595
- Popover.prototype.constructor = Popover
1596
-
1597
- Popover.prototype.getDefaults = function () {
1598
- return Popover.DEFAULTS
1599
- }
1600
-
1601
- Popover.prototype.setContent = function () {
1602
- var $tip = this.tip()
1603
- var title = this.getTitle()
1604
- var content = this.getContent()
1605
-
1606
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1607
- $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
1608
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
1609
- ](content)
1610
-
1611
- $tip.removeClass('fade top bottom left right in')
1612
-
1613
- // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
1614
- // this manually by checking the contents.
1615
- if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
1616
- }
1617
-
1618
- Popover.prototype.hasContent = function () {
1619
- return this.getTitle() || this.getContent()
1620
- }
1621
-
1622
- Popover.prototype.getContent = function () {
1623
- var $e = this.$element
1624
- var o = this.options
1625
-
1626
- return $e.attr('data-content')
1627
- || (typeof o.content == 'function' ?
1628
- o.content.call($e[0]) :
1629
- o.content)
1630
- }
1631
-
1632
- Popover.prototype.arrow = function () {
1633
- return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
1634
- }
1635
-
1636
- Popover.prototype.tip = function () {
1637
- if (!this.$tip) this.$tip = $(this.options.template)
1638
- return this.$tip
1639
- }
1640
-
1641
-
1642
- // POPOVER PLUGIN DEFINITION
1643
- // =========================
1644
-
1645
- function Plugin(option) {
1646
- return this.each(function () {
1647
- var $this = $(this)
1648
- var data = $this.data('bs.popover')
1649
- var options = typeof option == 'object' && option
1650
-
1651
- if (!data && option == 'destroy') return
1652
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
1653
- if (typeof option == 'string') data[option]()
1654
- })
1655
- }
1656
-
1657
- var old = $.fn.popover
1658
-
1659
- $.fn.popover = Plugin
1660
- $.fn.popover.Constructor = Popover
1661
-
1662
-
1663
- // POPOVER NO CONFLICT
1664
- // ===================
1665
-
1666
- $.fn.popover.noConflict = function () {
1667
- $.fn.popover = old
1668
- return this
1669
- }
1670
-
1671
-}(jQuery);
1672
-
1673
-/* ========================================================================
1674
- * Bootstrap: scrollspy.js v3.2.0
1675
- * http://getbootstrap.com/javascript/#scrollspy
1676
- * ========================================================================
1677
- * Copyright 2011-2014 Twitter, Inc.
1678
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1679
- * ======================================================================== */
1680
-
1681
-
1682
-+function ($) {
1683
- 'use strict';
1684
-
1685
- // SCROLLSPY CLASS DEFINITION
1686
- // ==========================
1687
-
1688
- function ScrollSpy(element, options) {
1689
- var process = $.proxy(this.process, this)
1690
-
1691
- this.$body = $('body')
1692
- this.$scrollElement = $(element).is('body') ? $(window) : $(element)
1693
- this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
1694
- this.selector = (this.options.target || '') + ' .nav li > a'
1695
- this.offsets = []
1696
- this.targets = []
1697
- this.activeTarget = null
1698
- this.scrollHeight = 0
1699
-
1700
- this.$scrollElement.on('scroll.bs.scrollspy', process)
1701
- this.refresh()
1702
- this.process()
1703
- }
1704
-
1705
- ScrollSpy.VERSION = '3.2.0'
1706
-
1707
- ScrollSpy.DEFAULTS = {
1708
- offset: 10
1709
- }
1710
-
1711
- ScrollSpy.prototype.getScrollHeight = function () {
1712
- return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
1713
- }
1714
-
1715
- ScrollSpy.prototype.refresh = function () {
1716
- var offsetMethod = 'offset'
1717
- var offsetBase = 0
1718
-
1719
- if (!$.isWindow(this.$scrollElement[0])) {
1720
- offsetMethod = 'position'
1721
- offsetBase = this.$scrollElement.scrollTop()
1722
- }
1723
-
1724
- this.offsets = []
1725
- this.targets = []
1726
- this.scrollHeight = this.getScrollHeight()
1727
-
1728
- var self = this
1729
-
1730
- this.$body
1731
- .find(this.selector)
1732
- .map(function () {
1733
- var $el = $(this)
1734
- var href = $el.data('target') || $el.attr('href')
1735
- var $href = /^#./.test(href) && $(href)
1736
-
1737
- return ($href
1738
- && $href.length
1739
- && $href.is(':visible')
1740
- && [[$href[offsetMethod]().top + offsetBase, href]]) || null
1741
- })
1742
- .sort(function (a, b) { return a[0] - b[0] })
1743
- .each(function () {
1744
- self.offsets.push(this[0])
1745
- self.targets.push(this[1])
1746
- })
1747
- }
1748
-
1749
- ScrollSpy.prototype.process = function () {
1750
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1751
- var scrollHeight = this.getScrollHeight()
1752
- var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
1753
- var offsets = this.offsets
1754
- var targets = this.targets
1755
- var activeTarget = this.activeTarget
1756
- var i
1757
-
1758
- if (this.scrollHeight != scrollHeight) {
1759
- this.refresh()
1760
- }
1761
-
1762
- if (scrollTop >= maxScroll) {
1763
- return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
1764
- }
1765
-
1766
- if (activeTarget && scrollTop <= offsets[0]) {
1767
- return activeTarget != (i = targets[0]) && this.activate(i)
1768
- }
1769
-
1770
- for (i = offsets.length; i--;) {
1771
- activeTarget != targets[i]
1772
- && scrollTop >= offsets[i]
1773
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1774
- && this.activate(targets[i])
1775
- }
1776
- }
1777
-
1778
- ScrollSpy.prototype.activate = function (target) {
1779
- this.activeTarget = target
1780
-
1781
- $(this.selector)
1782
- .parentsUntil(this.options.target, '.active')
1783
- .removeClass('active')
1784
-
1785
- var selector = this.selector +
1786
- '[data-target="' + target + '"],' +
1787
- this.selector + '[href="' + target + '"]'
1788
-
1789
- var active = $(selector)
1790
- .parents('li')
1791
- .addClass('active')
1792
-
1793
- if (active.parent('.dropdown-menu').length) {
1794
- active = active
1795
- .closest('li.dropdown')
1796
- .addClass('active')
1797
- }
1798
-
1799
- active.trigger('activate.bs.scrollspy')
1800
- }
1801
-
1802
-
1803
- // SCROLLSPY PLUGIN DEFINITION
1804
- // ===========================
1805
-
1806
- function Plugin(option) {
1807
- return this.each(function () {
1808
- var $this = $(this)
1809
- var data = $this.data('bs.scrollspy')
1810
- var options = typeof option == 'object' && option
1811
-
1812
- if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
1813
- if (typeof option == 'string') data[option]()
1814
- })
1815
- }
1816
-
1817
- var old = $.fn.scrollspy
1818
-
1819
- $.fn.scrollspy = Plugin
1820
- $.fn.scrollspy.Constructor = ScrollSpy
1821
-
1822
-
1823
- // SCROLLSPY NO CONFLICT
1824
- // =====================
1825
-
1826
- $.fn.scrollspy.noConflict = function () {
1827
- $.fn.scrollspy = old
1828
- return this
1829
- }
1830
-
1831
-
1832
- // SCROLLSPY DATA-API
1833
- // ==================
1834
-
1835
- $(window).on('load.bs.scrollspy.data-api', function () {
1836
- $('[data-spy="scroll"]').each(function () {
1837
- var $spy = $(this)
1838
- Plugin.call($spy, $spy.data())
1839
- })
1840
- })
1841
-
1842
-}(jQuery);
1843
-
1844
-/* ========================================================================
1845
- * Bootstrap: tab.js v3.2.0
1846
- * http://getbootstrap.com/javascript/#tabs
1847
- * ========================================================================
1848
- * Copyright 2011-2014 Twitter, Inc.
1849
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1850
- * ======================================================================== */
1851
-
1852
-
1853
-+function ($) {
1854
- 'use strict';
1855
-
1856
- // TAB CLASS DEFINITION
1857
- // ====================
1858
-
1859
- var Tab = function (element) {
1860
- this.element = $(element)
1861
- }
1862
-
1863
- Tab.VERSION = '3.2.0'
1864
-
1865
- Tab.prototype.show = function () {
1866
- var $this = this.element
1867
- var $ul = $this.closest('ul:not(.dropdown-menu)')
1868
- var selector = $this.data('target')
1869
-
1870
- if (!selector) {
1871
- selector = $this.attr('href')
1872
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
1873
- }
1874
-
1875
- if ($this.parent('li').hasClass('active')) return
1876
-
1877
- var previous = $ul.find('.active:last a')[0]
1878
- var e = $.Event('show.bs.tab', {
1879
- relatedTarget: previous
1880
- })
1881
-
1882
- $this.trigger(e)
1883
-
1884
- if (e.isDefaultPrevented()) return
1885
-
1886
- var $target = $(selector)
1887
-
1888
- this.activate($this.closest('li'), $ul)
1889
- this.activate($target, $target.parent(), function () {
1890
- $this.trigger({
1891
- type: 'shown.bs.tab',
1892
- relatedTarget: previous
1893
- })
1894
- })
1895
- }
1896
-
1897
- Tab.prototype.activate = function (element, container, callback) {
1898
- var $active = container.find('> .active')
1899
- var transition = callback
1900
- && $.support.transition
1901
- && $active.hasClass('fade')
1902
-
1903
- function next() {
1904
- $active
1905
- .removeClass('active')
1906
- .find('> .dropdown-menu > .active')
1907
- .removeClass('active')
1908
-
1909
- element.addClass('active')
1910
-
1911
- if (transition) {
1912
- element[0].offsetWidth // reflow for transition
1913
- element.addClass('in')
1914
- } else {
1915
- element.removeClass('fade')
1916
- }
1917
-
1918
- if (element.parent('.dropdown-menu')) {
1919
- element.closest('li.dropdown').addClass('active')
1920
- }
1921
-
1922
- callback && callback()
1923
- }
1924
-
1925
- transition ?
1926
- $active
1927
- .one('bsTransitionEnd', next)
1928
- .emulateTransitionEnd(150) :
1929
- next()
1930
-
1931
- $active.removeClass('in')
1932
- }
1933
-
1934
-
1935
- // TAB PLUGIN DEFINITION
1936
- // =====================
1937
-
1938
- function Plugin(option) {
1939
- return this.each(function () {
1940
- var $this = $(this)
1941
- var data = $this.data('bs.tab')
1942
-
1943
- if (!data) $this.data('bs.tab', (data = new Tab(this)))
1944
- if (typeof option == 'string') data[option]()
1945
- })
1946
- }
1947
-
1948
- var old = $.fn.tab
1949
-
1950
- $.fn.tab = Plugin
1951
- $.fn.tab.Constructor = Tab
1952
-
1953
-
1954
- // TAB NO CONFLICT
1955
- // ===============
1956
-
1957
- $.fn.tab.noConflict = function () {
1958
- $.fn.tab = old
1959
- return this
1960
- }
1961
-
1962
-
1963
- // TAB DATA-API
1964
- // ============
1965
-
1966
- $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1967
- e.preventDefault()
1968
- Plugin.call($(this), 'show')
1969
- })
1970
-
1971
-}(jQuery);
1972
-
1973
-/* ========================================================================
1974
- * Bootstrap: affix.js v3.2.0
1975
- * http://getbootstrap.com/javascript/#affix
1976
- * ========================================================================
1977
- * Copyright 2011-2014 Twitter, Inc.
1978
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1979
- * ======================================================================== */
1980
-
1981
-
1982
-+function ($) {
1983
- 'use strict';
1984
-
1985
- // AFFIX CLASS DEFINITION
1986
- // ======================
1987
-
1988
- var Affix = function (element, options) {
1989
- this.options = $.extend({}, Affix.DEFAULTS, options)
1990
-
1991
- this.$target = $(this.options.target)
1992
- .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
1993
- .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
1994
-
1995
- this.$element = $(element)
1996
- this.affixed =
1997
- this.unpin =
1998
- this.pinnedOffset = null
1999
-
2000
- this.checkPosition()
2001
- }
2002
-
2003
- Affix.VERSION = '3.2.0'
2004
-
2005
- Affix.RESET = 'affix affix-top affix-bottom'
2006
-
2007
- Affix.DEFAULTS = {
2008
- offset: 0,
2009
- target: window
2010
- }
2011
-
2012
- Affix.prototype.getPinnedOffset = function () {
2013
- if (this.pinnedOffset) return this.pinnedOffset
2014
- this.$element.removeClass(Affix.RESET).addClass('affix')
2015
- var scrollTop = this.$target.scrollTop()
2016
- var position = this.$element.offset()
2017
- return (this.pinnedOffset = position.top - scrollTop)
2018
- }
2019
-
2020
- Affix.prototype.checkPositionWithEventLoop = function () {
2021
- setTimeout($.proxy(this.checkPosition, this), 1)
2022
- }
2023
-
2024
- Affix.prototype.checkPosition = function () {
2025
- if (!this.$element.is(':visible')) return
2026
-
2027
- var scrollHeight = $(document).height()
2028
- var scrollTop = this.$target.scrollTop()
2029
- var position = this.$element.offset()
2030
- var offset = this.options.offset
2031
- var offsetTop = offset.top
2032
- var offsetBottom = offset.bottom
2033
-
2034
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
2035
- if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
2036
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
2037
-
2038
- var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
2039
- offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
2040
- offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
2041
-
2042
- if (this.affixed === affix) return
2043
- if (this.unpin != null) this.$element.css('top', '')
2044
-
2045
- var affixType = 'affix' + (affix ? '-' + affix : '')
2046
- var e = $.Event(affixType + '.bs.affix')
2047
-
2048
- this.$element.trigger(e)
2049
-
2050
- if (e.isDefaultPrevented()) return
2051
-
2052
- this.affixed = affix
2053
- this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
2054
-
2055
- this.$element
2056
- .removeClass(Affix.RESET)
2057
- .addClass(affixType)
2058
- .trigger($.Event(affixType.replace('affix', 'affixed')))
2059
-
2060
- if (affix == 'bottom') {
2061
- this.$element.offset({
2062
- top: scrollHeight - this.$element.height() - offsetBottom
2063
- })
2064
- }
2065
- }
2066
-
2067
-
2068
- // AFFIX PLUGIN DEFINITION
2069
- // =======================
2070
-
2071
- function Plugin(option) {
2072
- return this.each(function () {
2073
- var $this = $(this)
2074
- var data = $this.data('bs.affix')
2075
- var options = typeof option == 'object' && option
2076
-
2077
- if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
2078
- if (typeof option == 'string') data[option]()
2079
- })
2080
- }
2081
-
2082
- var old = $.fn.affix
2083
-
2084
- $.fn.affix = Plugin
2085
- $.fn.affix.Constructor = Affix
2086
-
2087
-
2088
- // AFFIX NO CONFLICT
2089
- // =================
2090
-
2091
- $.fn.affix.noConflict = function () {
2092
- $.fn.affix = old
2093
- return this
2094
- }
2095
-
2096
-
2097
- // AFFIX DATA-API
2098
- // ==============
2099
-
2100
- $(window).on('load', function () {
2101
- $('[data-spy="affix"]').each(function () {
2102
- var $spy = $(this)
2103
- var data = $spy.data()
2104
-
2105
- data.offset = data.offset || {}
2106
-
2107
- if (data.offsetBottom) data.offset.bottom = data.offsetBottom
2108
- if (data.offsetTop) data.offset.top = data.offsetTop
2109
-
2110
- Plugin.call($spy, data)
2111
- })
2112
- })
2113
-
2114
-}(jQuery);
securis/src/main/webapp/js/vendor/bootstrap.min.js
deleted file mode 100644
....@@ -1,6 +0,0 @@
1
-/*!
2
- * Bootstrap v3.2.0 (http://getbootstrap.com)
3
- * Copyright 2011-2014 Twitter, Inc.
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */
6
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
securis/src/main/webapp/js/vendor/chosen.jquery.js
deleted file mode 100644
....@@ -1,1166 +0,0 @@
1
-// Chosen, a Select Box Enhancer for jQuery and Prototype
2
-// by Patrick Filler for Harvest, http://getharvest.com
3
-//
4
-// Version 1.0.0
5
-// Full source at https://github.com/harvesthq/chosen
6
-// Copyright (c) 2011 Harvest http://getharvest.com
7
-
8
-// MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
9
-// This file is generated by `grunt build`, do not edit it by hand.
10
-(function() {
11
- var $, AbstractChosen, Chosen, SelectParser, _ref,
12
- __hasProp = {}.hasOwnProperty,
13
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
14
-
15
- SelectParser = (function() {
16
- function SelectParser() {
17
- this.options_index = 0;
18
- this.parsed = [];
19
- }
20
-
21
- SelectParser.prototype.add_node = function(child) {
22
- if (child.nodeName.toUpperCase() === "OPTGROUP") {
23
- return this.add_group(child);
24
- } else {
25
- return this.add_option(child);
26
- }
27
- };
28
-
29
- SelectParser.prototype.add_group = function(group) {
30
- var group_position, option, _i, _len, _ref, _results;
31
-
32
- group_position = this.parsed.length;
33
- this.parsed.push({
34
- array_index: group_position,
35
- group: true,
36
- label: this.escapeExpression(group.label),
37
- children: 0,
38
- disabled: group.disabled
39
- });
40
- _ref = group.childNodes;
41
- _results = [];
42
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
43
- option = _ref[_i];
44
- _results.push(this.add_option(option, group_position, group.disabled));
45
- }
46
- return _results;
47
- };
48
-
49
- SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
50
- if (option.nodeName.toUpperCase() === "OPTION") {
51
- if (option.text !== "") {
52
- if (group_position != null) {
53
- this.parsed[group_position].children += 1;
54
- }
55
- this.parsed.push({
56
- array_index: this.parsed.length,
57
- options_index: this.options_index,
58
- value: option.value,
59
- text: option.text,
60
- html: option.innerHTML,
61
- selected: option.selected,
62
- disabled: group_disabled === true ? group_disabled : option.disabled,
63
- group_array_index: group_position,
64
- classes: option.className,
65
- style: option.style.cssText
66
- });
67
- } else {
68
- this.parsed.push({
69
- array_index: this.parsed.length,
70
- options_index: this.options_index,
71
- empty: true
72
- });
73
- }
74
- return this.options_index += 1;
75
- }
76
- };
77
-
78
- SelectParser.prototype.escapeExpression = function(text) {
79
- var map, unsafe_chars;
80
-
81
- if ((text == null) || text === false) {
82
- return "";
83
- }
84
- if (!/[\&\<\>\"\'\`]/.test(text)) {
85
- return text;
86
- }
87
- map = {
88
- "<": "&lt;",
89
- ">": "&gt;",
90
- '"': "&quot;",
91
- "'": "&#x27;",
92
- "`": "&#x60;"
93
- };
94
- unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g;
95
- return text.replace(unsafe_chars, function(chr) {
96
- return map[chr] || "&amp;";
97
- });
98
- };
99
-
100
- return SelectParser;
101
-
102
- })();
103
-
104
- SelectParser.select_to_array = function(select) {
105
- var child, parser, _i, _len, _ref;
106
-
107
- parser = new SelectParser();
108
- _ref = select.childNodes;
109
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
110
- child = _ref[_i];
111
- parser.add_node(child);
112
- }
113
- return parser.parsed;
114
- };
115
-
116
- AbstractChosen = (function() {
117
- function AbstractChosen(form_field, options) {
118
- this.form_field = form_field;
119
- this.options = options != null ? options : {};
120
- if (!AbstractChosen.browser_is_supported()) {
121
- return;
122
- }
123
- this.is_multiple = this.form_field.multiple;
124
- this.set_default_text();
125
- this.set_default_values();
126
- this.setup();
127
- this.set_up_html();
128
- this.register_observers();
129
- }
130
-
131
- AbstractChosen.prototype.set_default_values = function() {
132
- var _this = this;
133
-
134
- this.click_test_action = function(evt) {
135
- return _this.test_active_click(evt);
136
- };
137
- this.activate_action = function(evt) {
138
- return _this.activate_field(evt);
139
- };
140
- this.active_field = false;
141
- this.mouse_on_container = false;
142
- this.results_showing = false;
143
- this.result_highlighted = null;
144
- this.result_single_selected = null;
145
- this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false;
146
- this.disable_search_threshold = this.options.disable_search_threshold || 0;
147
- this.disable_search = this.options.disable_search || false;
148
- this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;
149
- this.group_search = this.options.group_search != null ? this.options.group_search : true;
150
- this.search_contains = this.options.search_contains || false;
151
- this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;
152
- this.max_selected_options = this.options.max_selected_options || Infinity;
153
- this.inherit_select_classes = this.options.inherit_select_classes || false;
154
- this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
155
- return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
156
- };
157
-
158
- AbstractChosen.prototype.set_default_text = function() {
159
- if (this.form_field.getAttribute("data-placeholder")) {
160
- this.default_text = this.form_field.getAttribute("data-placeholder");
161
- } else if (this.is_multiple) {
162
- this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;
163
- } else {
164
- this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
165
- }
166
- return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
167
- };
168
-
169
- AbstractChosen.prototype.mouse_enter = function() {
170
- return this.mouse_on_container = true;
171
- };
172
-
173
- AbstractChosen.prototype.mouse_leave = function() {
174
- return this.mouse_on_container = false;
175
- };
176
-
177
- AbstractChosen.prototype.input_focus = function(evt) {
178
- var _this = this;
179
-
180
- if (this.is_multiple) {
181
- if (!this.active_field) {
182
- return setTimeout((function() {
183
- return _this.container_mousedown();
184
- }), 50);
185
- }
186
- } else {
187
- if (!this.active_field) {
188
- return this.activate_field();
189
- }
190
- }
191
- };
192
-
193
- AbstractChosen.prototype.input_blur = function(evt) {
194
- var _this = this;
195
-
196
- if (!this.mouse_on_container) {
197
- this.active_field = false;
198
- return setTimeout((function() {
199
- return _this.blur_test();
200
- }), 100);
201
- }
202
- };
203
-
204
- AbstractChosen.prototype.results_option_build = function(options) {
205
- var content, data, _i, _len, _ref;
206
-
207
- content = '';
208
- _ref = this.results_data;
209
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
210
- data = _ref[_i];
211
- if (data.group) {
212
- content += this.result_add_group(data);
213
- } else {
214
- content += this.result_add_option(data);
215
- }
216
- if (options != null ? options.first : void 0) {
217
- if (data.selected && this.is_multiple) {
218
- this.choice_build(data);
219
- } else if (data.selected && !this.is_multiple) {
220
- this.single_set_selected_text(data.text);
221
- }
222
- }
223
- }
224
- return content;
225
- };
226
-
227
- AbstractChosen.prototype.result_add_option = function(option) {
228
- var classes, style;
229
-
230
- if (!option.search_match) {
231
- return '';
232
- }
233
- if (!this.include_option_in_results(option)) {
234
- return '';
235
- }
236
- classes = [];
237
- if (!option.disabled && !(option.selected && this.is_multiple)) {
238
- classes.push("active-result");
239
- }
240
- if (option.disabled && !(option.selected && this.is_multiple)) {
241
- classes.push("disabled-result");
242
- }
243
- if (option.selected) {
244
- classes.push("result-selected");
245
- }
246
- if (option.group_array_index != null) {
247
- classes.push("group-option");
248
- }
249
- if (option.classes !== "") {
250
- classes.push(option.classes);
251
- }
252
- style = option.style.cssText !== "" ? " style=\"" + option.style + "\"" : "";
253
- return "<li class=\"" + (classes.join(' ')) + "\"" + style + " data-option-array-index=\"" + option.array_index + "\">" + option.search_text + "</li>";
254
- };
255
-
256
- AbstractChosen.prototype.result_add_group = function(group) {
257
- if (!(group.search_match || group.group_match)) {
258
- return '';
259
- }
260
- if (!(group.active_options > 0)) {
261
- return '';
262
- }
263
- return "<li class=\"group-result\">" + group.search_text + "</li>";
264
- };
265
-
266
- AbstractChosen.prototype.results_update_field = function() {
267
- this.set_default_text();
268
- if (!this.is_multiple) {
269
- this.results_reset_cleanup();
270
- }
271
- this.result_clear_highlight();
272
- this.result_single_selected = null;
273
- this.results_build();
274
- if (this.results_showing) {
275
- return this.winnow_results();
276
- }
277
- };
278
-
279
- AbstractChosen.prototype.results_toggle = function() {
280
- if (this.results_showing) {
281
- return this.results_hide();
282
- } else {
283
- return this.results_show();
284
- }
285
- };
286
-
287
- AbstractChosen.prototype.results_search = function(evt) {
288
- if (this.results_showing) {
289
- return this.winnow_results();
290
- } else {
291
- return this.results_show();
292
- }
293
- };
294
-
295
- AbstractChosen.prototype.winnow_results = function() {
296
- var escapedSearchText, option, regex, regexAnchor, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;
297
-
298
- this.no_results_clear();
299
- results = 0;
300
- searchText = this.get_search_text();
301
- escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
302
- regexAnchor = this.search_contains ? "" : "^";
303
- regex = new RegExp(regexAnchor + escapedSearchText, 'i');
304
- zregex = new RegExp(escapedSearchText, 'i');
305
- _ref = this.results_data;
306
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
307
- option = _ref[_i];
308
- option.search_match = false;
309
- results_group = null;
310
- if (this.include_option_in_results(option)) {
311
- if (option.group) {
312
- option.group_match = false;
313
- option.active_options = 0;
314
- }
315
- if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
316
- results_group = this.results_data[option.group_array_index];
317
- if (results_group.active_options === 0 && results_group.search_match) {
318
- results += 1;
319
- }
320
- results_group.active_options += 1;
321
- }
322
- if (!(option.group && !this.group_search)) {
323
- option.search_text = option.group ? option.label : option.html;
324
- option.search_match = this.search_string_match(option.search_text, regex);
325
- if (option.search_match && !option.group) {
326
- results += 1;
327
- }
328
- if (option.search_match) {
329
- if (searchText.length) {
330
- startpos = option.search_text.search(zregex);
331
- text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);
332
- option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
333
- }
334
- if (results_group != null) {
335
- results_group.group_match = true;
336
- }
337
- } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
338
- option.search_match = true;
339
- }
340
- }
341
- }
342
- }
343
- this.result_clear_highlight();
344
- if (results < 1 && searchText.length) {
345
- this.update_results_content("");
346
- return this.no_results(searchText);
347
- } else {
348
- this.update_results_content(this.results_option_build());
349
- return this.winnow_results_set_highlight();
350
- }
351
- };
352
-
353
- AbstractChosen.prototype.search_string_match = function(search_string, regex) {
354
- var part, parts, _i, _len;
355
-
356
- if (regex.test(search_string)) {
357
- return true;
358
- } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) {
359
- parts = search_string.replace(/\[|\]/g, "").split(" ");
360
- if (parts.length) {
361
- for (_i = 0, _len = parts.length; _i < _len; _i++) {
362
- part = parts[_i];
363
- if (regex.test(part)) {
364
- return true;
365
- }
366
- }
367
- }
368
- }
369
- };
370
-
371
- AbstractChosen.prototype.choices_count = function() {
372
- var option, _i, _len, _ref;
373
-
374
- if (this.selected_option_count != null) {
375
- return this.selected_option_count;
376
- }
377
- this.selected_option_count = 0;
378
- _ref = this.form_field.options;
379
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
380
- option = _ref[_i];
381
- if (option.selected) {
382
- this.selected_option_count += 1;
383
- }
384
- }
385
- return this.selected_option_count;
386
- };
387
-
388
- AbstractChosen.prototype.choices_click = function(evt) {
389
- evt.preventDefault();
390
- if (!(this.results_showing || this.is_disabled)) {
391
- return this.results_show();
392
- }
393
- };
394
-
395
- AbstractChosen.prototype.keyup_checker = function(evt) {
396
- var stroke, _ref;
397
-
398
- stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
399
- this.search_field_scale();
400
- switch (stroke) {
401
- case 8:
402
- if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
403
- return this.keydown_backstroke();
404
- } else if (!this.pending_backstroke) {
405
- this.result_clear_highlight();
406
- return this.results_search();
407
- }
408
- break;
409
- case 13:
410
- evt.preventDefault();
411
- if (this.results_showing) {
412
- return this.result_select(evt);
413
- }
414
- break;
415
- case 27:
416
- if (this.results_showing) {
417
- this.results_hide();
418
- }
419
- return true;
420
- case 9:
421
- case 38:
422
- case 40:
423
- case 16:
424
- case 91:
425
- case 17:
426
- break;
427
- default:
428
- return this.results_search();
429
- }
430
- };
431
-
432
- AbstractChosen.prototype.container_width = function() {
433
- if (this.options.width != null) {
434
- return this.options.width;
435
- } else {
436
- return "" + this.form_field.offsetWidth + "px";
437
- }
438
- };
439
-
440
- AbstractChosen.prototype.include_option_in_results = function(option) {
441
- if (this.is_multiple && (!this.display_selected_options && option.selected)) {
442
- return false;
443
- }
444
- if (!this.display_disabled_options && option.disabled) {
445
- return false;
446
- }
447
- if (option.empty) {
448
- return false;
449
- }
450
- return true;
451
- };
452
-
453
- AbstractChosen.browser_is_supported = function() {
454
- if (window.navigator.appName === "Microsoft Internet Explorer") {
455
- return document.documentMode >= 8;
456
- }
457
- if (/iP(od|hone)/i.test(window.navigator.userAgent)) {
458
- return false;
459
- }
460
- if (/Android/i.test(window.navigator.userAgent)) {
461
- if (/Mobile/i.test(window.navigator.userAgent)) {
462
- return false;
463
- }
464
- }
465
- return true;
466
- };
467
-
468
- AbstractChosen.default_multiple_text = "Select Some Options";
469
-
470
- AbstractChosen.default_single_text = "Select an Option";
471
-
472
- AbstractChosen.default_no_result_text = "No results match";
473
-
474
- return AbstractChosen;
475
-
476
- })();
477
-
478
- $ = jQuery;
479
-
480
- $.fn.extend({
481
- chosen: function(options) {
482
- if (!AbstractChosen.browser_is_supported()) {
483
- return this;
484
- }
485
- return this.each(function(input_field) {
486
- var $this, chosen;
487
-
488
- $this = $(this);
489
- chosen = $this.data('chosen');
490
- if (options === 'destroy' && chosen) {
491
- chosen.destroy();
492
- } else if (!chosen) {
493
- $this.data('chosen', new Chosen(this, options));
494
- }
495
- });
496
- }
497
- });
498
-
499
- Chosen = (function(_super) {
500
- __extends(Chosen, _super);
501
-
502
- function Chosen() {
503
- _ref = Chosen.__super__.constructor.apply(this, arguments);
504
- return _ref;
505
- }
506
-
507
- Chosen.prototype.setup = function() {
508
- this.form_field_jq = $(this.form_field);
509
- this.current_selectedIndex = this.form_field.selectedIndex;
510
- return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl");
511
- };
512
-
513
- Chosen.prototype.set_up_html = function() {
514
- var container_classes, container_props;
515
-
516
- container_classes = ["chosen-container"];
517
- container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
518
- if (this.inherit_select_classes && this.form_field.className) {
519
- container_classes.push(this.form_field.className);
520
- }
521
- if (this.is_rtl) {
522
- container_classes.push("chosen-rtl");
523
- }
524
- container_props = {
525
- 'class': container_classes.join(' '),
526
- 'style': "width: " + (this.container_width()) + ";",
527
- 'title': this.form_field.title
528
- };
529
- if (this.form_field.id.length) {
530
- container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
531
- }
532
- this.container = $("<div />", container_props);
533
- if (this.is_multiple) {
534
- this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>');
535
- } else {
536
- this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
537
- }
538
- this.form_field_jq.hide().after(this.container);
539
- this.dropdown = this.container.find('div.chosen-drop').first();
540
- this.search_field = this.container.find('input').first();
541
- this.search_results = this.container.find('ul.chosen-results').first();
542
- this.search_field_scale();
543
- this.search_no_results = this.container.find('li.no-results').first();
544
- if (this.is_multiple) {
545
- this.search_choices = this.container.find('ul.chosen-choices').first();
546
- this.search_container = this.container.find('li.search-field').first();
547
- } else {
548
- this.search_container = this.container.find('div.chosen-search').first();
549
- this.selected_item = this.container.find('.chosen-single').first();
550
- }
551
- this.results_build();
552
- this.set_tab_index();
553
- this.set_label_behavior();
554
- return this.form_field_jq.trigger("chosen:ready", {
555
- chosen: this
556
- });
557
- };
558
-
559
- Chosen.prototype.register_observers = function() {
560
- var _this = this;
561
-
562
- this.container.bind('mousedown.chosen', function(evt) {
563
- _this.container_mousedown(evt);
564
- });
565
- this.container.bind('mouseup.chosen', function(evt) {
566
- _this.container_mouseup(evt);
567
- });
568
- this.container.bind('mouseenter.chosen', function(evt) {
569
- _this.mouse_enter(evt);
570
- });
571
- this.container.bind('mouseleave.chosen', function(evt) {
572
- _this.mouse_leave(evt);
573
- });
574
- this.search_results.bind('mouseup.chosen', function(evt) {
575
- _this.search_results_mouseup(evt);
576
- });
577
- this.search_results.bind('mouseover.chosen', function(evt) {
578
- _this.search_results_mouseover(evt);
579
- });
580
- this.search_results.bind('mouseout.chosen', function(evt) {
581
- _this.search_results_mouseout(evt);
582
- });
583
- this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {
584
- _this.search_results_mousewheel(evt);
585
- });
586
- this.form_field_jq.bind("chosen:updated.chosen", function(evt) {
587
- _this.results_update_field(evt);
588
- });
589
- this.form_field_jq.bind("chosen:activate.chosen", function(evt) {
590
- _this.activate_field(evt);
591
- });
592
- this.form_field_jq.bind("chosen:open.chosen", function(evt) {
593
- _this.container_mousedown(evt);
594
- });
595
- this.search_field.bind('blur.chosen', function(evt) {
596
- _this.input_blur(evt);
597
- });
598
- this.search_field.bind('keyup.chosen', function(evt) {
599
- _this.keyup_checker(evt);
600
- });
601
- this.search_field.bind('keydown.chosen', function(evt) {
602
- _this.keydown_checker(evt);
603
- });
604
- this.search_field.bind('focus.chosen', function(evt) {
605
- _this.input_focus(evt);
606
- });
607
- if (this.is_multiple) {
608
- return this.search_choices.bind('click.chosen', function(evt) {
609
- _this.choices_click(evt);
610
- });
611
- } else {
612
- return this.container.bind('click.chosen', function(evt) {
613
- evt.preventDefault();
614
- });
615
- }
616
- };
617
-
618
- Chosen.prototype.destroy = function() {
619
- $(document).unbind("click.chosen", this.click_test_action);
620
- if (this.search_field[0].tabIndex) {
621
- this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
622
- }
623
- this.container.remove();
624
- this.form_field_jq.removeData('chosen');
625
- return this.form_field_jq.show();
626
- };
627
-
628
- Chosen.prototype.search_field_disabled = function() {
629
- this.is_disabled = this.form_field_jq[0].disabled;
630
- if (this.is_disabled) {
631
- this.container.addClass('chosen-disabled');
632
- this.search_field[0].disabled = true;
633
- if (!this.is_multiple) {
634
- this.selected_item.unbind("focus.chosen", this.activate_action);
635
- }
636
- return this.close_field();
637
- } else {
638
- this.container.removeClass('chosen-disabled');
639
- this.search_field[0].disabled = false;
640
- if (!this.is_multiple) {
641
- return this.selected_item.bind("focus.chosen", this.activate_action);
642
- }
643
- }
644
- };
645
-
646
- Chosen.prototype.container_mousedown = function(evt) {
647
- if (!this.is_disabled) {
648
- if (evt && evt.type === "mousedown" && !this.results_showing) {
649
- evt.preventDefault();
650
- }
651
- if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
652
- if (!this.active_field) {
653
- if (this.is_multiple) {
654
- this.search_field.val("");
655
- }
656
- $(document).bind('click.chosen', this.click_test_action);
657
- this.results_show();
658
- } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
659
- evt.preventDefault();
660
- this.results_toggle();
661
- }
662
- return this.activate_field();
663
- }
664
- }
665
- };
666
-
667
- Chosen.prototype.container_mouseup = function(evt) {
668
- if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
669
- return this.results_reset(evt);
670
- }
671
- };
672
-
673
- Chosen.prototype.search_results_mousewheel = function(evt) {
674
- var delta, _ref1, _ref2;
675
-
676
- delta = -((_ref1 = evt.originalEvent) != null ? _ref1.wheelDelta : void 0) || ((_ref2 = evt.originialEvent) != null ? _ref2.detail : void 0);
677
- if (delta != null) {
678
- evt.preventDefault();
679
- if (evt.type === 'DOMMouseScroll') {
680
- delta = delta * 40;
681
- }
682
- return this.search_results.scrollTop(delta + this.search_results.scrollTop());
683
- }
684
- };
685
-
686
- Chosen.prototype.blur_test = function(evt) {
687
- if (!this.active_field && this.container.hasClass("chosen-container-active")) {
688
- return this.close_field();
689
- }
690
- };
691
-
692
- Chosen.prototype.close_field = function() {
693
- $(document).unbind("click.chosen", this.click_test_action);
694
- this.active_field = false;
695
- this.results_hide();
696
- this.container.removeClass("chosen-container-active");
697
- this.clear_backstroke();
698
- this.show_search_field_default();
699
- return this.search_field_scale();
700
- };
701
-
702
- Chosen.prototype.activate_field = function() {
703
- this.container.addClass("chosen-container-active");
704
- this.active_field = true;
705
- this.search_field.val(this.search_field.val());
706
- return this.search_field.focus();
707
- };
708
-
709
- Chosen.prototype.test_active_click = function(evt) {
710
- if (this.container.is($(evt.target).closest('.chosen-container'))) {
711
- return this.active_field = true;
712
- } else {
713
- return this.close_field();
714
- }
715
- };
716
-
717
- Chosen.prototype.results_build = function() {
718
- this.parsing = true;
719
- this.selected_option_count = null;
720
- this.results_data = SelectParser.select_to_array(this.form_field);
721
- if (this.is_multiple) {
722
- this.search_choices.find("li.search-choice").remove();
723
- } else if (!this.is_multiple) {
724
- this.single_set_selected_text();
725
- if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
726
- this.search_field[0].readOnly = true;
727
- this.container.addClass("chosen-container-single-nosearch");
728
- } else {
729
- this.search_field[0].readOnly = false;
730
- this.container.removeClass("chosen-container-single-nosearch");
731
- }
732
- }
733
- this.update_results_content(this.results_option_build({
734
- first: true
735
- }));
736
- this.search_field_disabled();
737
- this.show_search_field_default();
738
- this.search_field_scale();
739
- return this.parsing = false;
740
- };
741
-
742
- Chosen.prototype.result_do_highlight = function(el) {
743
- var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
744
-
745
- if (el.length) {
746
- this.result_clear_highlight();
747
- this.result_highlight = el;
748
- this.result_highlight.addClass("highlighted");
749
- maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
750
- visible_top = this.search_results.scrollTop();
751
- visible_bottom = maxHeight + visible_top;
752
- high_top = this.result_highlight.position().top + this.search_results.scrollTop();
753
- high_bottom = high_top + this.result_highlight.outerHeight();
754
- if (high_bottom >= visible_bottom) {
755
- return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
756
- } else if (high_top < visible_top) {
757
- return this.search_results.scrollTop(high_top);
758
- }
759
- }
760
- };
761
-
762
- Chosen.prototype.result_clear_highlight = function() {
763
- if (this.result_highlight) {
764
- this.result_highlight.removeClass("highlighted");
765
- }
766
- return this.result_highlight = null;
767
- };
768
-
769
- Chosen.prototype.results_show = function() {
770
- if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
771
- this.form_field_jq.trigger("chosen:maxselected", {
772
- chosen: this
773
- });
774
- return false;
775
- }
776
- this.container.addClass("chosen-with-drop");
777
- this.form_field_jq.trigger("chosen:showing_dropdown", {
778
- chosen: this
779
- });
780
- this.results_showing = true;
781
- this.search_field.focus();
782
- this.search_field.val(this.search_field.val());
783
- return this.winnow_results();
784
- };
785
-
786
- Chosen.prototype.update_results_content = function(content) {
787
- return this.search_results.html(content);
788
- };
789
-
790
- Chosen.prototype.results_hide = function() {
791
- if (this.results_showing) {
792
- this.result_clear_highlight();
793
- this.container.removeClass("chosen-with-drop");
794
- this.form_field_jq.trigger("chosen:hiding_dropdown", {
795
- chosen: this
796
- });
797
- }
798
- return this.results_showing = false;
799
- };
800
-
801
- Chosen.prototype.set_tab_index = function(el) {
802
- var ti;
803
-
804
- if (this.form_field.tabIndex) {
805
- ti = this.form_field.tabIndex;
806
- this.form_field.tabIndex = -1;
807
- return this.search_field[0].tabIndex = ti;
808
- }
809
- };
810
-
811
- Chosen.prototype.set_label_behavior = function() {
812
- var _this = this;
813
-
814
- this.form_field_label = this.form_field_jq.parents("label");
815
- if (!this.form_field_label.length && this.form_field.id.length) {
816
- this.form_field_label = $("label[for='" + this.form_field.id + "']");
817
- }
818
- if (this.form_field_label.length > 0) {
819
- return this.form_field_label.bind('click.chosen', function(evt) {
820
- if (_this.is_multiple) {
821
- return _this.container_mousedown(evt);
822
- } else {
823
- return _this.activate_field();
824
- }
825
- });
826
- }
827
- };
828
-
829
- Chosen.prototype.show_search_field_default = function() {
830
- if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
831
- this.search_field.val(this.default_text);
832
- return this.search_field.addClass("default");
833
- } else {
834
- this.search_field.val("");
835
- return this.search_field.removeClass("default");
836
- }
837
- };
838
-
839
- Chosen.prototype.search_results_mouseup = function(evt) {
840
- var target;
841
-
842
- target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
843
- if (target.length) {
844
- this.result_highlight = target;
845
- this.result_select(evt);
846
- return this.search_field.focus();
847
- }
848
- };
849
-
850
- Chosen.prototype.search_results_mouseover = function(evt) {
851
- var target;
852
-
853
- target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
854
- if (target) {
855
- return this.result_do_highlight(target);
856
- }
857
- };
858
-
859
- Chosen.prototype.search_results_mouseout = function(evt) {
860
- if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
861
- return this.result_clear_highlight();
862
- }
863
- };
864
-
865
- Chosen.prototype.choice_build = function(item) {
866
- var choice, close_link,
867
- _this = this;
868
-
869
- choice = $('<li />', {
870
- "class": "search-choice"
871
- }).html("<span>" + item.html + "</span>");
872
- if (item.disabled) {
873
- choice.addClass('search-choice-disabled');
874
- } else {
875
- close_link = $('<a />', {
876
- "class": 'search-choice-close',
877
- 'data-option-array-index': item.array_index
878
- });
879
- close_link.bind('click.chosen', function(evt) {
880
- return _this.choice_destroy_link_click(evt);
881
- });
882
- choice.append(close_link);
883
- }
884
- return this.search_container.before(choice);
885
- };
886
-
887
- Chosen.prototype.choice_destroy_link_click = function(evt) {
888
- evt.preventDefault();
889
- evt.stopPropagation();
890
- if (!this.is_disabled) {
891
- return this.choice_destroy($(evt.target));
892
- }
893
- };
894
-
895
- Chosen.prototype.choice_destroy = function(link) {
896
- if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
897
- this.show_search_field_default();
898
- if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {
899
- this.results_hide();
900
- }
901
- link.parents('li').first().remove();
902
- return this.search_field_scale();
903
- }
904
- };
905
-
906
- Chosen.prototype.results_reset = function() {
907
- this.form_field.options[0].selected = true;
908
- this.selected_option_count = null;
909
- this.single_set_selected_text();
910
- this.show_search_field_default();
911
- this.results_reset_cleanup();
912
- this.form_field_jq.trigger("change");
913
- if (this.active_field) {
914
- return this.results_hide();
915
- }
916
- };
917
-
918
- Chosen.prototype.results_reset_cleanup = function() {
919
- this.current_selectedIndex = this.form_field.selectedIndex;
920
- return this.selected_item.find("abbr").remove();
921
- };
922
-
923
- Chosen.prototype.result_select = function(evt) {
924
- var high, item, selected_index;
925
-
926
- if (this.result_highlight) {
927
- high = this.result_highlight;
928
- this.result_clear_highlight();
929
- if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
930
- this.form_field_jq.trigger("chosen:maxselected", {
931
- chosen: this
932
- });
933
- return false;
934
- }
935
- if (this.is_multiple) {
936
- high.removeClass("active-result");
937
- } else {
938
- if (this.result_single_selected) {
939
- this.result_single_selected.removeClass("result-selected");
940
- selected_index = this.result_single_selected[0].getAttribute('data-option-array-index');
941
- this.results_data[selected_index].selected = false;
942
- }
943
- this.result_single_selected = high;
944
- }
945
- high.addClass("result-selected");
946
- item = this.results_data[high[0].getAttribute("data-option-array-index")];
947
- item.selected = true;
948
- this.form_field.options[item.options_index].selected = true;
949
- this.selected_option_count = null;
950
- if (this.is_multiple) {
951
- this.choice_build(item);
952
- } else {
953
- this.single_set_selected_text(item.text);
954
- }
955
- if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {
956
- this.results_hide();
957
- }
958
- this.search_field.val("");
959
- if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
960
- this.form_field_jq.trigger("change", {
961
- 'selected': this.form_field.options[item.options_index].value
962
- });
963
- }
964
- this.current_selectedIndex = this.form_field.selectedIndex;
965
- return this.search_field_scale();
966
- }
967
- };
968
-
969
- Chosen.prototype.single_set_selected_text = function(text) {
970
- if (text == null) {
971
- text = this.default_text;
972
- }
973
- if (text === this.default_text) {
974
- this.selected_item.addClass("chosen-default");
975
- } else {
976
- this.single_deselect_control_build();
977
- this.selected_item.removeClass("chosen-default");
978
- }
979
- return this.selected_item.find("span").text(text);
980
- };
981
-
982
- Chosen.prototype.result_deselect = function(pos) {
983
- var result_data;
984
-
985
- result_data = this.results_data[pos];
986
- if (!this.form_field.options[result_data.options_index].disabled) {
987
- result_data.selected = false;
988
- this.form_field.options[result_data.options_index].selected = false;
989
- this.selected_option_count = null;
990
- this.result_clear_highlight();
991
- if (this.results_showing) {
992
- this.winnow_results();
993
- }
994
- this.form_field_jq.trigger("change", {
995
- deselected: this.form_field.options[result_data.options_index].value
996
- });
997
- this.search_field_scale();
998
- return true;
999
- } else {
1000
- return false;
1001
- }
1002
- };
1003
-
1004
- Chosen.prototype.single_deselect_control_build = function() {
1005
- if (!this.allow_single_deselect) {
1006
- return;
1007
- }
1008
- if (!this.selected_item.find("abbr").length) {
1009
- this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
1010
- }
1011
- return this.selected_item.addClass("chosen-single-with-deselect");
1012
- };
1013
-
1014
- Chosen.prototype.get_search_text = function() {
1015
- if (this.search_field.val() === this.default_text) {
1016
- return "";
1017
- } else {
1018
- return $('<div/>').text($.trim(this.search_field.val())).html();
1019
- }
1020
- };
1021
-
1022
- Chosen.prototype.winnow_results_set_highlight = function() {
1023
- var do_high, selected_results;
1024
-
1025
- selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
1026
- do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
1027
- if (do_high != null) {
1028
- return this.result_do_highlight(do_high);
1029
- }
1030
- };
1031
-
1032
- Chosen.prototype.no_results = function(terms) {
1033
- var no_results_html;
1034
-
1035
- no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
1036
- no_results_html.find("span").first().html(terms);
1037
- return this.search_results.append(no_results_html);
1038
- };
1039
-
1040
- Chosen.prototype.no_results_clear = function() {
1041
- return this.search_results.find(".no-results").remove();
1042
- };
1043
-
1044
- Chosen.prototype.keydown_arrow = function() {
1045
- var next_sib;
1046
-
1047
- if (this.results_showing && this.result_highlight) {
1048
- next_sib = this.result_highlight.nextAll("li.active-result").first();
1049
- if (next_sib) {
1050
- return this.result_do_highlight(next_sib);
1051
- }
1052
- } else {
1053
- return this.results_show();
1054
- }
1055
- };
1056
-
1057
- Chosen.prototype.keyup_arrow = function() {
1058
- var prev_sibs;
1059
-
1060
- if (!this.results_showing && !this.is_multiple) {
1061
- return this.results_show();
1062
- } else if (this.result_highlight) {
1063
- prev_sibs = this.result_highlight.prevAll("li.active-result");
1064
- if (prev_sibs.length) {
1065
- return this.result_do_highlight(prev_sibs.first());
1066
- } else {
1067
- if (this.choices_count() > 0) {
1068
- this.results_hide();
1069
- }
1070
- return this.result_clear_highlight();
1071
- }
1072
- }
1073
- };
1074
-
1075
- Chosen.prototype.keydown_backstroke = function() {
1076
- var next_available_destroy;
1077
-
1078
- if (this.pending_backstroke) {
1079
- this.choice_destroy(this.pending_backstroke.find("a").first());
1080
- return this.clear_backstroke();
1081
- } else {
1082
- next_available_destroy = this.search_container.siblings("li.search-choice").last();
1083
- if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
1084
- this.pending_backstroke = next_available_destroy;
1085
- if (this.single_backstroke_delete) {
1086
- return this.keydown_backstroke();
1087
- } else {
1088
- return this.pending_backstroke.addClass("search-choice-focus");
1089
- }
1090
- }
1091
- }
1092
- };
1093
-
1094
- Chosen.prototype.clear_backstroke = function() {
1095
- if (this.pending_backstroke) {
1096
- this.pending_backstroke.removeClass("search-choice-focus");
1097
- }
1098
- return this.pending_backstroke = null;
1099
- };
1100
-
1101
- Chosen.prototype.keydown_checker = function(evt) {
1102
- var stroke, _ref1;
1103
-
1104
- stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;
1105
- this.search_field_scale();
1106
- if (stroke !== 8 && this.pending_backstroke) {
1107
- this.clear_backstroke();
1108
- }
1109
- switch (stroke) {
1110
- case 8:
1111
- this.backstroke_length = this.search_field.val().length;
1112
- break;
1113
- case 9:
1114
- if (this.results_showing && !this.is_multiple) {
1115
- this.result_select(evt);
1116
- }
1117
- this.mouse_on_container = false;
1118
- break;
1119
- case 13:
1120
- evt.preventDefault();
1121
- break;
1122
- case 38:
1123
- evt.preventDefault();
1124
- this.keyup_arrow();
1125
- break;
1126
- case 40:
1127
- evt.preventDefault();
1128
- this.keydown_arrow();
1129
- break;
1130
- }
1131
- };
1132
-
1133
- Chosen.prototype.search_field_scale = function() {
1134
- var div, f_width, h, style, style_block, styles, w, _i, _len;
1135
-
1136
- if (this.is_multiple) {
1137
- h = 0;
1138
- w = 0;
1139
- style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
1140
- styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
1141
- for (_i = 0, _len = styles.length; _i < _len; _i++) {
1142
- style = styles[_i];
1143
- style_block += style + ":" + this.search_field.css(style) + ";";
1144
- }
1145
- div = $('<div />', {
1146
- 'style': style_block
1147
- });
1148
- div.text(this.search_field.val());
1149
- $('body').append(div);
1150
- w = div.width() + 25;
1151
- div.remove();
1152
- f_width = this.container.outerWidth();
1153
- if (w > f_width - 10) {
1154
- w = f_width - 10;
1155
- }
1156
- return this.search_field.css({
1157
- 'width': w + 'px'
1158
- });
1159
- }
1160
- };
1161
-
1162
- return Chosen;
1163
-
1164
- })(AbstractChosen);
1165
-
1166
-}).call(this);
securis/src/main/webapp/js/vendor/jquery.min.js
deleted file mode 100644
....@@ -1,4 +0,0 @@
1
-/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
2
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
3
-}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
4
-},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
securis/src/main/webapp/js/vendor/jquery.min.map
deleted file mode 100644
....@@ -1 +0,0 @@
1
-{"version":3,"file":"jquery-1.11.0.min.js","sources":["jquery-1.11.0.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","deletedIds","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","trim","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","args","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","src","copyIsArray","copy","name","options","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","parseFloat","isEmptyObject","key","nodeType","e","ownLast","globalEval","data","execScript","camelCase","string","nodeName","toLowerCase","value","isArraylike","text","makeArray","arr","results","Object","inArray","max","second","grep","invert","callbackInverse","matches","callbackExpect","arg","guid","proxy","tmp","now","Date","split","Sizzle","Expr","getText","isXML","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","strundefined","MAX_NEGATIVE","pop","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","childNodes","els","seed","match","m","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","parentNode","id","getElementsByTagName","getElementsByClassName","qsa","test","tokenize","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","select","keys","cache","cacheLength","shift","markFunction","assert","div","createElement","removeChild","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","doc","parent","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","innerHTML","firstChild","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","group","contexts","token","div1","defaultValue","unique","isXMLDoc","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","is","rootjQuery","charAt","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","until","sibling","n","r","targets","closest","l","pos","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","contentWindow","reverse","rnotwhite","optionsCache","createOptions","object","flag","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","list","stack","once","fire","stopOnFalse","disable","remove","lock","locked","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","body","setTimeout","trigger","off","detach","removeEventListener","completed","detachEvent","event","readyState","frameElement","doScroll","doScrollCheck","inlineBlockNeedsLayout","container","style","cssText","zoom","offsetWidth","deleteExpando","acceptData","noData","rbrace","rmultiDash","dataAttr","parseJSON","isEmptyDataObject","internalData","pvt","thisCache","internalKey","isNode","toJSON","internalRemoveData","cleanData","applet ","embed ","object ","hasData","removeData","_data","_removeData","queue","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","cssExpand","isHidden","el","css","access","chainable","emptyGet","raw","bulk","rcheckableType","fragment","createDocumentFragment","leadingWhitespace","tbody","htmlSerialize","html5Clone","cloneNode","outerHTML","appendChecked","noCloneChecked","checkClone","noCloneEvent","click","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","types","events","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","prop","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","props","srcElement","metaKey","original","which","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","getPreventDefault","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","orig","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","one","origFn","triggerHandler","createSafeFragment","nodeNames","safeFrag","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","option","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","getAll","found","fixDefaultChecked","defaultChecked","manipulationTarget","content","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","oldData","curData","fixCloneNodeIssues","defaultSelected","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","buildFragment","scripts","selection","wrap","safe","nodes","createTextNode","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","set","iNoClone","_evalUrl","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","actualDisplay","display","getDefaultComputedStyle","defaultDisplay","write","close","shrinkWrapBlocksVal","divReset","opacity","cssFloat","backgroundClip","clearCloneStyle","shrinkWrapBlocks","containerStyles","width","rmargin","rnumnonpx","getStyles","curCSS","rposition","getComputedStyle","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","addGetHookIf","conditionFn","hookFn","condition","reliableHiddenOffsetsVal","boxSizingVal","boxSizingReliableVal","pixelPositionVal","reliableMarginRightVal","reliableHiddenOffsets","tds","isSupported","offsetHeight","boxSizing","computeStyleTests","boxSizingReliable","pixelPosition","reliableMarginRight","marginDiv","marginRight","swap","ralpha","ropacity","rdisplayswap","rnumsplit","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","vendorPropName","capName","origName","showHide","show","hidden","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","cssHooks","cssNumber","columnCount","fillOpacity","lineHeight","order","orphans","widows","zIndex","cssProps","float","$1","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","unit","propHooks","run","percent","eased","duration","step","tween","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","defaultPrefilter","tweeners","*","createTween","scale","maxIterations","createFxNow","genFx","includeWidth","height","animation","collection","opts","oldfire","dDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","Animation","properties","stopped","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","for","class","notxml","tabindex","parseInt","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","ActiveXObject","async","loadXML","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","status","abort","statusText","finalText","success","method","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","createStandardXHR","createActiveXHR","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","XMLHttpRequest","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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"}
securis/src/main/webapp/js/vendor/modernizr-2.6.2.min.js
deleted file mode 100644
....@@ -1,4 +0,0 @@
1
-/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
2
- * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
3
- */
4
-;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
securis/src/main/webapp/js/vendor/store.js
deleted file mode 100644
....@@ -1,165 +0,0 @@
1
-;(function(win){
2
- var store = {},
3
- doc = win.document,
4
- localStorageName = 'localStorage',
5
- scriptTag = 'script',
6
- storage
7
-
8
- store.disabled = false
9
- store.set = function(key, value) {}
10
- store.get = function(key) {}
11
- store.remove = function(key) {}
12
- store.clear = function() {}
13
- store.transact = function(key, defaultVal, transactionFn) {
14
- var val = store.get(key)
15
- if (transactionFn == null) {
16
- transactionFn = defaultVal
17
- defaultVal = null
18
- }
19
- if (typeof val == 'undefined') { val = defaultVal || {} }
20
- transactionFn(val)
21
- store.set(key, val)
22
- }
23
- store.getAll = function() {}
24
- store.forEach = function() {}
25
-
26
- store.serialize = function(value) {
27
- return JSON.stringify(value)
28
- }
29
- store.deserialize = function(value) {
30
- if (typeof value != 'string') { return undefined }
31
- try { return JSON.parse(value) }
32
- catch(e) { return value || undefined }
33
- }
34
-
35
- // Functions to encapsulate questionable FireFox 3.6.13 behavior
36
- // when about.config::dom.storage.enabled === false
37
- // See https://github.com/marcuswestin/store.js/issues#issue/13
38
- function isLocalStorageNameSupported() {
39
- try { return (localStorageName in win && win[localStorageName]) }
40
- catch(err) { return false }
41
- }
42
-
43
- if (isLocalStorageNameSupported()) {
44
- storage = win[localStorageName]
45
- store.set = function(key, val) {
46
- if (val === undefined) { return store.remove(key) }
47
- storage.setItem(key, store.serialize(val))
48
- return val
49
- }
50
- store.get = function(key) { return store.deserialize(storage.getItem(key)) }
51
- store.remove = function(key) { storage.removeItem(key) }
52
- store.clear = function() { storage.clear() }
53
- store.getAll = function() {
54
- var ret = {}
55
- store.forEach(function(key, val) {
56
- ret[key] = val
57
- })
58
- return ret
59
- }
60
- store.forEach = function(callback) {
61
- for (var i=0; i<storage.length; i++) {
62
- var key = storage.key(i)
63
- callback(key, store.get(key))
64
- }
65
- }
66
- } else if (doc.documentElement.addBehavior) {
67
- var storageOwner,
68
- storageContainer
69
- // Since #userData storage applies only to specific paths, we need to
70
- // somehow link our data to a specific path. We choose /favicon.ico
71
- // as a pretty safe option, since all browsers already make a request to
72
- // this URL anyway and being a 404 will not hurt us here. We wrap an
73
- // iframe pointing to the favicon in an ActiveXObject(htmlfile) object
74
- // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
75
- // since the iframe access rules appear to allow direct access and
76
- // manipulation of the document element, even for a 404 page. This
77
- // document can be used instead of the current document (which would
78
- // have been limited to the current path) to perform #userData storage.
79
- try {
80
- storageContainer = new ActiveXObject('htmlfile')
81
- storageContainer.open()
82
- storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>')
83
- storageContainer.close()
84
- storageOwner = storageContainer.w.frames[0].document
85
- storage = storageOwner.createElement('div')
86
- } catch(e) {
87
- // somehow ActiveXObject instantiation failed (perhaps some special
88
- // security settings or otherwse), fall back to per-path storage
89
- storage = doc.createElement('div')
90
- storageOwner = doc.body
91
- }
92
- function withIEStorage(storeFunction) {
93
- return function() {
94
- var args = Array.prototype.slice.call(arguments, 0)
95
- args.unshift(storage)
96
- // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
97
- // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
98
- storageOwner.appendChild(storage)
99
- storage.addBehavior('#default#userData')
100
- storage.load(localStorageName)
101
- var result = storeFunction.apply(store, args)
102
- storageOwner.removeChild(storage)
103
- return result
104
- }
105
- }
106
-
107
- // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40
108
- var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g")
109
- function ieKeyFix(key) {
110
- return key.replace(forbiddenCharsRegex, '___')
111
- }
112
- store.set = withIEStorage(function(storage, key, val) {
113
- key = ieKeyFix(key)
114
- if (val === undefined) { return store.remove(key) }
115
- storage.setAttribute(key, store.serialize(val))
116
- storage.save(localStorageName)
117
- return val
118
- })
119
- store.get = withIEStorage(function(storage, key) {
120
- key = ieKeyFix(key)
121
- return store.deserialize(storage.getAttribute(key))
122
- })
123
- store.remove = withIEStorage(function(storage, key) {
124
- key = ieKeyFix(key)
125
- storage.removeAttribute(key)
126
- storage.save(localStorageName)
127
- })
128
- store.clear = withIEStorage(function(storage) {
129
- var attributes = storage.XMLDocument.documentElement.attributes
130
- storage.load(localStorageName)
131
- for (var i=0, attr; attr=attributes[i]; i++) {
132
- storage.removeAttribute(attr.name)
133
- }
134
- storage.save(localStorageName)
135
- })
136
- store.getAll = function(storage) {
137
- var ret = {}
138
- store.forEach(function(key, val) {
139
- ret[key] = val
140
- })
141
- return ret
142
- }
143
- store.forEach = withIEStorage(function(storage, callback) {
144
- var attributes = storage.XMLDocument.documentElement.attributes
145
- for (var i=0, attr; attr=attributes[i]; ++i) {
146
- callback(attr.name, store.deserialize(storage.getAttribute(attr.name)))
147
- }
148
- })
149
- }
150
-
151
- try {
152
- var testKey = '__storejs__'
153
- store.set(testKey, testKey)
154
- if (store.get(testKey) != testKey) { store.disabled = true }
155
- store.remove(testKey)
156
- } catch(e) {
157
- store.disabled = true
158
- }
159
- store.enabled = !store.disabled
160
-
161
- if (typeof module != 'undefined' && module.exports) { module.exports = store }
162
- else if (typeof define === 'function' && define.amd) { define(store) }
163
- else { win.store = store }
164
-
165
-})(this.window || global);
securis/src/main/webapp/js/vendor/store.min.js
deleted file mode 100644
....@@ -1,2 +0,0 @@
1
-/* Copyright (c) 2010-2013 Marcus Westin */
2
-(function(e){function o(){try{return r in e&&e[r]}catch(t){return!1}}var t={},n=e.document,r="localStorage",i="script",s;t.disabled=!1,t.set=function(e,t){},t.get=function(e){},t.remove=function(e){},t.clear=function(){},t.transact=function(e,n,r){var i=t.get(e);r==null&&(r=n,n=null),typeof i=="undefined"&&(i=n||{}),r(i),t.set(e,i)},t.getAll=function(){},t.forEach=function(){},t.serialize=function(e){return JSON.stringify(e)},t.deserialize=function(e){if(typeof e!="string")return undefined;try{return JSON.parse(e)}catch(t){return e||undefined}};if(o())s=e[r],t.set=function(e,n){return n===undefined?t.remove(e):(s.setItem(e,t.serialize(n)),n)},t.get=function(e){return t.deserialize(s.getItem(e))},t.remove=function(e){s.removeItem(e)},t.clear=function(){s.clear()},t.getAll=function(){var e={};return t.forEach(function(t,n){e[t]=n}),e},t.forEach=function(e){for(var n=0;n<s.length;n++){var r=s.key(n);e(r,t.get(r))}};else if(n.documentElement.addBehavior){var u,a;try{a=new ActiveXObject("htmlfile"),a.open(),a.write("<"+i+">document.w=window</"+i+'><iframe src="/favicon.ico"></iframe>'),a.close(),u=a.w.frames[0].document,s=u.createElement("div")}catch(f){s=n.createElement("div"),u=n.body}function l(e){return function(){var n=Array.prototype.slice.call(arguments,0);n.unshift(s),u.appendChild(s),s.addBehavior("#default#userData"),s.load(r);var i=e.apply(t,n);return u.removeChild(s),i}}var c=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g");function h(e){return e.replace(c,"___")}t.set=l(function(e,n,i){return n=h(n),i===undefined?t.remove(n):(e.setAttribute(n,t.serialize(i)),e.save(r),i)}),t.get=l(function(e,n){return n=h(n),t.deserialize(e.getAttribute(n))}),t.remove=l(function(e,t){t=h(t),e.removeAttribute(t),e.save(r)}),t.clear=l(function(e){var t=e.XMLDocument.documentElement.attributes;e.load(r);for(var n=0,i;i=t[n];n++)e.removeAttribute(i.name);e.save(r)}),t.getAll=function(e){var n={};return t.forEach(function(e,t){n[e]=t}),n},t.forEach=l(function(e,n){var r=e.XMLDocument.documentElement.attributes;for(var i=0,s;s=r[i];++i)n(s.name,t.deserialize(e.getAttribute(s.name)))})}try{var p="__storejs__";t.set(p,p),t.get(p)!=p&&(t.disabled=!0),t.remove(p)}catch(f){t.disabled=!0}t.enabled=!t.disabled,typeof module!="undefined"&&module.exports?module.exports=t:typeof define=="function"&&define.amd?define(t):e.store=t})(this.window||global)
securis/src/main/webapp/licenses.html
deleted file mode 100644
....@@ -1,697 +0,0 @@
1
-
2
-<div ng-include="'header.html'"></div>
3
-
4
-<div class="container">
5
- <div class="col-md-12">&nbsp;</div>
6
- <div id="packs_section" class="col-md-6" ng-controller="PacksCtrl">
7
- <nav class="navbar navbar-default navbar-static-top" role="navigation">
8
- <div class="container-fluid">
9
- <!-- Brand and toggle get grouped for better mobile display -->
10
- <div class="navbar-header">
11
- <a class="navbar-brand" i18n>Packs</a>
12
- </div>
13
-
14
- <!-- Collect the nav links, forms, and other content for toggling -->
15
- <div class="collapse navbar-collapse">
16
- <ul class="nav navbar-nav">
17
- <li><a i18n ng-click="newPack()"><span
18
- class="glyphicon glyphicon-plus"></span> New</a></li>
19
- <li><a i18n ng-click="cancel()"> <span
20
- class="glyphicon glyphicon-ban-circle"></span> Cancel
21
- </a></li>
22
- </ul>
23
- <div class="navbar-form navbar-right form-group">
24
- <span class="input-group input-group-sm">
25
- <div class="input-group-addon" style="width: 28px;">
26
- <span class=" glyphicon glyphicon-search"></span>
27
- </div> <input type="text" class="form-control" placeholder="Search"
28
- ng-model="searchPackText">
29
- <div class="input-group-addon" style="width: 20px;">
30
- <span class=" glyphicon glyphicon-remove"
31
- ng-click="searchPackText = '';"></span>
32
- </div>
33
- </span>
34
- </div>
35
- </div>
36
- </div>
37
- </nav>
38
-
39
- <div class="panel panel-default animate-show ng-hide"
40
- ng-show="showForm">
41
- <form role="form" class="form-horizontal " name="packForm"
42
- id="packForm" ng-submit="save()">
43
- <div class="form-group" ng-if="!isNew">
44
- <label class="col-md-3 control-label">ID</label>
45
- <div class="col-md-8">
46
- <p class="form-control-static" ng-bind="pack.id"></p>
47
- </div>
48
- </div>
49
- <div class="form-group">
50
- <label class="col-md-3 control-label" for="code" i18n>Code</label>
51
- <div class="col-md-8">
52
- <input type="string" id="code" name="code" placeholder=""
53
- class="form-control" ng-model="pack.code"
54
- ng-required="mandatory.code" ng-maxlength="{{maxlength.code}}" />
55
- <div class="alert inline-alert alert-warning"
56
- ng-show="packForm.code.$invalid">
57
- <span class="glyphicon glyphicon-warning-sign"></span> <span
58
- ng-show="packForm.code.$error.maxlength"
59
- ng-bind="maxLengthErrorMsg('Code', maxlength.code)"></span> <span
60
- ng-show="packForm.code.$error.required"
61
- ng-bind="mandatoryFieldErrorMsg('Code')"></span>
62
- </div>
63
- </div>
64
- </div>
65
-
66
- <div class="form-group">
67
- <label class="col-md-3 control-label" for="init_valid_date" i18n>Validity (from - to)</label>
68
- <div class="col-md-4">
69
- <input type="date" id="init_valid_date" name="init_valid_date" placeholder=""
70
- class="form-control" ng-model="pack.init_valid_date"
71
- ng-required="mandatory.init_valid_date" />
72
- <div class="alert inline-alert alert-warning"
73
- ng-show="packForm.initValidDate.$invalid">
74
- <span class="glyphicon glyphicon-warning-sign"></span>
75
- <span ng-show="packForm.init_valid_date.$error.required"
76
- ng-bind="mandatoryFieldErrorMsg('Init valid date')"></span>
77
- </div>
78
- </div>
79
- <div class="col-md-4">
80
- <input type="date" id="end_valid_date" name="end_valid_date" placeholder=""
81
- class="form-control" ng-model="pack.end_valid_date"
82
- min="{{pack.init_valid_date | date: 'yyyy-MM-dd'}}"
83
- ng-required="mandatory.end_valid_date" />
84
- <div class="alert inline-alert alert-warning"
85
- ng-show="packForm.end_valid_date.$invalid">
86
- <span class="glyphicon glyphicon-warning-sign"></span>
87
- <span ng-show="packForm.end_valid_date.$error.required"
88
- ng-bind="mandatoryFieldErrorMsg('End valid date')"></span>
89
- <span ng-show="packForm.end_valid_date.$error.min"
90
- ng-bind="field1ShouldBeGreaterThanField2('End date', 'Init date')"></span>
91
- </div>
92
- </div>
93
- </div>
94
-
95
- <div class="form-group">
96
- <label class="col-md-3 control-label" for="num_licenses" i18n>Num.
97
- Licenses</label>
98
- <div class="col-md-8">
99
- <input type="number" id="num_licenses" name="num_licenses"
100
- placeholder="" class="form-control" ng-model="pack.num_licenses"
101
- ng-required="mandatory.num_licenses" />
102
- <div class="alert inline-alert alert-warning"
103
- ng-show="packForm.num_licenses.$invalid">
104
- <span class="glyphicon glyphicon-warning-sign"></span> <span
105
- ng-show="packForm.num_licenses.$error.maxlength"
106
- ng-bind="maxLengthErrorMsg('Num. Licenses', maxlength.num_licenses)"></span>
107
- <span ng-show="packForm.num_licenses.$error.required"
108
- ng-bind="mandatoryFieldErrorMsg('Num. Licenses')"></span>
109
- </div>
110
- </div>
111
- </div>
112
-
113
- <div class="form-group" ng-if="!isNew">
114
- <label class="col-md-3 control-label" for="status" i18n>Status</label>
115
- <div class="col-md-8">
116
- <p class="form-control-static" ng-bind="pack.status_name"></p>
117
- <div class="alert inline-alert alert-warning"
118
- ng-show="packForm.status.$invalid">
119
- <span class="glyphicon glyphicon-warning-sign"></span> <span
120
- ng-show="packForm.status.$error.required"
121
- ng-bind="mandatoryFieldErrorMsg('Status')"></span>
122
- </div>
123
- </div>
124
- </div>
125
-
126
- <div class="form-group">
127
- <label class="col-md-3 control-label" for="license_type_id" i18n>License
128
- type</label>
129
- <div class="col-md-8">
130
- <select ng-if="isNew" class="form-control" id="license_type_id"
131
- ng-change="updateMetadata()"
132
- ng-required="mandatory.license_type_id"
133
- ng-model="pack.license_type_id"
134
- ng-options="o.id as o.label for o in refs.license_type_id">
135
- </select>
136
- <p ng-if="!isNew" class="form-control-static" ng-bind="pack.license_type_name"></p>
137
- <div class="alert inline-alert alert-warning"
138
- ng-show="packForm.license_type_id.$invalid">
139
- <span class="glyphicon glyphicon-warning-sign"></span> <span
140
- ng-show="packForm.license_type_id.$error.required"
141
- ng-bind="mandatoryFieldErrorMsg('License type')"></span>
142
- </div>
143
- </div>
144
- </div>
145
-
146
- <div class="form-group">
147
- <label class="col-md-3 control-label" for="organization_id" i18n>Organization</label>
148
- <div class="col-md-8">
149
- <select ng-if="isNew" class="form-control"
150
- ng-model="pack.organization_id"
151
- ng-required="mandatory.organization_id"
152
- ng-options="o.id as o.label for o in refs.organization_id">
153
- </select>
154
- <p ng-if="!isNew" class="form-control-static" ng-bind="pack.organization_name"></p>
155
- <div class="alert inline-alert alert-warning"
156
- ng-show="packForm.organization_id.$invalid">
157
- <span class="glyphicon glyphicon-warning-sign"></span> <span
158
- ng-show="packForm.organization_id.$error.required"
159
- ng-bind="mandatoryFieldErrorMsg('Organization')"></span>
160
- </div>
161
- </div>
162
- </div>
163
- <div class="form-group">
164
- <label class="col-md-3 control-label" for="license_preactivation"
165
- i18n>License preactivation</label>
166
- <div class="col-md-8">
167
- <input type="checkbox" class="form-control"
168
- ng-model="pack.license_preactivation" />
169
- </div>
170
- </div>
171
- <div class="form-group">
172
- <label class="col-md-3 control-label" for="preactivation_valid_period"
173
- i18n>Preactivation valid period (days)</label>
174
- <div class="col-md-8">
175
- <input type="number" id="preactivation_valid_period" name="preactivation_valid_period"
176
- min="1" class="form-control" ng-model="pack.preactivation_valid_period"
177
- ng-required="pack.license_preactivation" />
178
- <div class="alert inline-alert alert-warning"
179
- ng-show="packForm.preactivation_valid_period.$invalid">
180
- <span class="glyphicon glyphicon-warning-sign"></span>
181
- <span ng-show="packForm.preactivation_valid_period.$error.required"
182
- ng-bind="mandatoryFieldErrorMsg('Preactivation valid period')"></span>
183
- <span ng-show="packForm.preactivation_valid_period.$error.min"
184
- ng-bind="field1ShouldBeGreaterThanField2('The preactivation valid period', '0')"></span>
185
- </div>
186
- </div>
187
- </div>
188
- <div class="form-group">
189
- <label class="col-md-3 control-label" for="renew_valid_period"
190
- i18n>Period for renew (days)</label>
191
- <div class="col-md-8">
192
- <input type="number" id="renew_valid_period" name="renew_valid_period"
193
- min="0" class="form-control" ng-model="pack.renew_valid_period"
194
- ng-required="true" />
195
- <div class="alert inline-alert alert-warning"
196
- ng-show="packForm.renew_valid_period.$invalid">
197
- <span class="glyphicon glyphicon-warning-sign"></span>
198
- <span ng-show="packForm.renew_valid_period.$error.required"
199
- ng-bind="mandatoryFieldErrorMsg('Period for renew')"></span>
200
- <span ng-show="packForm.renew_valid_period.$error.min"
201
- ng-bind="field1ShouldBeGreaterThanField2('The period for renew valid period', '0')"></span>
202
- </div>
203
- </div>
204
- </div>
205
-
206
-
207
- <div class="form-group">
208
- <label class="col-md-3 control-label" for="comments" i18n>Comments</label>
209
- <div class="col-md-8">
210
- <textarea type="string" id="comments" name="comments"
211
- placeholder="" class="form-control" ng-model="pack.comments"
212
- rows="2" ng-required="mandatory.comments"
213
- ng-maxlength="{{maxlength.comments}}"></textarea>
214
- <div class="alert inline-alert alert-warning"
215
- ng-show="packForm.comments.$invalid">
216
- <span class="glyphicon glyphicon-warning-sign"></span> <span
217
- ng-show="packForm.comments.$error.maxlength"
218
- ng-bind="maxLengthErrorMsg('Comments', maxlength.comments)"></span>
219
- <span ng-show="packForm.comments.$error.required"
220
- ng-bind="mandatoryFieldErrorMsg('comments')"></span>
221
- </div>
222
- </div>
223
- </div>
224
-
225
- <div class="form-group" ng-if="!isNew">
226
- <label i18n class="col-md-3 control-label">Created by</label>
227
- <div class="col-md-8">
228
- <p class="form-control-static" ng-bind="pack.created_by_name"></p>
229
- </div>
230
- </div>
231
-
232
- <div class="form-group" ng-if="!isNew">
233
- <label i18n class="col-md-3 control-label">Creation date</label>
234
- <div class="col-md-8">
235
- <p class="form-control-static"
236
- ng-bind="pack.creation_timestamp | date:'medium'"></p>
237
- </div>
238
- </div>
239
-
240
- <div class="form-group">
241
- <label class="col-md-3 control-label" i18n>Metadata</label>
242
- <div class="col-md-8">
243
- <table class="table table-hover table-condensed">
244
- <thead>
245
- <tr>
246
- <th i18n>Key</th>
247
- <th i18n>Value</th>
248
- </tr>
249
- </thead>
250
- <tbody>
251
- <tr ng-repeat="row_md in pack.metadata">
252
- <td><input type="text" id="md_key" name="md_key"
253
- placeholder="" ng-readonly="true"
254
- class="form-control" ng-model="row_md['key']"
255
- ng-required="true" ng-maxlength="100" /></td>
256
- <td><input type="text" id="md_value" name="md_value" ng-readonly="row_md['readonly']"
257
- placeholder="" class="form-control" ng-model="row_md['value']"
258
- ng-required="row_md['mandatory']" ng-maxlength="500" /></td>
259
- </tr>
260
- </tbody>
261
- </table>
262
- </div>
263
- </div>
264
-
265
- <div class="form-group">
266
- <div class="col-md-offset-3 col-md-10">
267
- <button id="save" type="submit" class="btn btn-primary">
268
- <span i18n class="glyphicon glyphicon-floppy-disk"></span> Save
269
- </button>
270
- <button ng-if="!isNew" id="acc" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
271
- <span i18n class="glyphicon glyphicon-align-justify"></span> Actions
272
- <span class="caret"></span>
273
- </button>
274
- <ul class="dropdown-menu" role="menu">
275
- <li><a ng-click="execute('activate')" ng-if="Packs.isActionAvailable('activate', pack)" href="#" >Activate</a></li>
276
- <li><a ng-click="execute('putonhold')" ng-if="Packs.isActionAvailable('putonhold', pack)" href="#">Put on hold</a></li>
277
- <li class="divider"></li>
278
- <li><a ng-click="execute('cancel')" ng-if="Packs.isActionAvailable('cancel', pack)" href="#">Cancel</a></li>
279
- <li><a ng-click="execute('delete')" ng-if="Packs.isActionAvailable('delete', pack)" href="#">Delete</a></li>
280
- </ul>
281
- </div>
282
- </div>
283
- </form>
284
- </div>
285
-
286
- <div class="panel panel-default">
287
- <div class="panel-heading">
288
- Packs <span class="badge pull-right" ng-bind="packs.length || 0"></span>
289
- </div>
290
-
291
- <table class="table table-hover table-condensed">
292
- <thead>
293
- <tr>
294
- <th></th>
295
- <th i18n>Code</th>
296
- <th i18n>Application</th>
297
- <th i18n>Lic. type</th>
298
- <th i18n>Organization</th>
299
- <th i18n>Lics.</th>
300
- <th></th>
301
- </tr>
302
- </thead>
303
- <tbody>
304
- <tr ng-repeat="p in packs | filter:searchPackText"
305
- ng-dblclick="editPack(p)"
306
- ng-class="{success: p._selected}" >
307
- <td><input type="checkbox" ng-model="p._selected" ng-change="selectPack(p);"></td>
308
- <td style="white-space: nowrap;" ng-bind="p.code" ></td>
309
- <td ng-bind="p.application_name"></td>
310
- <td ng-bind="p.license_type_code"></td>
311
- <td ng-bind="ellipsis(p.organization_code + ' - ' + p.organization_name, 25)"
312
- title="{{p.organization_code + ' - ' + pack.organization_name}}"></td>
313
- <td
314
- title="Total: {{p.num_licenses}}, available: {{p.num_available}}">{{p.num_licenses}}
315
- ({{p.num_available}})</td>
316
- <td>
317
- <div class="dropdown">
318
- <a class="dropdown-toggle" data-toggle="dropdown"> <span
319
- class="glyphicon glyphicon-align-justify" style="color: {{Packs.getStatusColor(p.status)}}"></span>
320
- <span style="color: {{Packs.getStatusColor(p.status)}}" class="caret"></span>
321
- </a>
322
- <ul class="dropdown-menu">
323
- <li ng-if="Packs.isActionAvailable('edit', p)"><a
324
- ng-click="editPack(p)"><span
325
- class="glyphicon glyphicon-pencil"></span> <span i18n>Edit</span></a></li>
326
- <li ng-if="Packs.isActionAvailable('activate', p)"><a
327
- ng-click="execute('activate', p)"><span
328
- class="glyphicon glyphicon-check"></span> <span i18n>Activate</span></a></li>
329
- <li ng-if="Packs.isActionAvailable('putonhold', p)"><a
330
- ng-click="execute('putonhold', p)"><span
331
- class="glyphicon glyphicon-pause"></span> <span i18n>Put on hold</span></a></li>
332
- <li ng-if="Packs.isActionAvailable('cancel', p)"><a
333
- ng-click="execute('cancel', p)"><span
334
- class="glyphicon glyphicon-ban-circle"></span> <span i18n>Cancel</span></a></li>
335
- <li ng-if="Packs.isActionAvailable('delete', p)"><a
336
- ng-click="execute('delete', p)"><span
337
- class="glyphicon glyphicon-trash"></span> <span i18n>Delete</span></a></li>
338
- </ul>
339
- </div>
340
- </td>
341
- </tr>
342
- </tbody>
343
- <tfoot>
344
- </tfoot>
345
- </table>
346
- </div>
347
-
348
- </div>
349
- <div id="licenses_section" class="col-md-6"
350
- ng-controller="LicensesCtrl">
351
- <nav class="navbar navbar-default navbar-static-top"
352
- ng-disabled="!currentPack">
353
- <div class="container-fluid">
354
- <!-- Brand and toggle get grouped for better mobile display -->
355
- <div class="navbar-header success">
356
- <a class="navbar-brand" i18n>Licenses</a>
357
- </div>
358
-
359
- <!-- Collect the nav links, forms, and other content for toggling -->
360
- <div class="collapse navbar-collapse"
361
- id="bs-example-navbar-collapse-1">
362
- <ul class="nav navbar-nav">
363
- <li><a i18n ng-click="newLicense()"><span
364
- class="glyphicon glyphicon-plus"></span> New</a></li>
365
- <li><a i18n ng-click="cancel()"> <span
366
- class="glyphicon glyphicon-ban-circle"></span> Cancel
367
- </a></li>
368
- </ul>
369
- <div class="navbar-form navbar-right form-group">
370
- <span class="input-group input-group-sm">
371
- <div class="input-group-addon" style="width: 28px;">
372
- <span class=" glyphicon glyphicon-search"></span>
373
- </div> <input type="text" class="form-control" placeholder="Search"
374
- ng-model="searchLicenseText">
375
- <div class="input-group-addon" style="width: 20px;">
376
- <span class=" glyphicon glyphicon-remove"
377
- ng-click="searchLicenseText = '';"></span>
378
- </div>
379
- </span>
380
- </div>
381
- </div>
382
- </div>
383
- </nav>
384
-
385
- <div ng-if="!currentPack" class="well well-lg">
386
- <h4 i18n>No pack selected</h4>
387
- <p i18n>Please, select a pack to manage its licenses</p>
388
- </div>
389
-
390
- <div ng-if="currentPack"
391
- class="panel panel-default animate-show ng-hide" ng-show="showForm">
392
- <form role="form" class="form-horizontal " name="licenseForm"
393
- id="licenseForm" ng-submit="save()">
394
- <div class="form-group" ng-if="!isNew">
395
- <label class="col-md-3 control-label">ID</label>
396
- <div class="col-md-8">
397
- <p class="form-control-static" ng-bind="license.id"></p>
398
- </div>
399
- </div>
400
- <div class="form-group">
401
- <label class="col-md-3 control-label" for="pack_id" i18n>Pack</label>
402
- <div class="col-md-8">
403
- <p class="form-control-static" ng-bind="currentPack.code"></p>
404
- <input type="hidden" id="pack_id" name="pack_id"
405
- ng-model="license.pack_id" />
406
- </div>
407
- </div>
408
- <div class="form-group">
409
- <label class="col-md-3 control-label" for="code" i18n>Code</label>
410
- <div class="col-md-8">
411
- <input type="string" id="code" name="code" placeholder=""
412
- class="form-control" ng-model="license.code" readonly
413
- ng-required="mandatory.code" ng-maxlength="{{maxlength.code}}" />
414
- <div class="alert inline-alert alert-warning"
415
- ng-show="licenseForm.code.$invalid">
416
- <span class="glyphicon glyphicon-warning-sign"></span> <span
417
- ng-show="licenseForm.code.$error.maxlength"
418
- ng-bind="maxLengthErrorMsg('Code', maxlength.code)"></span> <span
419
- ng-show="licenseForm.code.$error.required"
420
- ng-bind="mandatoryFieldErrorMsg('Code')"></span>
421
- </div>
422
- </div>
423
- </div>
424
- <div class="form-group">
425
- <label class="col-md-3 control-label" for="activation_code" i18n>Activation code</label>
426
- <div class="col-md-8">
427
- <input type="string" id="activation_code" name="activation_code" placeholder=""
428
- class="form-control" ng-model="license.activation_code" readonly
429
- ng-required="mandatory.activation_code" ng-maxlength="{{maxlength.activation_code}}" />
430
- <div class="alert inline-alert alert-warning"
431
- ng-show="licenseForm.activation_code.$invalid">
432
- <span class="glyphicon glyphicon-warning-sign"></span> <span
433
- ng-show="licenseForm.activation_code.$error.maxlength"
434
- ng-bind="maxLengthErrorMsg('Activation code', maxlength.activation_code)"></span> <span
435
- ng-show="licenseForm.activation_code.$error.required"
436
- ng-bind="mandatoryFieldErrorMsg('Activation code')"></span>
437
- </div>
438
- </div>
439
- </div>
440
- <div class="form-group" ng-if="!isNew">
441
- <label class="col-md-3 control-label" i18n>Status</label>
442
- <div class="col-md-8">
443
- <p class="form-control-static" ng-bind="license.status_name"></p>
444
- </div>
445
- </div>
446
-
447
- <div class="form-group" ng-if="!isNew">
448
- <label class="col-md-3 control-label" i18n>Expiration date</label>
449
- <div class="col-md-8">
450
- <p class="form-control-static"
451
- ng-bind="license.expiration_date | date:'fullDate'"></p>
452
- </div>
453
- </div>
454
-
455
- <div class="form-group">
456
- <label class="col-md-3 control-label" for="full_name" i18n>User
457
- full name</label>
458
- <div class="col-md-8">
459
- <input type="string" id="full_name" name="full_name"
460
- placeholder="" class="form-control" ng-model="license.full_name"
461
- ng-required="mandatory.full_name" ng-maxlength="{{maxlength.full_name}}" />
462
- <div class="alert inline-alert alert-warning"
463
- ng-show="licenseForm.full_name.$invalid">
464
- <span class="glyphicon glyphicon-warning-sign"></span> <span
465
- ng-show="licenseForm.full_name.$error.maxlength"
466
- ng-bind="maxLengthErrorMsg('User full name', maxlength.full_name)"></span>
467
- <span ng-show="licenseForm.full_name.$error.required"
468
- ng-bind="mandatoryFieldErrorMsg('User full name')"></span>
469
- </div>
470
- </div>
471
- </div>
472
-
473
- <div class="form-group">
474
- <label class="col-md-3 control-label" for="email" i18n>User
475
- email</label>
476
- <div class="col-md-8">
477
- <input type="email" id="email" name="email" placeholder=""
478
- class="form-control" ng-model="license.email"
479
- ng-required="mandatory.email" ng-maxlength="{{maxlength.email}}" />
480
- <div class="alert inline-alert alert-warning"
481
- ng-show="licenseForm.email.$invalid">
482
- <span class="glyphicon glyphicon-warning-sign"></span> <span
483
- ng-show="licenseForm.email.$error.email"
484
- ng-bind="'Please, write a valid email address'"></span> <span
485
- ng-show="licenseForm.email.$error.maxlength"
486
- ng-bind="maxLengthErrorMsg('User email', maxlength.email)"></span>
487
- <span ng-show="licenseForm.email.$error.required"
488
- ng-bind="mandatoryFieldErrorMsg('User email')"></span>
489
- </div>
490
- </div>
491
- </div>
492
- <div class="form-group" >
493
- <label class="col-md-3 control-label" for="request_data" i18n>Request
494
- data</label>
495
- <div class="col-md-{{(isNew || Licenses.isActionAvailable('add_request', license)) ? 7 : 8}}">
496
- <textarea id="request_data" name="request_data" placeholder=""
497
- class="form-control" ng-model="license.request_data" rows="2"
498
- ng-required="mandatory.request_data"
499
- ng-readonly="!isNew && !Licenses.isActionAvailable('add_request', license)"
500
- ng-maxlength="{{maxlength.request_data}}"></textarea>
501
- <div class="alert inline-alert alert-warning"
502
- ng-show="licenseForm.request_data.$invalid">
503
- <!-- Invalid ? {{licenseForm.request_data.$invalid}}
504
- Error ? {{licenseForm.request_data.$error | json}}
505
- Error ? {{licenseForm.request_data.$error.maxlength}} -->
506
- <span class="glyphicon glyphicon-warning-sign">
507
- <span
508
- ng-show="licenseForm.request_data.$error.maxlength"
509
- ng-bind="maxLengthErrorMsg('Request data', maxlength.request_data)"></span>
510
- <span ng-show="licenseForm.request_data.$error.required"
511
- ng-bind="mandatoryFieldErrorMsg('Request data')"></span>
512
- </span>
513
- </div>
514
- </div>
515
- <span class="btn btn-file btn-default btn-xs" ng-if="isNew || Licenses.isActionAvailable('add_request', license)">
516
- <span class="glyphicon glyphicon-folder-open"></span>
517
- <input file-loader="license.request_data" type="file" />
518
- </span>
519
- </div>
520
-
521
- <div class="form-group">
522
- <label class="col-md-3 control-label" for="comments" i18n>Comments</label>
523
- <div class="col-md-8">
524
- <textarea type="string" id="comments" name="comments"
525
- placeholder="" class="form-control" ng-model="license.comments"
526
- rows="2" ng-required="mandatory.comments"
527
- ng-maxlength="{{maxlength.comments}}"></textarea>
528
-
529
- <div class="alert inline-alert alert-warning"
530
- ng-show="licenseForm.comments.$invalid">
531
- <span class="glyphicon glyphicon-warning-sign"></span> <span
532
- ng-show="licenseForm.comments.$error.maxlength"
533
- ng-bind="maxLengthErrorMsg('Comments', maxlength.comments)"></span>
534
- <span ng-show="licenseForm.comments.$error.required"
535
- ng-bind="mandatoryFieldErrorMsg('comments')"></span>
536
- </div>
537
- </div>
538
- </div>
539
-
540
- <div class="form-group" ng-if="!isNew">
541
- <label class="col-md-3 control-label" i18n>Created by</label>
542
- <div class="col-md-8">
543
- <p class="form-control-static" ng-bind="license.created_by_name"></p>
544
- </div>
545
- </div>
546
-
547
- <div class="form-group" ng-if="!isNew && license.canceled_by_name">
548
- <label class="col-md-3 control-label">Canceled by</label>
549
- <div class="col-md-8">
550
- <p class="form-control-static" ng-bind="license.canceled_by_name"></p>
551
- </div>
552
- </div>
553
-
554
- <div class="form-group" ng-if="!isNew">
555
- <label class="col-md-3 control-label" i18n>Creation date</label>
556
- <div class="col-md-8">
557
- <p class="form-control-static"
558
- ng-bind="license.creation_timestamp | date:'medium'"></p>
559
- </div>
560
- </div>
561
-
562
- <div class="form-group" ng-if="!isNew">
563
- <label class="col-md-3 control-label" i18n>Modification
564
- date</label>
565
- <div class="col-md-8">
566
- <p class="form-control-static"
567
- ng-bind="license.modificationTimestamp | date:'medium'"></p>
568
- </div>
569
- </div>
570
-
571
- <div class="form-group"
572
- ng-if="!isNew && license.activationTimestamp">
573
- <label class="col-md-3 control-label" i18n>Activation date</label>
574
- <div class="col-md-8">
575
- <p class="form-control-static"
576
- ng-bind="license.activationTimestamp | date:'medium'"></p>
577
- </div>
578
- </div>
579
-
580
- <div class="form-group" ng-if="!isNew && license.sendTimestamp">
581
- <label class="col-md-3 control-label" i18n>Send date</label>
582
- <div class="col-md-8">
583
- <p class="form-control-static"
584
- ng-bind="license.sendTimestamp | date:'medium'"></p>
585
- </div>
586
- </div>
587
-
588
- <div class="form-group"
589
- ng-if="!isNew && license.cancelationTimestamp">
590
- <label class="col-md-3 control-label" i18n>Cancelation date</label>
591
- <div class="col-md-8">
592
- <p class="form-control-static"
593
- ng-bind="license.cancelationTimestamp | date:'medium'"></p>
594
- </div>
595
- </div>
596
-
597
- <div class="form-group"
598
- ng-if="!isNew && license.lastAccessTimestamp">
599
- <label class="col-md-3 control-label" i18n>Last access date</label>
600
- <div class="col-md-8">
601
- <p class="form-control-static"
602
- ng-bind="license.lastAccessTimestamp | date:'medium'"></p>
603
- </div>
604
- </div>
605
-
606
- <div class="form-group">
607
- <div class="col-md-offset-3 col-md-9">
608
- <button id="save" type="submit" class="btn btn-primary">
609
- <span i18n class="glyphicon glyphicon-floppy-disk"></span> Save
610
- </button>
611
- <button ng-if="!isNew" id="acc" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
612
- <span i18n class="glyphicon glyphicon-align-justify"></span> Actions
613
- <span class="caret"></span>
614
- </button>
615
- <ul class="dropdown-menu" role="menu">
616
- <li ng-if="Licenses.isActionAvailable('activate', license)"><a ng-click="execute('activate', license)" href="#">Activate</a></li>
617
- <li ng-if="Licenses.isActionAvailable('download', license)"><a ng-click="execute('download', license)" href="#">Download</a></li>
618
- <li ng-if="Licenses.isActionAvailable('send', license)"><a ng-click="execute('send', license)" href="#">Send by email</a></li>
619
- <li ng-if="Licenses.isActionAvailable('cancel', license)"><a ng-click="execute('cancel', license)" href="#">Cancel</a></li>
620
- <li ng-if="Licenses.isActionAvailable('delete', license)"><a ng-click="execute('delete', license)" href="#">Delete</a></li>
621
- </ul>
622
-
623
- </div>
624
- </div>
625
- </form>
626
- </div>
627
-
628
- <div class="panel panel-default" ng-if="currentPack">
629
- <div class="panel-heading">
630
- <span i18n>Licenses for pack: </span>{{currentPack.code}} <span
631
- style="color: lightgreen;" class="badge pull-right"
632
- ng-bind="currentPack.lic_available || 0"></span> <span
633
- class="badge pull-right" ng-bind="licenses.length || 0"></span>
634
- </div>
635
-
636
-
637
- <table class="table table-hover table-condensed">
638
- <thead>
639
- <tr>
640
- <th i18n>License code</th>
641
- <th i18n>User fullname</th>
642
- <th i18n>Email</th>
643
- <th i18n>Status</th>
644
- <th></th>
645
- </tr>
646
- </thead>
647
- <tbody>
648
- <tr ng-repeat="lic in licenses | filter:searchLicenseText"
649
- ng-dblclick="editLicense(lic)">
650
- <td style="white-space: nowrap;" ng-bind="lic.code"></td>
651
- <td ng-bind="ellipsis(lic.full_name, 20)"
652
- title="{{lic.full_name}}"></td>
653
- <td ng-bind="ellipsis(lic.email, 30)" title="{{lic.email}}"></td>
654
- <td ng-bind="Licenses.getStatusName(lic.status)"></td>
655
- <td>
656
- <div class="dropdown">
657
- <a class="dropdown-toggle" data-toggle="dropdown"> <span
658
- class="glyphicon glyphicon-align-justify" style="color: {{Licenses.getStatusColor(lic.status)}}"></span>
659
- <span style="color: {{Licenses.getStatusColor(lic.status)}}" class="caret"></span>
660
- </a>
661
- <ul class="dropdown-menu">
662
- <li ng-if="Licenses.isActionAvailable('download', lic)"><a
663
- ng-click="execute('download', lic)"><span
664
- class="glyphicon glyphicon-download"></span> <span i18n>Download</span></a></li>
665
- <li ng-if="Licenses.isActionAvailable('edit', lic)"><a
666
- ng-click="editLicense(lic)"><span
667
- class="glyphicon glyphicon-pencil"></span> <span i18n>Edit</span></a></li>
668
- <li ng-if="Licenses.isActionAvailable('activate', lic)"><a
669
- ng-click="execute('activate', lic)"><span
670
- class="glyphicon glyphicon-check"></span> <span i18n>Activate</span></a></li>
671
- <li ng-if="Licenses.isActionAvailable('send', lic)"><a
672
- ng-click="execute('send', lic)"><span
673
- class="glyphicon glyphicon-send"></span> <span i18n>Send email</span></a></li>
674
- <li ng-if="Licenses.isActionAvailable('block', lic)"><a
675
- ng-click="execute('block', lic)"><span
676
- class="glyphicon glyphicon-exclamation-sign"></span> <span i18n>Block</span></a></li>
677
- <li ng-if="Licenses.isActionAvailable('unblock', lic)"><a
678
- ng-click="execute('unblock', lic)"><span
679
- class="glyphicon glyphicon-ok-sign"></span> <span i18n>Unblock</span></a></li>
680
- <li ng-if="Licenses.isActionAvailable('cancel', lic)"><a
681
- ng-click="execute('cancel', lic)"><span
682
- class="glyphicon glyphicon-ban-circle"></span> <span i18n>Cancel</span></a></li>
683
- <li ng-if="Licenses.isActionAvailable('delete', lic)"><a
684
- ng-click="execute('delete', lic)"><span
685
- class="glyphicon glyphicon-trash"></span> <span i18n>Delete</span></a></li>
686
- </ul>
687
- </div>
688
- </td>
689
- </tr>
690
- </tbody>
691
- <tfoot>
692
- </tfoot>
693
- </table>
694
- </div>
695
-
696
- </div>
697
-</div>
securis/src/main/webapp/login.html
deleted file mode 100644
....@@ -1,60 +0,0 @@
1
-
2
- <div class="navbar navbar-inverse navbar-fixed-top">
3
- <div class="container">
4
- <div class="navbar-header">
5
- <button type="button" class="navbar-toggle" data-toggle="collapse"
6
- data-target=".navbar-collapse">
7
- <span class="icon-bar"></span> <span class="icon-bar"></span> <span
8
- class="icon-bar"></span>
9
- </button>
10
- <a i18n class="navbar-brand" href="#">SeCuris</a>
11
- </div>
12
- <div class="navbar-collapse collapse">
13
- <ul class="nav navbar-nav navbar-right">
14
- <li><a i18n href="#about">About</a></li>
15
- <li><a i18n href="#contact">Contact</a></li>
16
- </ul>
17
- </div>
18
- </div>
19
- </div>
20
-
21
- <!-- Main jumbotron for a primary marketing message or call to action -->
22
- <div class="jumbotron">
23
- <div class="container">
24
- <h2 i18n >SeCuris</h2>
25
- <p i18n >Licenses Server for CurisTEC products.</p>
26
- </div>
27
- </div>
28
-
29
- <div class="container">
30
- <div class="col-md-8 col-md-offset-2">
31
- <form role="form" class="form-horizontal"
32
- ng-submit="submit()" name="loginForm">
33
- <p i18n class="lead">Sign in SeCuris</p>
34
- <fieldset>
35
- <div class="form-group">
36
- <label i18n class="col-md-3 control-label" for="username">Username</label>
37
- <div class="col-md-5">
38
- <input type="text" id="username" name="username" placeholder=""
39
- class="form-control" ng-model="username" required>
40
- </div>
41
- </div>
42
- <div class="form-group">
43
- <!-- Password-->
44
- <label i18n class="col-md-3 control-label" for="password">Password</label>
45
- <div class="col-md-5">
46
- <input type="password" id="password" name="password"
47
- placeholder="" class="form-control" ng-model="password" required>
48
- </div>
49
- </div>
50
- <div class="form-group">
51
- <div class="col-md-offset-3 col-md-10">
52
- <button i18n type="submit" class="btn btn-primary">Sign in</button>
53
- </div>
54
- </div>
55
- </fieldset>
56
-
57
- </form>
58
- </div>
59
- </div>
60
-
securis/src/main/webapp/package.json
....@@ -0,0 +1,65 @@
1
+{
2
+ "name": "angular-quickstart",
3
+ "version": "1.0.0",
4
+ "description": "QuickStart package.json from the documentation, supplemented with testing support",
5
+ "scripts": {
6
+ "build": "tsc -p src/",
7
+ "build:watch": "tsc -p src/ -w",
8
+ "build:e2e": "tsc -p e2e/",
9
+ "serve": "lite-server -c=bs-config.json",
10
+ "serve:e2e": "lite-server -c=bs-config.e2e.json",
11
+ "prestart": "npm run build",
12
+ "start": "concurrently \"npm run build:watch\" \"npm run serve\"",
13
+ "pree2e": "npm run build:e2e",
14
+ "e2e": "concurrently \"npm run serve:e2e\" \"npm run protractor\" --kill-others --success first",
15
+ "preprotractor": "webdriver-manager update",
16
+ "protractor": "protractor protractor.config.js",
17
+ "pretest": "npm run build",
18
+ "test": "concurrently \"npm run build:watch\" \"karma start karma.conf.js\"",
19
+ "pretest:once": "npm run build",
20
+ "test:once": "karma start karma.conf.js --single-run",
21
+ "lint": "tslint ./src/**/*.ts -t verbose"
22
+ },
23
+ "keywords": [],
24
+ "author": "",
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "@angular/common": "^2.4.8",
28
+ "@angular/compiler": "~2.4.0",
29
+ "@angular/core": "~2.4.0",
30
+ "@angular/forms": "~2.4.0",
31
+ "@angular/http": "~2.4.0",
32
+ "@angular/material": "^2.0.0-beta.2",
33
+ "@angular/platform-browser": "~2.4.0",
34
+ "@angular/platform-browser-dynamic": "~2.4.0",
35
+ "@angular/router": "^3.4.8",
36
+ "@covalent/core": "^1.0.0-beta.2",
37
+ "@covalent/dynamic-forms": "^1.0.0-beta.2",
38
+ "@covalent/http": "^1.0.0-beta.2",
39
+ "angular-in-memory-web-api": "~0.2.4",
40
+ "core-js": "^2.4.1",
41
+ "hammerjs": "^2.0.8",
42
+ "rxjs": "^5.0.1",
43
+ "systemjs": "0.19.40",
44
+ "zone.js": "^0.7.4"
45
+ },
46
+ "devDependencies": {
47
+ "concurrently": "^3.2.0",
48
+ "lite-server": "^2.2.2",
49
+ "typescript": "~2.0.10",
50
+ "canonical-path": "0.0.2",
51
+ "tslint": "^3.15.1",
52
+ "lodash": "^4.16.4",
53
+ "jasmine-core": "~2.4.1",
54
+ "karma": "^1.3.0",
55
+ "karma-chrome-launcher": "^2.0.0",
56
+ "karma-cli": "^1.0.1",
57
+ "karma-jasmine": "^1.0.2",
58
+ "karma-jasmine-html-reporter": "^0.2.2",
59
+ "protractor": "~4.0.14",
60
+ "rimraf": "^2.5.4",
61
+ "@types/node": "^6.0.46",
62
+ "@types/jasmine": "2.5.36"
63
+ },
64
+ "repository": {}
65
+}
securis/src/main/webapp/server.js
deleted file mode 100644
....@@ -1,7 +0,0 @@
1
-var connect = require('connect');
2
-
3
-connect.createServer(
4
- connect.static(__dirname)
5
-).listen(8080);
6
-
7
-console.log('Server listening in http://0.0.0.0:8080...');
securis/src/main/webapp/src/app/app.component.ts
....@@ -0,0 +1,39 @@
1
+import { Component } from '@angular/core';
2
+import { DomSanitizer } from '@angular/platform-browser';
3
+import { MdIconRegistry } from '@angular/material';
4
+
5
+// https://github.com/Teradata/covalent-quickstart/tree/develop/src/app
6
+// https://teradata.github.io/covalent-quickstart/#/
7
+
8
+@Component({
9
+ selector: 'my-app',
10
+ template: `<router-outlet></router-outlet>`
11
+})
12
+
13
+
14
+export class AppComponent {
15
+
16
+ constructor(private _iconRegistry: MdIconRegistry,
17
+ private _domSanitizer: DomSanitizer) {
18
+
19
+ this._iconRegistry.addSvgIconInNamespace('assets', 'covalent',
20
+ this._domSanitizer.bypassSecurityTrustResourceUrl('https://raw.githubusercontent.com/Teradata/covalent-quickstart/develop/src/assets/icons/covalent.svg'));
21
+ this._iconRegistry.addSvgIconInNamespace('assets', 'teradata',
22
+ this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/teradata.svg'));
23
+ this._iconRegistry.addSvgIconInNamespace('assets', 'github',
24
+ this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/github.svg'));
25
+ this._iconRegistry.addSvgIconInNamespace('assets', 'covalent',
26
+ this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/covalent.svg'));
27
+ this._iconRegistry.addSvgIconInNamespace('assets', 'covalent-mark',
28
+ this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/covalent-mark.svg'));
29
+ this._iconRegistry.addSvgIconInNamespace('assets', 'teradata-ux',
30
+ this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/teradata-ux.svg'));
31
+ this._iconRegistry.addSvgIconInNamespace('assets', 'appcenter',
32
+ this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/appcenter.svg'));
33
+ this._iconRegistry.addSvgIconInNamespace('assets', 'listener',
34
+ this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/listener.svg'));
35
+ this._iconRegistry.addSvgIconInNamespace('assets', 'querygrid',
36
+ this._domSanitizer.bypassSecurityTrustResourceUrl('assets/icons/querygrid.svg'));
37
+ }
38
+
39
+}
securis/src/main/webapp/src/app/app.module.ts
....@@ -0,0 +1,37 @@
1
+import { NgModule } from '@angular/core';
2
+import { BrowserModule } from '@angular/platform-browser';
3
+import { CommonModule } from '@angular/common';
4
+import { FormsModule } from '@angular/forms';
5
+import {MaterialModule} from '@angular/material';
6
+import {CovalentCoreModule} from '@covalent/core';
7
+import {CovalentHttpModule} from '@covalent/http';
8
+import {CovalentDynamicFormsModule} from '@covalent/dynamic-forms';
9
+
10
+import { AppComponent } from './app.component';
11
+import { PackListComponent } from './pack.list.component';
12
+import { HeroDetailComponent } from './detail.component';
13
+
14
+import { appRoutes, appRoutingProviders } from './app.routes';
15
+
16
+@NgModule({
17
+ imports: [
18
+ BrowserModule,
19
+ FormsModule,
20
+ MaterialModule.forRoot(),
21
+ CovalentCoreModule.forRoot(),
22
+ CovalentHttpModule.forRoot(),
23
+ CovalentDynamicFormsModule.forRoot(),
24
+ appRoutes,
25
+ ],
26
+ declarations: [
27
+ HeroDetailComponent,
28
+ PackListComponent,
29
+ AppComponent
30
+ ],
31
+ bootstrap: [ AppComponent ],
32
+ providers: [
33
+ appRoutingProviders,
34
+ ]
35
+})
36
+
37
+export class AppModule { }
securis/src/main/webapp/src/app/app.routes.ts
....@@ -0,0 +1,26 @@
1
+import { Routes, RouterModule } from '@angular/router';
2
+
3
+import { AppComponent } from './app.component';
4
+import { PackListComponent } from './pack.list.component';
5
+
6
+const routes: Routes = [
7
+ {path: '', redirectTo: '/packs', pathMatch: 'full'},
8
+ {path: 'packs', component: PackListComponent },
9
+];
10
+/* {path: 'product', component: DashboardProductComponent, children: [
11
+ {path: '', component: ProductOverviewComponent},
12
+ {path: 'stats', component: ProductStatsComponent},
13
+ {path: 'features', children: [
14
+ {path: '', component: ProductFeaturesComponent},
15
+ {path: 'add', component: FeaturesFormComponent},
16
+ {path: ':id/delete', component: FeaturesFormComponent},
17
+ {path: ':id/edit', component: FeaturesFormComponent},
18
+ ]},
19
+ ]},
20
+ */
21
+
22
+export const appRoutingProviders: any[] = [
23
+
24
+];
25
+
26
+export const appRoutes: any = RouterModule.forRoot(routes, { useHash: true });
securis/src/main/webapp/src/app/detail.component.ts
....@@ -0,0 +1,21 @@
1
+import { Hero } from './hero';
2
+import { Component, Input } from '@angular/core';
3
+
4
+@Component({
5
+ selector: 'my-hero-detail',
6
+ template: `
7
+ <div *ngIf="hero">
8
+ <h2>{{hero.name}} details!</h2>
9
+ <div><label>id: </label>{{hero.id}}</div>
10
+ <div>
11
+ <label>name: </label>
12
+ <input [(ngModel)]="hero.name" placeholder="name"/>
13
+ </div>
14
+ </div>
15
+ `
16
+
17
+})
18
+export class HeroDetailComponent {
19
+ @Input()
20
+ hero: Hero;
21
+}
securis/src/main/webapp/src/app/hero.ts
....@@ -0,0 +1,4 @@
1
+export class Hero {
2
+ id: number;
3
+ name: string;
4
+}
securis/src/main/webapp/src/app/pack.list.component.html
....@@ -0,0 +1,112 @@
1
+<td-layout-nav-list #navList
2
+ logo="assets:covalent"
3
+ toolbarTitle="Email App"
4
+ class="light-blue-red"
5
+ [opened]="media.registerQuery('gt-sm') | async"
6
+ [mode] = "side"
7
+ [sidenavWidth]="(media.registerQuery('gt-xs') | async) ? '350px' : '100%'">
8
+ <div td-toolbar-content layout="row" layout-align="start center" flex>
9
+ <span flex *ngIf="!searchBox.searchVisible"></span>
10
+ <td-search-box #searchBox backIcon="arrow_back" class="pull-top-sm pull-bottom-sm" placeholder="Search here" flex>
11
+ </td-search-box>
12
+ <button md-icon-button [mdMenuTriggerFor]="notificationsMenu">
13
+ <td-notification-count color="accent" [notifications]="4">
14
+ <md-icon>apps</md-icon>
15
+ </td-notification-count>
16
+ </button>
17
+ <md-menu #notificationsMenu="mdMenu">
18
+ <td-menu>
19
+ <div td-menu-header class="md-subhead">Templates</div>
20
+ <md-nav-list dense>
21
+ <a md-list-item [routerLink]="['/templates']">
22
+ <md-icon md-list-avatar>system_update_alt</md-icon>
23
+ <h4 md-line><span class="text-wrap">Landing Page</span></h4>
24
+ <p md-line>a landing page template</p>
25
+ </a>
26
+ <md-divider></md-divider>
27
+ <a md-list-item [routerLink]="['/templates/dashboard']">
28
+ <md-icon md-list-avatar>dashboard</md-icon>
29
+ <h4 md-line><span class="text-wrap">Dashboard</span></h4>
30
+ <p md-line>an ngx-charts dashboard template</p>
31
+ </a>
32
+ <md-divider></md-divider>
33
+ <a md-list-item [routerLink]="['/templates/email']">
34
+ <md-icon md-list-avatar>email</md-icon>
35
+ <h4 md-line><span class="text-wrap">Email App</span></h4>
36
+ <p md-line>an email app template</p>
37
+ </a>
38
+ <md-divider></md-divider>
39
+ <a md-list-item [routerLink]="['/templates/editor']">
40
+ <md-icon md-list-avatar>view_array</md-icon>
41
+ <h4 md-line><span class="text-wrap">IDE Editor</span></h4>
42
+ <p md-line>an IDE text editor app template</p>
43
+ </a>
44
+ </md-nav-list>
45
+ <a md-button color="accent" td-menu-footer href="https://github.com/Teradata/covalent-quickstart/tree/develop/src/app/templates" target="_blank">
46
+ View Code
47
+ </a>
48
+ </td-menu>
49
+ </md-menu>
50
+ <a md-icon-button mdTooltip="View this code" href="https://github.com/Teradata/covalent-quickstart/tree/develop/src/app/templates" target="_blank"><md-icon svgIcon="assets:github"></md-icon></a>
51
+ </div>
52
+ <a md-fab td-sidenav-content color="accent" class="md-fab-position-bottom-right" style="bottom:20px; position: fixed;">
53
+ <md-icon>add</md-icon>
54
+ </a>
55
+ <md-nav-list td-sidenav-content >
56
+ <template let-i="index" let-last="last" let-hero ngFor [ngForOf]="heroes" [ngForTrackBy]="trackById">
57
+ <a md-list-item>
58
+ <img md-list-avatar src="http://lorempixel.com/40/40/people/{{i+1}}" />
59
+ <h3 md-line> {{hero.name}} </h3>
60
+ <p md-line> Hero ID is: {{hero.id}} </p>
61
+ <md-icon class="tc-amber-800">fiber_new</md-icon>
62
+ </a>
63
+ <md-divider *ngIf="!last" md-inset></md-divider>
64
+ </template>
65
+ </md-nav-list>
66
+ <md-card tdMediaToggle="gt-xs" [mediaClasses]="['side']">
67
+ <md-card-header>
68
+ <img md-card-avatar src="http://lorempixel.com/40/40/people/9" />
69
+ <md-card-title>Firstname Lastname</md-card-title>
70
+ <md-card-subtitle>Tuesday, January 3 2017 at 8:39 PM</md-card-subtitle>
71
+ <span flex></span>
72
+ <div class="pad-top pad-right">
73
+ <button md-icon-button><md-icon>reply</md-icon></button>
74
+ <button md-icon-button><md-icon>forward</md-icon></button>
75
+ <button md-icon-button><md-icon>more_vert</md-icon></button>
76
+ </div>
77
+ </md-card-header>
78
+ <md-divider></md-divider>
79
+ <div class="md-padding">
80
+ <p>
81
+ Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
82
+ </p>
83
+ <p>
84
+ Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring.
85
+ </p>
86
+ <p>
87
+ Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line.
88
+ </p>
89
+ <p>
90
+ Podcasting operational change management inside of workflows to establish a framework. Taking seamless key performance indicators offline to maximise the long tail. Keeping your eye on the ball while performing a deep dive on the start-up mentality to derive convergence on cross-platform integration.
91
+ </p>
92
+ <p>
93
+ Sincerly<br>-Kimmie
94
+ </p>
95
+ </div>
96
+ <md-divider></md-divider>
97
+ <div layout="row" layout-align="space-around center" class="pad">
98
+ <button md-button class="tc-grey-600">
99
+ <md-icon class="pull-bottom">reply</md-icon>
100
+ <div class="md-caption">Reply</div>
101
+ </button>
102
+ <button md-button class="tc-grey-600">
103
+ <md-icon class="pull-bottom">reply_all</md-icon>
104
+ <div class="md-caption">Reply All</div>
105
+ </button>
106
+ <button md-button class="tc-grey-600">
107
+ <md-icon class="pull-bottom">forward</md-icon>
108
+ <div class="md-caption">Forward</div>
109
+ </button>
110
+ </div>
111
+ </md-card>
112
+</td-layout-nav-list>
securis/src/main/webapp/src/app/pack.list.component.ts
....@@ -0,0 +1,82 @@
1
+import { Component, AfterViewInit } from '@angular/core';
2
+import { TdMediaService } from '@covalent/core';
3
+
4
+
5
+const HEROES: Hero[] = [
6
+ { id: 11, name: 'Mr. Nice' },
7
+ { id: 12, name: 'Narco' },
8
+ { id: 13, name: 'Bombasto' },
9
+ { id: 14, name: 'Celeritas' },
10
+ { id: 15, name: 'Magneta' },
11
+ { id: 16, name: 'RubberMan' },
12
+ { id: 17, name: 'Dynama' },
13
+ { id: 18, name: 'Dr IQ' },
14
+ { id: 19, name: 'Magma' },
15
+ { id: 20, name: 'Tornado' }
16
+];
17
+
18
+@Component({
19
+ selector: 'pack-list',
20
+ templateUrl: 'src/app/pack.list.component.html'
21
+})
22
+
23
+ /*`
24
+ <h2>My Heroes</h2>
25
+ <ul class="heroes">
26
+ <li *ngFor="let hero of heroes"
27
+ [class.selected]="hero === selectedHero"
28
+ (click)="onSelect(hero)">
29
+ <span class="badge">{{hero.id}}</span> {{hero.name}}
30
+ </li>
31
+ </ul>
32
+<div *ngIf="selectedHero">
33
+ <my-hero-detail [hero]="selectedHero"></my-hero-detail>
34
+</div>
35
+
36
+ `*/
37
+
38
+export class PackListComponent implements AfterViewInit {
39
+ routes: Object[] = [
40
+ {
41
+ title: 'Dashboard',
42
+ route: '/',
43
+ icon: 'dashboard',
44
+ }, {
45
+ title: 'Product Dashboard',
46
+ route: '/',
47
+ icon: 'view_quilt',
48
+ }, {
49
+ title: 'Product Logs',
50
+ route: '/',
51
+ icon: 'receipt',
52
+ }, {
53
+ title: 'Manage Users',
54
+ route: '/',
55
+ icon: 'people',
56
+ }, {
57
+ title: 'Covalent Templates',
58
+ route: '/',
59
+ icon: 'view_module',
60
+ },
61
+ ];
62
+
63
+ title = 'Tour of Heroes';
64
+ heroes = HEROES;
65
+ selectedHero: Hero;
66
+ hero: Hero = {
67
+ id: 1,
68
+ name: 'Windstorm'
69
+ };
70
+
71
+ constructor(public media: TdMediaService) {
72
+
73
+ }
74
+
75
+ onSelect(hero: Hero): void {
76
+ this.selectedHero = hero;
77
+ }
78
+
79
+ ngAfterViewInit(): void {
80
+ this.media.broadcast();
81
+ }
82
+}
securis/src/main/webapp/src/environments/environment.ts
securis/src/main/webapp/src/favicon.ico
Binary files differ
securis/src/main/webapp/src/main.ts
....@@ -0,0 +1,9 @@
1
+import 'rxjs/add/observable/throw';
2
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3
+
4
+import { AppModule } from './app/app.module';
5
+
6
+import { enableProdMode } from '@angular/core';
7
+enableProdMode();
8
+
9
+platformBrowserDynamic().bootstrapModule(AppModule);
securis/src/main/webapp/src/polifills.ts
....@@ -0,0 +1,70 @@
1
+/*tslint:disable*/
2
+/**
3
+ * This file includes polyfills needed by Angular and is loaded before the app.
4
+ * You can add your own extra polyfills to this file.
5
+ *
6
+ * This file is divided into 2 sections:
7
+ * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
8
+ * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
9
+ * file.
10
+ *
11
+ * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
12
+ * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
13
+ * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
14
+ *
15
+ * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
16
+ */
17
+
18
+/***************************************************************************************************
19
+ * BROWSER POLYFILLS
20
+ */
21
+
22
+/** IE9, IE10 and IE11 requires all of the following polyfills. **/
23
+// import 'core-js/es6/symbol';
24
+// import 'core-js/es6/object';
25
+// import 'core-js/es6/function';
26
+// import 'core-js/es6/parse-int';
27
+// import 'core-js/es6/parse-float';
28
+// import 'core-js/es6/number';
29
+// import 'core-js/es6/math';
30
+// import 'core-js/es6/string';
31
+// import 'core-js/es6/date';
32
+// import 'core-js/es6/array';
33
+// import 'core-js/es6/regexp';
34
+// import 'core-js/es6/map';
35
+// import 'core-js/es6/set';
36
+
37
+/** IE10 and IE11 requires the following for NgClass support on SVG elements */
38
+// import 'classlist.js'; // Run `npm install --save classlist.js`.
39
+
40
+/** IE10 and IE11 requires the following to support `@angular/animation`. */
41
+// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
42
+
43
+
44
+/** Evergreen browsers require these. **/
45
+import 'core-js/es6/reflect';
46
+import 'core-js/es7/reflect';
47
+
48
+
49
+/** ALL Firefox browsers require the following to support `@angular/animation`. **/
50
+// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
51
+
52
+
53
+
54
+/***************************************************************************************************
55
+ * Zone JS is required by Angular itself.
56
+ */
57
+import 'zone.js/dist/zone'; // Included with Angular-CLI.
58
+
59
+
60
+
61
+/***************************************************************************************************
62
+ * APPLICATION IMPORTS
63
+ */
64
+
65
+/**
66
+ * Date, currency, decimal and percent pipes.
67
+ * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
68
+ */
69
+// import 'intl'; // Run `npm install --save intl`.
70
+import 'hammerjs/hammer.min';
securis/src/main/webapp/src/tsconfig.json
....@@ -0,0 +1,13 @@
1
+{
2
+ "compilerOptions": {
3
+ "target": "es5",
4
+ "module": "commonjs",
5
+ "moduleResolution": "node",
6
+ "sourceMap": true,
7
+ "emitDecoratorMetadata": true,
8
+ "experimentalDecorators": true,
9
+ "lib": [ "es2015", "dom" ],
10
+ "noImplicitAny": true,
11
+ "suppressImplicitAnyIndexErrors": true
12
+ }
13
+}
securis/src/main/webapp/styles.css
....@@ -0,0 +1,5 @@
1
+h1 {
2
+ color: #369;
3
+ font-family: Arial, Helvetica, sans-serif;
4
+ font-size: 250%;
5
+}
securis/src/main/webapp/systemjs.config.extras.js
....@@ -0,0 +1,13 @@
1
+/**
2
+ * Add barrels and stuff
3
+ * Adjust as necessary for your application needs.
4
+ */
5
+// (function (global) {
6
+// System.config({
7
+// packages: {
8
+// // add packages here
9
+// }
10
+// });
11
+// })(this);
12
+
13
+
securis/src/main/webapp/systemjs.config.js
....@@ -0,0 +1,42 @@
1
+/**
2
+ * System configuration for Angular samples
3
+ * Adjust as necessary for your application needs.
4
+ */
5
+(function (global) {
6
+
7
+ var ANGULAR_LIBS = ['core', 'http', 'common', 'compiler', 'material', 'flex-layout', //
8
+ 'router', 'forms', 'platform-browser', 'platform-browser-dynamic', 'common'];
9
+ var COVALENT_LIBS = ['core', 'http', 'dynamic-forms'];
10
+ var mapping = {
11
+ // our app is within the app folder
12
+ main: 'src/main.js',
13
+ 'app': 'src/app',
14
+
15
+ // other libraries
16
+ 'rxjs': 'npm:rxjs',
17
+ 'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js'
18
+ }
19
+
20
+ ANGULAR_LIBS.forEach(function (libName) {
21
+ mapping['@angular/' + libName] = 'npm:@angular/' + libName + '/bundles/' + libName + '.umd.js';
22
+ });
23
+
24
+ COVALENT_LIBS.forEach(function (libName) {
25
+ mapping['@covalent/' + libName] = 'npm:@covalent/' + libName + '/' + libName + '.umd.js';
26
+ });
27
+
28
+ System.config({
29
+ paths: {
30
+ // paths serve as alias
31
+ 'npm:': 'node_modules/',
32
+ },
33
+ map: mapping,
34
+ packages: {
35
+ 'app': {
36
+ defaultExtension: 'js'
37
+ },
38
+ 'rxjs': { main: 'index' },
39
+ }
40
+ });
41
+
42
+})(this);
securis/src/main/webapp/tsconfig.json
....@@ -0,0 +1,4 @@
1
+{
2
+ "compilerOptions": {
3
+ }
4
+}
securis/src/main/webapp/tslint.json
....@@ -0,0 +1,93 @@
1
+{
2
+ "rules": {
3
+ "class-name": true,
4
+ "comment-format": [
5
+ true,
6
+ "check-space"
7
+ ],
8
+ "curly": true,
9
+ "eofline": true,
10
+ "forin": true,
11
+ "indent": [
12
+ true,
13
+ "spaces"
14
+ ],
15
+ "label-position": true,
16
+ "label-undefined": true,
17
+ "max-line-length": [
18
+ true,
19
+ 140
20
+ ],
21
+ "member-access": false,
22
+ "member-ordering": [
23
+ true,
24
+ "static-before-instance",
25
+ "variables-before-functions"
26
+ ],
27
+ "no-arg": true,
28
+ "no-bitwise": true,
29
+ "no-console": [
30
+ true,
31
+ "debug",
32
+ "info",
33
+ "time",
34
+ "timeEnd",
35
+ "trace"
36
+ ],
37
+ "no-construct": true,
38
+ "no-debugger": true,
39
+ "no-duplicate-key": true,
40
+ "no-duplicate-variable": true,
41
+ "no-empty": false,
42
+ "no-eval": true,
43
+ "no-inferrable-types": true,
44
+ "no-shadowed-variable": true,
45
+ "no-string-literal": false,
46
+ "no-switch-case-fall-through": true,
47
+ "no-trailing-whitespace": true,
48
+ "no-unused-expression": true,
49
+ "no-unused-variable": true,
50
+ "no-unreachable": true,
51
+ "no-use-before-declare": true,
52
+ "no-var-keyword": true,
53
+ "object-literal-sort-keys": false,
54
+ "one-line": [
55
+ true,
56
+ "check-open-brace",
57
+ "check-catch",
58
+ "check-else",
59
+ "check-whitespace"
60
+ ],
61
+ "quotemark": [
62
+ true,
63
+ "single"
64
+ ],
65
+ "radix": true,
66
+ "semicolon": [
67
+ "always"
68
+ ],
69
+ "triple-equals": [
70
+ true,
71
+ "allow-null-check"
72
+ ],
73
+ "typedef-whitespace": [
74
+ true,
75
+ {
76
+ "call-signature": "nospace",
77
+ "index-signature": "nospace",
78
+ "parameter": "nospace",
79
+ "property-declaration": "nospace",
80
+ "variable-declaration": "nospace"
81
+ }
82
+ ],
83
+ "variable-name": false,
84
+ "whitespace": [
85
+ true,
86
+ "check-branch",
87
+ "check-decl",
88
+ "check-operator",
89
+ "check-separator",
90
+ "check-type"
91
+ ]
92
+ }
93
+}