@gravitee/ui-components 3.24.5 → 3.25.0-fix-gvcode-15ce1d2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +1270 -0
  2. package/LICENSE.txt +202 -0
  3. package/README.md +195 -0
  4. package/assets/i18n/en.json +3 -0
  5. package/assets/i18n/fr.json +3 -0
  6. package/assets/icons/design.svg +1 -1
  7. package/package.json +1 -1
  8. package/src/.eslintrc.js +19 -0
  9. package/src/atoms/gv-autocomplete.js +156 -132
  10. package/src/atoms/gv-button.js +248 -73
  11. package/src/atoms/gv-checkbox.js +103 -45
  12. package/src/atoms/gv-date-picker-calendar.js +393 -312
  13. package/src/atoms/gv-date-picker-cell.js +81 -57
  14. package/src/atoms/gv-date-picker.js +319 -180
  15. package/src/atoms/gv-file-upload.js +195 -85
  16. package/src/atoms/gv-icon.js +34 -13
  17. package/src/atoms/gv-image.js +66 -31
  18. package/src/atoms/gv-input-message.js +37 -12
  19. package/src/atoms/gv-input.js +148 -117
  20. package/src/atoms/gv-link.js +125 -47
  21. package/src/atoms/gv-message.js +69 -18
  22. package/src/atoms/gv-metric.js +68 -19
  23. package/src/atoms/gv-relative-time.js +38 -67
  24. package/src/atoms/gv-select-native.js +215 -96
  25. package/src/atoms/gv-select.js +230 -110
  26. package/src/atoms/gv-spinner.js +26 -5
  27. package/src/atoms/gv-state.js +66 -25
  28. package/src/atoms/gv-switch.js +160 -40
  29. package/src/atoms/gv-tag.js +78 -26
  30. package/src/atoms/gv-text.js +83 -22
  31. package/src/charts/gv-chart-bar.js +18 -22
  32. package/src/charts/gv-chart-gauge.js +31 -28
  33. package/src/charts/gv-chart-histogram.js +10 -18
  34. package/src/charts/gv-chart-line.js +59 -70
  35. package/src/charts/gv-chart-map.js +42 -44
  36. package/src/charts/gv-chart-pie.js +14 -18
  37. package/src/index.js +0 -1
  38. package/src/lib/cron-expression.js +35 -40
  39. package/src/lib/date.js +1 -10
  40. package/src/lib/events.js +1 -3
  41. package/src/lib/http-client-schema-form.js +12 -13
  42. package/src/lib/http.js +56 -57
  43. package/src/lib/i18n.js +22 -30
  44. package/src/lib/item.js +12 -13
  45. package/src/lib/properties.js +42 -77
  46. package/src/lib/schema-form.js +5 -4
  47. package/src/lib/studio.js +60 -13
  48. package/src/lib/style.js +8 -8
  49. package/src/lib/text-format.js +7 -14
  50. package/src/lib/theme.js +5 -8
  51. package/src/lib/utils.js +18 -17
  52. package/src/mixins/chart-element.js +54 -31
  53. package/src/mixins/input-element.js +47 -60
  54. package/src/mixins/item-resource.js +32 -34
  55. package/src/mixins/keyboard-element.js +5 -6
  56. package/src/mixins/update-after-browser.js +1 -4
  57. package/src/mixins/with-resize-observer.js +13 -23
  58. package/src/mixins/with-skeleton-attribute.js +48 -54
  59. package/src/molecules/gv-card-full.js +147 -26
  60. package/src/molecules/gv-card-list.js +42 -13
  61. package/src/molecules/gv-card.js +91 -17
  62. package/src/molecules/gv-category-list.js +17 -6
  63. package/src/molecules/gv-category.js +103 -23
  64. package/src/molecules/gv-code.js +143 -81
  65. package/src/molecules/gv-confirm.js +71 -41
  66. package/src/molecules/gv-cron-editor.js +389 -143
  67. package/src/molecules/gv-dropdown-menu.js +46 -14
  68. package/src/molecules/gv-expandable.js +59 -31
  69. package/src/molecules/gv-expression-language.js +138 -176
  70. package/src/molecules/gv-identity-picture.js +65 -42
  71. package/src/molecules/gv-list.js +134 -42
  72. package/src/molecules/gv-metrics.js +49 -37
  73. package/src/molecules/gv-modal.js +95 -28
  74. package/src/molecules/gv-nav.js +75 -49
  75. package/src/molecules/gv-option.js +130 -57
  76. package/src/molecules/gv-plans.js +209 -86
  77. package/src/molecules/gv-popover.js +177 -57
  78. package/src/molecules/gv-promote.js +146 -28
  79. package/src/molecules/gv-rating-list.js +195 -69
  80. package/src/molecules/gv-rating.js +105 -52
  81. package/src/molecules/gv-row-expandable.js +11 -5
  82. package/src/molecules/gv-row.js +147 -21
  83. package/src/molecules/gv-stats.js +48 -23
  84. package/src/molecules/gv-stepper.js +187 -43
  85. package/src/molecules/gv-table.js +309 -199
  86. package/src/molecules/gv-tree.js +156 -33
  87. package/src/organisms/gv-documentation.js +128 -45
  88. package/src/organisms/gv-header.js +195 -37
  89. package/src/organisms/gv-http-client.js +168 -32
  90. package/src/organisms/gv-menu.js +158 -37
  91. package/src/organisms/gv-newsletter-subscription.js +189 -48
  92. package/src/organisms/gv-pagination.js +77 -49
  93. package/src/organisms/gv-properties.js +492 -271
  94. package/src/organisms/gv-resizable-views.js +259 -41
  95. package/src/organisms/gv-resources.js +275 -168
  96. package/src/organisms/gv-schema-form-array.js +159 -49
  97. package/src/organisms/gv-schema-form-control-object.js +73 -59
  98. package/src/organisms/gv-schema-form-control.js +134 -107
  99. package/src/organisms/gv-schema-form.js +324 -195
  100. package/src/organisms/gv-tabs.js +98 -66
  101. package/src/organisms/gv-user-menu.js +201 -36
  102. package/src/organisms/gv-vertical-menu.js +61 -20
  103. package/src/policy-studio/gv-flow-step.js +266 -105
  104. package/src/policy-studio/gv-flow.js +304 -125
  105. package/src/policy-studio/gv-policy-studio-menu.js +471 -157
  106. package/src/policy-studio/gv-policy-studio.js +777 -686
  107. package/src/styles/empty.js +20 -3
  108. package/src/styles/input.js +247 -3
  109. package/src/styles/link.js +16 -3
  110. package/src/styles/shapes.js +0 -1
  111. package/src/styles/skeleton.js +37 -3
  112. package/src/styles/zoom.js +24 -3
  113. package/src/theme/definition.json +1762 -0
  114. package/src/theme/gv-theme.js +60 -21
@@ -13,13 +13,16 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+
16
17
  import { css, LitElement, html } from 'lit';
17
18
  import { repeat } from 'lit/directives/repeat';
18
19
  import '../atoms/gv-icon';
19
20
  import { skeleton } from '../styles/skeleton';
20
21
  import { classMap } from 'lit/directives/class-map';
21
22
  import { i18n } from '../lib/i18n';
23
+
22
24
  const MAX_RATE = 5;
25
+
23
26
  /**
24
27
  * Rating component
25
28
  *
@@ -35,37 +38,86 @@ const MAX_RATE = 5;
35
38
  * @cssprop {Color} [--gv-rating--c=var(--gv-theme-color, #5a7684)] - Color
36
39
  * @cssprop {Length} [--gv-rating--s=13px] - Size
37
40
  */
38
-
39
41
  export class GvRating extends LitElement {
40
42
  static get properties() {
41
43
  return {
42
- value: {
43
- type: Number,
44
- reflect: true
45
- },
46
- count: {
47
- type: String
48
- },
49
- skeleton: {
50
- type: Boolean
51
- },
52
- readonly: {
53
- type: Boolean
54
- },
55
- _candidate: {
56
- type: Number,
57
- attribute: false
58
- },
59
- withDescription: {
60
- type: Boolean,
61
- attribute: 'with-description'
62
- }
44
+ value: { type: Number, reflect: true },
45
+ count: { type: String },
46
+ skeleton: { type: Boolean },
47
+ readonly: { type: Boolean },
48
+ _candidate: { type: Number, attribute: false },
49
+ withDescription: { type: Boolean, attribute: 'with-description' },
63
50
  };
64
51
  }
65
52
 
66
53
  static get styles() {
67
- return [// language=CSS
68
- css`:host{--gv-icon--c:var(--gv-rating--c, var(--gv-theme-color, #5a7684));--size:var(--gv-rating--s, 13px);--gv-icon--s:var(--size);font-size:var(--gv-theme-font-size-m,14px);cursor:default}.content,.rate{justify-content:space-evenly;display:inline-flex;align-items:flex-end;vertical-align:middle;height:100%}.info-title{font-size:var(--gv-theme-font-size-m,14px);line-height:16px;align-self:center;min-width:35px;text-align:center}.info-subtitle{font-size:var(--gv-theme-font-size-xs,10px);line-height:10px;opacity:.5;text-align:center}.icon{display:inline-flex;align-self:center;margin-right:calc(var(--size)/ 4);align-items:center}.edit{cursor:pointer}.edit gv-icon:hover{transform:translateY(-.5px)}gv-input{flex:1}.icon{min-height:30px}.description{min-width:100px;line-height:calc(var(--size) + 4px);margin:auto 4px}`, skeleton];
54
+ return [
55
+ // language=CSS
56
+ css`
57
+ :host {
58
+ --gv-icon--c: var(--gv-rating--c, var(--gv-theme-color, #5a7684));
59
+ --size: var(--gv-rating--s, 13px);
60
+ --gv-icon--s: var(--size);
61
+
62
+ font-size: var(--gv-theme-font-size-m, 14px);
63
+ cursor: default;
64
+ }
65
+
66
+ .content,
67
+ .rate {
68
+ justify-content: space-evenly;
69
+ display: inline-flex;
70
+ align-items: flex-end;
71
+ vertical-align: middle;
72
+ height: 100%;
73
+ }
74
+
75
+ .info-title {
76
+ font-size: var(--gv-theme-font-size-m, 14px);
77
+ line-height: 16px;
78
+ align-self: center;
79
+ min-width: 35px;
80
+ text-align: center;
81
+ }
82
+
83
+ .info-subtitle {
84
+ font-size: var(--gv-theme-font-size-xs, 10px);
85
+ line-height: 10px;
86
+ opacity: 0.5;
87
+ text-align: center;
88
+ }
89
+
90
+ .icon {
91
+ display: inline-flex;
92
+ align-self: center;
93
+ margin-right: calc(var(--size) / 4);
94
+ align-items: center;
95
+ }
96
+
97
+ .edit {
98
+ cursor: pointer;
99
+ }
100
+
101
+ .edit gv-icon:hover {
102
+ transform: translateY(-0.5px);
103
+ }
104
+
105
+ gv-input {
106
+ flex: 1;
107
+ }
108
+
109
+ .icon {
110
+ min-height: 30px;
111
+ }
112
+
113
+ .description {
114
+ min-width: 100px;
115
+ line-height: calc(var(--size) + 4px);
116
+ margin: auto 4px;
117
+ }
118
+ `,
119
+ skeleton,
120
+ ];
69
121
  }
70
122
 
71
123
  constructor() {
@@ -83,25 +135,20 @@ export class GvRating extends LitElement {
83
135
 
84
136
  _onMouseEnter(index) {
85
137
  this._candidate = index + 1;
86
-
87
138
  if (this.withDescription) {
88
139
  switch (this._candidate) {
89
140
  case 1:
90
141
  this.description = i18n('gv-rating.description-1');
91
142
  break;
92
-
93
143
  case 2:
94
144
  this.description = i18n('gv-rating.description-2');
95
145
  break;
96
-
97
146
  case 3:
98
147
  this.description = i18n('gv-rating.description-3');
99
148
  break;
100
-
101
149
  case 4:
102
150
  this.description = i18n('gv-rating.description-4');
103
151
  break;
104
-
105
152
  case 5:
106
153
  this.description = i18n('gv-rating.description-5');
107
154
  break;
@@ -111,7 +158,6 @@ export class GvRating extends LitElement {
111
158
 
112
159
  _onMouseOut() {
113
160
  this._candidate = -1;
114
-
115
161
  if (this.withDescription && !this.isSelected) {
116
162
  this.description = null;
117
163
  }
@@ -121,19 +167,14 @@ export class GvRating extends LitElement {
121
167
  this._candidate = -1;
122
168
  this.isSelected = true;
123
169
  this.value = index + 1;
124
- this.dispatchEvent(new Event('input'), {
125
- bubbles: true,
126
- cancelable: true
127
- });
170
+ this.dispatchEvent(new Event('input'), { bubbles: true, cancelable: true });
128
171
  }
129
172
 
130
173
  _getAverage() {
131
174
  const _value = parseFloat(this.value);
132
-
133
175
  if (_value >= 0 && _value <= MAX_RATE) {
134
176
  return _value;
135
177
  }
136
-
137
178
  return 0;
138
179
  }
139
180
 
@@ -141,13 +182,16 @@ export class GvRating extends LitElement {
141
182
  if (this.readonly) {
142
183
  return html`<gv-icon shape="general:${star}"></gv-icon>`;
143
184
  } else {
144
- return html`<gv-icon @mouseenter="${this._onMouseEnter.bind(this, index)}" @click="${this._onClick.bind(this, index)}" shape="general:${star}"></gv-icon>`;
185
+ return html`<gv-icon
186
+ @mouseenter=${this._onMouseEnter.bind(this, index)}
187
+ @click=${this._onClick.bind(this, index)}
188
+ shape="general:${star}"
189
+ ></gv-icon>`;
145
190
  }
146
191
  }
147
192
 
148
193
  render() {
149
194
  const average = this._getAverage();
150
-
151
195
  let trunc = average * 1;
152
196
 
153
197
  if (!this.readonly) {
@@ -155,7 +199,6 @@ export class GvRating extends LitElement {
155
199
  }
156
200
 
157
201
  const stars = [];
158
-
159
202
  for (let star = 1; star <= MAX_RATE; star += 1) {
160
203
  if (trunc >= star) {
161
204
  stars.push('star');
@@ -166,15 +209,28 @@ export class GvRating extends LitElement {
166
209
  }
167
210
  }
168
211
 
169
- return html` <div class="${classMap({
170
- skeleton: this.skeleton,
171
- edit: !this.readonly,
172
- content: true
173
- })}"> <div class="${classMap({
174
- content: true
175
- })}"> <div class="${classMap({
176
- rate: true
177
- })}"> <div class="icon" title="${this._getTitle()}"> ${this.withDescription ? html`<div class="description">${this.description}</div>` : ''} ${repeat(stars, star => star, (star, index) => html` ${this._renderStar(star, index)} `)} </div> ${this.count ? html`<div> <div class="info-title">${this.count || ''}</div> <div class="info-subtitle">${this._getCountTitle()}</div> </div>` : ''} </div> </div> </div> `;
212
+ return html`
213
+ <div class="${classMap({ skeleton: this.skeleton, edit: !this.readonly, content: true })}">
214
+ <div class="${classMap({ content: true })}">
215
+ <div class="${classMap({ rate: true })}">
216
+ <div class="icon" title="${this._getTitle()}">
217
+ ${this.withDescription ? html`<div class="description">${this.description}</div>` : ''}
218
+ ${repeat(
219
+ stars,
220
+ (star) => star,
221
+ (star, index) => html` ${this._renderStar(star, index)} `,
222
+ )}
223
+ </div>
224
+ ${this.count
225
+ ? html`<div>
226
+ <div class="info-title">${this.count || ''}</div>
227
+ <div class="info-subtitle">${this._getCountTitle()}</div>
228
+ </div>`
229
+ : ''}
230
+ </div>
231
+ </div>
232
+ </div>
233
+ `;
178
234
  }
179
235
 
180
236
  firstUpdated() {
@@ -188,13 +244,10 @@ export class GvRating extends LitElement {
188
244
  if (this.count > 1) {
189
245
  return i18n('gv-rating.notes');
190
246
  }
191
-
192
247
  return i18n('gv-rating.note');
193
248
  }
194
-
195
249
  return '';
196
250
  }
197
-
198
251
  }
252
+
199
253
  window.customElements.define('gv-rating', GvRating);
200
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yYXRpbmcuanMiXSwibmFtZXMiOlsiY3NzIiwiTGl0RWxlbWVudCIsImh0bWwiLCJyZXBlYXQiLCJza2VsZXRvbiIsImNsYXNzTWFwIiwiaTE4biIsIk1BWF9SQVRFIiwiR3ZSYXRpbmciLCJwcm9wZXJ0aWVzIiwidmFsdWUiLCJ0eXBlIiwiTnVtYmVyIiwicmVmbGVjdCIsImNvdW50IiwiU3RyaW5nIiwiQm9vbGVhbiIsInJlYWRvbmx5IiwiX2NhbmRpZGF0ZSIsImF0dHJpYnV0ZSIsIndpdGhEZXNjcmlwdGlvbiIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiaXNTZWxlY3RlZCIsIl9nZXRUaXRsZSIsIl9nZXRBdmVyYWdlIiwiX29uTW91c2VFbnRlciIsImluZGV4IiwiZGVzY3JpcHRpb24iLCJfb25Nb3VzZU91dCIsIl9vbkNsaWNrIiwiZGlzcGF0Y2hFdmVudCIsIkV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJfdmFsdWUiLCJwYXJzZUZsb2F0IiwiX3JlbmRlclN0YXIiLCJzdGFyIiwiYmluZCIsInJlbmRlciIsImF2ZXJhZ2UiLCJ0cnVuYyIsInN0YXJzIiwicHVzaCIsImVkaXQiLCJjb250ZW50IiwicmF0ZSIsIl9nZXRDb3VudFRpdGxlIiwiZmlyc3RVcGRhdGVkIiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLFNBQVNBLEdBQVQsRUFBY0MsVUFBZCxFQUEwQkMsSUFBMUIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxNQUFULFFBQXVCLHVCQUF2QjtBQUNBLE9BQU8sa0JBQVA7QUFDQSxTQUFTQyxRQUFULFFBQXlCLG9CQUF6QjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUVBLE1BQU1DLFFBQVEsR0FBRyxDQUFqQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLFFBQU4sU0FBdUJQLFVBQXZCLENBQWtDO0FBQ2xCLGFBQVZRLFVBQVUsR0FBRztBQUN0QixXQUFPO0FBQ0xDLE1BQUFBLEtBQUssRUFBRTtBQUFFQyxRQUFBQSxJQUFJLEVBQUVDLE1BQVI7QUFBZ0JDLFFBQUFBLE9BQU8sRUFBRTtBQUF6QixPQURGO0FBRUxDLE1BQUFBLEtBQUssRUFBRTtBQUFFSCxRQUFBQSxJQUFJLEVBQUVJO0FBQVIsT0FGRjtBQUdMWCxNQUFBQSxRQUFRLEVBQUU7QUFBRU8sUUFBQUEsSUFBSSxFQUFFSztBQUFSLE9BSEw7QUFJTEMsTUFBQUEsUUFBUSxFQUFFO0FBQUVOLFFBQUFBLElBQUksRUFBRUs7QUFBUixPQUpMO0FBS0xFLE1BQUFBLFVBQVUsRUFBRTtBQUFFUCxRQUFBQSxJQUFJLEVBQUVDLE1BQVI7QUFBZ0JPLFFBQUFBLFNBQVMsRUFBRTtBQUEzQixPQUxQO0FBTUxDLE1BQUFBLGVBQWUsRUFBRTtBQUFFVCxRQUFBQSxJQUFJLEVBQUVLLE9BQVI7QUFBaUJHLFFBQUFBLFNBQVMsRUFBRTtBQUE1QjtBQU5aLEtBQVA7QUFRRDs7QUFFZ0IsYUFBTkUsTUFBTSxHQUFHO0FBQ2xCLFdBQU8sQ0FDTDtBQUNBckIsSUFBQUEsR0FBRyxxekJBRkUsRUFpRUxJLFFBakVLLENBQVA7QUFtRUQ7O0FBRURrQixFQUFBQSxXQUFXLEdBQUc7QUFDWjtBQUNBLFNBQUtaLEtBQUwsR0FBYSxDQUFiO0FBQ0EsU0FBS0ksS0FBTCxHQUFhLENBQWI7QUFDQSxTQUFLRyxRQUFMLEdBQWdCLEtBQWhCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixDQUFDLENBQW5CO0FBQ0EsU0FBS0ssVUFBTCxHQUFrQixLQUFsQjtBQUNEOztBQUVEQyxFQUFBQSxTQUFTLEdBQUc7QUFDVixXQUFRLEdBQUUsS0FBS0MsV0FBTCxFQUFtQixJQUFHbEIsUUFBUyxFQUF6QztBQUNEOztBQUVEbUIsRUFBQUEsYUFBYSxDQUFDQyxLQUFELEVBQVE7QUFDbkIsU0FBS1QsVUFBTCxHQUFrQlMsS0FBSyxHQUFHLENBQTFCOztBQUNBLFFBQUksS0FBS1AsZUFBVCxFQUEwQjtBQUN4QixjQUFRLEtBQUtGLFVBQWI7QUFDRSxhQUFLLENBQUw7QUFDRSxlQUFLVSxXQUFMLEdBQW1CdEIsSUFBSSxDQUFDLHlCQUFELENBQXZCO0FBQ0E7O0FBQ0YsYUFBSyxDQUFMO0FBQ0UsZUFBS3NCLFdBQUwsR0FBbUJ0QixJQUFJLENBQUMseUJBQUQsQ0FBdkI7QUFDQTs7QUFDRixhQUFLLENBQUw7QUFDRSxlQUFLc0IsV0FBTCxHQUFtQnRCLElBQUksQ0FBQyx5QkFBRCxDQUF2QjtBQUNBOztBQUNGLGFBQUssQ0FBTDtBQUNFLGVBQUtzQixXQUFMLEdBQW1CdEIsSUFBSSxDQUFDLHlCQUFELENBQXZCO0FBQ0E7O0FBQ0YsYUFBSyxDQUFMO0FBQ0UsZUFBS3NCLFdBQUwsR0FBbUJ0QixJQUFJLENBQUMseUJBQUQsQ0FBdkI7QUFDQTtBQWZKO0FBaUJEO0FBQ0Y7O0FBRUR1QixFQUFBQSxXQUFXLEdBQUc7QUFDWixTQUFLWCxVQUFMLEdBQWtCLENBQUMsQ0FBbkI7O0FBQ0EsUUFBSSxLQUFLRSxlQUFMLElBQXdCLENBQUMsS0FBS0csVUFBbEMsRUFBOEM7QUFDNUMsV0FBS0ssV0FBTCxHQUFtQixJQUFuQjtBQUNEO0FBQ0Y7O0FBRURFLEVBQUFBLFFBQVEsQ0FBQ0gsS0FBRCxFQUFRO0FBQ2QsU0FBS1QsVUFBTCxHQUFrQixDQUFDLENBQW5CO0FBQ0EsU0FBS0ssVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtiLEtBQUwsR0FBYWlCLEtBQUssR0FBRyxDQUFyQjtBQUNBLFNBQUtJLGFBQUwsQ0FBbUIsSUFBSUMsS0FBSixDQUFVLE9BQVYsQ0FBbkIsRUFBdUM7QUFBRUMsTUFBQUEsT0FBTyxFQUFFLElBQVg7QUFBaUJDLE1BQUFBLFVBQVUsRUFBRTtBQUE3QixLQUF2QztBQUNEOztBQUVEVCxFQUFBQSxXQUFXLEdBQUc7QUFDWixVQUFNVSxNQUFNLEdBQUdDLFVBQVUsQ0FBQyxLQUFLMUIsS0FBTixDQUF6Qjs7QUFDQSxRQUFJeUIsTUFBTSxJQUFJLENBQVYsSUFBZUEsTUFBTSxJQUFJNUIsUUFBN0IsRUFBdUM7QUFDckMsYUFBTzRCLE1BQVA7QUFDRDs7QUFDRCxXQUFPLENBQVA7QUFDRDs7QUFFREUsRUFBQUEsV0FBVyxDQUFDQyxJQUFELEVBQU9YLEtBQVAsRUFBYztBQUN2QixRQUFJLEtBQUtWLFFBQVQsRUFBbUI7QUFDakIsYUFBT2YsSUFBSSwyQkFBMkJvQyxJQUEzQixjQUFYO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsYUFBT3BDLElBQUkseUJBQ0ssS0FBS3dCLGFBQUwsQ0FBbUJhLElBQW5CLENBQXdCLElBQXhCLEVBQThCWixLQUE5QixDQURMLGFBRUEsS0FBS0csUUFBTCxDQUFjUyxJQUFkLENBQW1CLElBQW5CLEVBQXlCWixLQUF6QixDQUZBLG9CQUdRVyxJQUhSLGNBQVg7QUFLRDtBQUNGOztBQUVERSxFQUFBQSxNQUFNLEdBQUc7QUFDUCxVQUFNQyxPQUFPLEdBQUcsS0FBS2hCLFdBQUwsRUFBaEI7O0FBQ0EsUUFBSWlCLEtBQUssR0FBR0QsT0FBTyxHQUFHLENBQXRCOztBQUVBLFFBQUksQ0FBQyxLQUFLeEIsUUFBVixFQUFvQjtBQUNsQnlCLE1BQUFBLEtBQUssR0FBRyxLQUFLeEIsVUFBTCxHQUFrQixDQUFDLENBQW5CLEdBQXVCLEtBQUtBLFVBQTVCLEdBQXlDdUIsT0FBakQ7QUFDRDs7QUFFRCxVQUFNRSxLQUFLLEdBQUcsRUFBZDs7QUFDQSxTQUFLLElBQUlMLElBQUksR0FBRyxDQUFoQixFQUFtQkEsSUFBSSxJQUFJL0IsUUFBM0IsRUFBcUMrQixJQUFJLElBQUksQ0FBN0MsRUFBZ0Q7QUFDOUMsVUFBSUksS0FBSyxJQUFJSixJQUFiLEVBQW1CO0FBQ2pCSyxRQUFBQSxLQUFLLENBQUNDLElBQU4sQ0FBVyxNQUFYO0FBQ0QsT0FGRCxNQUVPLElBQUlGLEtBQUssSUFBSUosSUFBSSxHQUFHLEdBQXBCLEVBQXlCO0FBQzlCSyxRQUFBQSxLQUFLLENBQUNDLElBQU4sQ0FBVyxXQUFYO0FBQ0QsT0FGTSxNQUVBO0FBQ0xELFFBQUFBLEtBQUssQ0FBQ0MsSUFBTixDQUFXLFNBQVg7QUFDRDtBQUNGOztBQUVELFdBQU8xQyxJQUFJLGdCQUNLRyxRQUFRLENBQUM7QUFBRUQsTUFBQUEsUUFBUSxFQUFFLEtBQUtBLFFBQWpCO0FBQTJCeUMsTUFBQUEsSUFBSSxFQUFFLENBQUMsS0FBSzVCLFFBQXZDO0FBQWlENkIsTUFBQUEsT0FBTyxFQUFFO0FBQTFELEtBQUQsQ0FEYixrQkFFT3pDLFFBQVEsQ0FBQztBQUFFeUMsTUFBQUEsT0FBTyxFQUFFO0FBQVgsS0FBRCxDQUZmLGtCQUdTekMsUUFBUSxDQUFDO0FBQUUwQyxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQUFELENBSGpCLCtCQUl3QixLQUFLdkIsU0FBTCxFQUp4QixNQUtDLEtBQUtKLGVBQUwsR0FBdUJsQixJQUFJLDRCQUE0QixLQUFLMEIsV0FBakMsUUFBM0IsR0FBa0YsRUFMbkYsSUFNQ3pCLE1BQU0sQ0FDTndDLEtBRE0sRUFFTEwsSUFBRCxJQUFVQSxJQUZKLEVBR04sQ0FBQ0EsSUFBRCxFQUFPWCxLQUFQLEtBQWlCekIsSUFBSSxJQUFJLEtBQUttQyxXQUFMLENBQWlCQyxJQUFqQixFQUF1QlgsS0FBdkIsQ0FBSixHQUhmLENBTlAsV0FZRCxLQUFLYixLQUFMLEdBQ0VaLElBQUksaUNBQ3dCLEtBQUtZLEtBQUwsSUFBYyxFQUR0QyxxQ0FFMkIsS0FBS2tDLGNBQUwsRUFGM0IsZUFETixHQUtFLEVBakJELHdCQUFYO0FBc0JEOztBQUVEQyxFQUFBQSxZQUFZLEdBQUc7QUFDYixRQUFJLENBQUMsS0FBS2hDLFFBQVYsRUFBb0I7QUFDbEIsV0FBS2lDLFVBQUwsQ0FBZ0JDLGFBQWhCLENBQThCLE9BQTlCLEVBQXVDQyxnQkFBdkMsQ0FBd0QsVUFBeEQsRUFBb0UsS0FBS3ZCLFdBQUwsQ0FBaUJVLElBQWpCLENBQXNCLElBQXRCLENBQXBFO0FBQ0Q7QUFDRjs7QUFFRFMsRUFBQUEsY0FBYyxHQUFHO0FBQ2YsUUFBSSxLQUFLbEMsS0FBVCxFQUFnQjtBQUNkLFVBQUksS0FBS0EsS0FBTCxHQUFhLENBQWpCLEVBQW9CO0FBQ2xCLGVBQU9SLElBQUksQ0FBQyxpQkFBRCxDQUFYO0FBQ0Q7O0FBQ0QsYUFBT0EsSUFBSSxDQUFDLGdCQUFELENBQVg7QUFDRDs7QUFDRCxXQUFPLEVBQVA7QUFDRDs7QUFqTnNDO0FBb056QytDLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsV0FBN0IsRUFBMEMvQyxRQUExQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGNzcywgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZXBlYXQnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1pY29uJztcbmltcG9ydCB7IHNrZWxldG9uIH0gZnJvbSAnLi4vc3R5bGVzL3NrZWxldG9uJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICcuLi9saWIvaTE4bic7XG5cbmNvbnN0IE1BWF9SQVRFID0gNTtcblxuLyoqXG4gKiBSYXRpbmcgY29tcG9uZW50XG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQGF0dHIge0xlbmd0aH0gdmFsdWUgLSBhdmVyYWdlIG9mIHJhdGluZ3MgYmV0d2VlbiAxIGFuZCA1XG4gKiBAYXR0ciB7U3RyaW5nfSBjb3VudCAtIHRvdGFsIGNvdW50IGZvciB0aGUgYXZlcmFnZVxuICogQGF0dHIge0Jvb2xlYW59IHNrZWxldG9uIC0gc2tlbGV0b24gbW9kZVxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5IC0gcmVhZG9ubHkgbW9kZVxuICogQGF0dHIge0Jvb2xlYW59IHdpdGgtZGVzY3JpcHRpb24gLSBpZiB0cnVlLCBzaG93IHJhdGUgZGVzY3JpcHRpb24gb24gaG92ZXJcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXJhdGluZy0tYz12YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCldIC0gQ29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXJhdGluZy0tcz0xM3B4XSAtIFNpemVcbiAqL1xuZXhwb3J0IGNsYXNzIEd2UmF0aW5nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBjb3VudDogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIHNrZWxldG9uOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIF9jYW5kaWRhdGU6IHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICB3aXRoRGVzY3JpcHRpb246IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnd2l0aC1kZXNjcmlwdGlvbicgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi1yYXRpbmctLWMsIHZhcigtLWd2LXRoZW1lLWNvbG9yLCAjNWE3Njg0KSk7XG4gICAgICAgICAgLS1zaXplOiB2YXIoLS1ndi1yYXRpbmctLXMsIDEzcHgpO1xuICAgICAgICAgIC0tZ3YtaWNvbi0tczogdmFyKC0tc2l6ZSk7XG5cbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS1tLCAxNHB4KTtcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGVudCxcbiAgICAgICAgLnJhdGUge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pbmZvLXRpdGxlIHtcbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS1tLCAxNHB4KTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgbWluLXdpZHRoOiAzNXB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pbmZvLXN1YnRpdGxlIHtcbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS14cywgMTBweCk7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEwcHg7XG4gICAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pY29uIHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKHZhcigtLXNpemUpIC8gNCk7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5lZGl0IHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZWRpdCBndi1pY29uOmhvdmVyIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTAuNXB4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWlucHV0IHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLmljb24ge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0tc2l6ZSkgKyA0cHgpO1xuICAgICAgICAgIG1hcmdpbjogYXV0byA0cHg7XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICBza2VsZXRvbixcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnZhbHVlID0gMDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgdGhpcy5fY2FuZGlkYXRlID0gLTE7XG4gICAgdGhpcy5pc1NlbGVjdGVkID0gZmFsc2U7XG4gIH1cblxuICBfZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuX2dldEF2ZXJhZ2UoKX0vJHtNQVhfUkFURX1gO1xuICB9XG5cbiAgX29uTW91c2VFbnRlcihpbmRleCkge1xuICAgIHRoaXMuX2NhbmRpZGF0ZSA9IGluZGV4ICsgMTtcbiAgICBpZiAodGhpcy53aXRoRGVzY3JpcHRpb24pIHtcbiAgICAgIHN3aXRjaCAodGhpcy5fY2FuZGlkYXRlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gaTE4bignZ3YtcmF0aW5nLmRlc2NyaXB0aW9uLTEnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBpMThuKCdndi1yYXRpbmcuZGVzY3JpcHRpb24tMicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGkxOG4oJ2d2LXJhdGluZy5kZXNjcmlwdGlvbi0zJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gaTE4bignZ3YtcmF0aW5nLmRlc2NyaXB0aW9uLTQnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBpMThuKCdndi1yYXRpbmcuZGVzY3JpcHRpb24tNScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vbk1vdXNlT3V0KCkge1xuICAgIHRoaXMuX2NhbmRpZGF0ZSA9IC0xO1xuICAgIGlmICh0aGlzLndpdGhEZXNjcmlwdGlvbiAmJiAhdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfb25DbGljayhpbmRleCkge1xuICAgIHRoaXMuX2NhbmRpZGF0ZSA9IC0xO1xuICAgIHRoaXMuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy52YWx1ZSA9IGluZGV4ICsgMTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gIH1cblxuICBfZ2V0QXZlcmFnZSgpIHtcbiAgICBjb25zdCBfdmFsdWUgPSBwYXJzZUZsb2F0KHRoaXMudmFsdWUpO1xuICAgIGlmIChfdmFsdWUgPj0gMCAmJiBfdmFsdWUgPD0gTUFYX1JBVEUpIHtcbiAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgX3JlbmRlclN0YXIoc3RhciwgaW5kZXgpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuIGh0bWxgPGd2LWljb24gc2hhcGU9XCJnZW5lcmFsOiR7c3Rhcn1cIj48L2d2LWljb24+YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGh0bWxgPGd2LWljb25cbiAgICAgICAgQG1vdXNlZW50ZXI9JHt0aGlzLl9vbk1vdXNlRW50ZXIuYmluZCh0aGlzLCBpbmRleCl9XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX29uQ2xpY2suYmluZCh0aGlzLCBpbmRleCl9XG4gICAgICAgIHNoYXBlPVwiZ2VuZXJhbDoke3N0YXJ9XCJcbiAgICAgID48L2d2LWljb24+YDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgYXZlcmFnZSA9IHRoaXMuX2dldEF2ZXJhZ2UoKTtcbiAgICBsZXQgdHJ1bmMgPSBhdmVyYWdlICogMTtcblxuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdHJ1bmMgPSB0aGlzLl9jYW5kaWRhdGUgPiAtMSA/IHRoaXMuX2NhbmRpZGF0ZSA6IGF2ZXJhZ2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnMgPSBbXTtcbiAgICBmb3IgKGxldCBzdGFyID0gMTsgc3RhciA8PSBNQVhfUkFURTsgc3RhciArPSAxKSB7XG4gICAgICBpZiAodHJ1bmMgPj0gc3Rhcikge1xuICAgICAgICBzdGFycy5wdXNoKCdzdGFyJyk7XG4gICAgICB9IGVsc2UgaWYgKHRydW5jID49IHN0YXIgLSAwLjcpIHtcbiAgICAgICAgc3RhcnMucHVzaCgnaGFsZi1zdGFyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFycy5wdXNoKCduby1zdGFyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcCh7IHNrZWxldG9uOiB0aGlzLnNrZWxldG9uLCBlZGl0OiAhdGhpcy5yZWFkb25seSwgY29udGVudDogdHJ1ZSB9KX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBjb250ZW50OiB0cnVlIH0pfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgcmF0ZTogdHJ1ZSB9KX1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCIgdGl0bGU9XCIke3RoaXMuX2dldFRpdGxlKCl9XCI+XG4gICAgICAgICAgICAgICR7dGhpcy53aXRoRGVzY3JpcHRpb24gPyBodG1sYDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj5gIDogJyd9XG4gICAgICAgICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgICAgICAgIHN0YXJzLFxuICAgICAgICAgICAgICAgIChzdGFyKSA9PiBzdGFyLFxuICAgICAgICAgICAgICAgIChzdGFyLCBpbmRleCkgPT4gaHRtbGAgJHt0aGlzLl9yZW5kZXJTdGFyKHN0YXIsIGluZGV4KX0gYCxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgJHt0aGlzLmNvdW50XG4gICAgICAgICAgICAgID8gaHRtbGA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tdGl0bGVcIj4ke3RoaXMuY291bnQgfHwgJyd9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1zdWJ0aXRsZVwiPiR7dGhpcy5fZ2V0Q291bnRUaXRsZSgpfTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgZmlyc3RVcGRhdGVkKCkge1xuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLl9vbk1vdXNlT3V0LmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRDb3VudFRpdGxlKCkge1xuICAgIGlmICh0aGlzLmNvdW50KSB7XG4gICAgICBpZiAodGhpcy5jb3VudCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGkxOG4oJ2d2LXJhdGluZy5ub3RlcycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGkxOG4oJ2d2LXJhdGluZy5ub3RlJyk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1yYXRpbmcnLCBHdlJhdGluZyk7XG4iXX0=
@@ -15,12 +15,12 @@
15
15
  */
16
16
  import { css } from 'lit';
17
17
  import { GvExpandable } from './gv-expandable';
18
+
18
19
  /**
19
20
  * Expandable row
20
21
  * @extends GvExpandable
21
22
  *
22
23
  */
23
-
24
24
  export class GvRowExpandable extends GvExpandable {
25
25
  constructor() {
26
26
  super();
@@ -30,10 +30,16 @@ export class GvRowExpandable extends GvExpandable {
30
30
  }
31
31
 
32
32
  static get styles() {
33
- return [...super.styles, // language=CSS
34
- css`.box:hover{background-color:var(--gv-theme-neutral-color,#f5f5f5)}`];
33
+ return [
34
+ ...super.styles,
35
+ // language=CSS
36
+ css`
37
+ .box:hover {
38
+ background-color: var(--gv-theme-neutral-color, #f5f5f5);
39
+ }
40
+ `,
41
+ ];
35
42
  }
36
-
37
43
  }
44
+
38
45
  window.customElements.define('gv-row-expandable', GvRowExpandable);
39
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yb3ctZXhwYW5kYWJsZS5qcyJdLCJuYW1lcyI6WyJjc3MiLCJHdkV4cGFuZGFibGUiLCJHdlJvd0V4cGFuZGFibGUiLCJjb25zdHJ1Y3RvciIsImljb24iLCJpY29uT3BlbmVkIiwiY2xpY2thYmxlIiwic3R5bGVzIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsUUFBb0IsS0FBcEI7QUFDQSxTQUFTQyxZQUFULFFBQTZCLGlCQUE3QjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxNQUFNQyxlQUFOLFNBQThCRCxZQUE5QixDQUEyQztBQUNoREUsRUFBQUEsV0FBVyxHQUFHO0FBQ1o7QUFDQSxTQUFLQyxJQUFMLEdBQVksaUJBQVo7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLGlCQUFsQjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsSUFBakI7QUFDRDs7QUFFZ0IsYUFBTkMsTUFBTSxHQUFHO0FBQ2xCLFdBQU8sQ0FDTCxHQUFHLE1BQU1BLE1BREosRUFFTDtBQUNBUCxJQUFBQSxHQUFHLG9FQUhFLENBQVA7QUFTRDs7QUFsQitDO0FBcUJsRFEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixtQkFBN0IsRUFBa0RSLGVBQWxEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBHdkV4cGFuZGFibGUgfSBmcm9tICcuL2d2LWV4cGFuZGFibGUnO1xuXG4vKipcbiAqIEV4cGFuZGFibGUgcm93XG4gKiAgQGV4dGVuZHMgR3ZFeHBhbmRhYmxlXG4gKlxuICovXG5leHBvcnQgY2xhc3MgR3ZSb3dFeHBhbmRhYmxlIGV4dGVuZHMgR3ZFeHBhbmRhYmxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmljb24gPSAnZ2VuZXJhbDpvdGhlciMyJztcbiAgICB0aGlzLmljb25PcGVuZWQgPSAnZ2VuZXJhbDpvdGhlciMyJztcbiAgICB0aGlzLmNsaWNrYWJsZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uc3VwZXIuc3R5bGVzLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIC5ib3g6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3IsICNmNWY1ZjUpO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3Ytcm93LWV4cGFuZGFibGUnLCBHdlJvd0V4cGFuZGFibGUpO1xuIl19
@@ -21,6 +21,7 @@ import { i18n } from '../lib/i18n';
21
21
  import { ItemResource } from '../mixins/item-resource';
22
22
  import { withResizeObserver } from '../mixins/with-resize-observer';
23
23
  import { getOwner, getTitle, getDescription, getVersion } from '../lib/item';
24
+
24
25
  /**
25
26
  * Row component
26
27
  *
@@ -36,27 +37,140 @@ import { getOwner, getTitle, getDescription, getVersion } from '../lib/item';
36
37
  * @cssprop {Length} [--gv-row-image--w=35px] - Image width
37
38
  *
38
39
  */
39
-
40
40
  export class GvRow extends withResizeObserver(ItemResource(LitElement)) {
41
41
  static get styles() {
42
- return [...super.styles, // language=CSS
43
- css`:host{box-sizing:border-box;cursor:pointer;--hover-bgc:var(--gv-row-hover--bgc, var(--gv-theme-neutral-color-lighter, #fafafa));--trf-ty:var(--gv-row-hover--trf-ty, 0px);display:block}:host([_invisible]){display:none}.row{padding:12px}.row:hover{-webkit-transform:-webkit-translateY(var(--trf-ty));transform:translateY(var(--trf-ty));background-color:var(--hover-bgc)}.row:not(.error){display:grid;grid-template-columns:calc(var(--gv-row-image--w,35px) + 5px) auto fit-content(20%);grid-gap:10px;align-items:center}:host([w-lt-450]) .meta{display:none}.row .name{margin-right:15px}.row .meta__owner,.row .name{margin-bottom:5px}.row .version{color:var(--gv-theme-neutral-color-dark,#d9d9d9)}.row .description{--lh:1.4rem;--max-lines:2;max-height:calc(var(--lh) * var(--max-lines));line-height:var(--lh);overflow:hidden;text-overflow:ellipsis;text-after-overflow:'...'}.row .meta{display:flex;flex-direction:column;align-items:flex-end}.row .meta__owner{--gv-icon--c:var(--gv-theme-neutral-color-dark, #d9d9d9);--gv-icon--s:16px;color:var(--gv-theme-neutral-color-dark,#d9d9d9);display:flex}.row .meta__tags{display:flex;flex-direction:row;flex-wrap:wrap}.skeleton{transition:.5s;min-height:30px;align-self:start}.error{cursor:default;text-align:center}gv-identity-picture{height:var(--gv-row-image--h,35px);width:var(--gv-row-image--w,35px);border-radius:20px;--gv-image--of:contain;align-self:baseline}h3{margin:0}.row>.group{display:flex;flex-direction:column;margin:0 5px;width:100%;flex:1}.title{display:flex;flex-direction:row}`, link, skeleton];
42
+ return [
43
+ ...super.styles,
44
+ // language=CSS
45
+ css`
46
+ :host {
47
+ box-sizing: border-box;
48
+ cursor: pointer;
49
+ --hover-bgc: var(--gv-row-hover--bgc, var(--gv-theme-neutral-color-lighter, #fafafa));
50
+ --trf-ty: var(--gv-row-hover--trf-ty, 0px);
51
+ display: block;
52
+ }
53
+
54
+ :host([_invisible]) {
55
+ display: none;
56
+ }
57
+
58
+ .row {
59
+ padding: 12px;
60
+ }
61
+
62
+ .row:hover {
63
+ -webkit-transform: -webkit-translateY(var(--trf-ty));
64
+ transform: translateY(var(--trf-ty));
65
+ background-color: var(--hover-bgc);
66
+ }
67
+
68
+ .row:not(.error) {
69
+ display: grid;
70
+ grid-template-columns: calc(var(--gv-row-image--w, 35px) + 5px) auto fit-content(20%);
71
+ grid-gap: 10px;
72
+ align-items: center;
73
+ }
74
+
75
+ :host([w-lt-450]) .meta {
76
+ display: none;
77
+ }
78
+
79
+ .row .name {
80
+ margin-right: 15px;
81
+ }
82
+
83
+ .row .name,
84
+ .row .meta__owner {
85
+ margin-bottom: 5px;
86
+ }
87
+
88
+ .row .version {
89
+ color: var(--gv-theme-neutral-color-dark, #d9d9d9);
90
+ }
91
+
92
+ .row .description {
93
+ --lh: 1.4rem;
94
+ --max-lines: 2;
95
+ max-height: calc(var(--lh) * var(--max-lines));
96
+ line-height: var(--lh);
97
+ overflow: hidden;
98
+ text-overflow: ellipsis;
99
+ text-after-overflow: '...';
100
+ }
101
+
102
+ .row .meta {
103
+ display: flex;
104
+ flex-direction: column;
105
+ align-items: flex-end;
106
+ }
107
+
108
+ .row .meta__owner {
109
+ --gv-icon--c: var(--gv-theme-neutral-color-dark, #d9d9d9);
110
+ --gv-icon--s: 16px;
111
+ color: var(--gv-theme-neutral-color-dark, #d9d9d9);
112
+ display: flex;
113
+ }
114
+
115
+ .row .meta__tags {
116
+ display: flex;
117
+ flex-direction: row;
118
+ flex-wrap: wrap;
119
+ }
120
+
121
+ .skeleton {
122
+ transition: 0.5s;
123
+ min-height: 30px;
124
+ align-self: start;
125
+ }
126
+
127
+ .error {
128
+ cursor: default;
129
+ text-align: center;
130
+ }
131
+
132
+ gv-identity-picture {
133
+ height: var(--gv-row-image--h, 35px);
134
+ width: var(--gv-row-image--w, 35px);
135
+ border-radius: 20px;
136
+ --gv-image--of: contain;
137
+ align-self: baseline;
138
+ }
139
+
140
+ h3 {
141
+ margin: 0;
142
+ }
143
+
144
+ .row > .group {
145
+ display: flex;
146
+ flex-direction: column;
147
+ margin: 0 5px;
148
+ width: 100%;
149
+ flex: 1;
150
+ }
151
+
152
+ .title {
153
+ display: flex;
154
+ flex-direction: row;
155
+ }
156
+ `,
157
+ link,
158
+ skeleton,
159
+ ];
44
160
  }
45
161
 
46
162
  static get properties() {
47
- return { ...super.properties,
48
-
163
+ return {
164
+ ...super.properties,
49
165
  /** @required */
50
- small: {
51
- type: Boolean
52
- }
166
+ small: { type: Boolean },
53
167
  };
54
168
  }
55
169
 
56
170
  constructor() {
57
171
  super();
58
172
  this.breakpoints = {
59
- width: [450]
173
+ width: [450],
60
174
  };
61
175
  this.small = false;
62
176
  }
@@ -65,20 +179,32 @@ export class GvRow extends withResizeObserver(ItemResource(LitElement)) {
65
179
  const classes = {
66
180
  row: true,
67
181
  link: true,
68
- error: !this._skeleton && (this._error || this._empty)
182
+ error: !this._skeleton && (this._error || this._empty),
69
183
  };
70
184
  const owner = getOwner(this._item);
71
- return html` <div class="${classMap(classes)}"> ${!this._skeleton && (this._error || this._empty) ? html`<div class="message">${this._error ? i18n('gv-row.error') : i18n('gv-row.empty')}</div>` : html` <div class="${classMap({
72
- skeleton: this._skeleton
73
- })}">${this._renderImage()}</div> <div class="${classMap({
74
- group: true,
75
- skeleton: this._skeleton
76
- })}"> <div class="title"> <h3 class="name">${getTitle(this._item)}</h3> <div class="version">${getVersion(this._item)}</div> </div> <div class="description">${getDescription(this._item)}</div> </div> <div class="${classMap({
77
- meta: true,
78
- skeleton: this._skeleton
79
- })}"> <div class="meta__owner"> ${owner != null && owner.trim().length > 0 ? html`<gv-icon shape="general:user" size="8px"></gv-icon>${owner}` : ''} </div> ${this.small !== true ? html`<div class="meta__tags">${this._renderLabels()}</div>` : ''} </div> `} </div> `;
185
+ return html`
186
+ <div class=${classMap(classes)}>
187
+ ${!this._skeleton && (this._error || this._empty)
188
+ ? html`<div class="message">${this._error ? i18n('gv-row.error') : i18n('gv-row.empty')}</div>`
189
+ : html`
190
+ <div class="${classMap({ skeleton: this._skeleton })}">${this._renderImage()}</div>
191
+ <div class="${classMap({ group: true, skeleton: this._skeleton })}">
192
+ <div class="title">
193
+ <h3 class="name">${getTitle(this._item)}</h3>
194
+ <div class="version">${getVersion(this._item)}</div>
195
+ </div>
196
+ <div class="description">${getDescription(this._item)}</div>
197
+ </div>
198
+ <div class="${classMap({ meta: true, skeleton: this._skeleton })}">
199
+ <div class="meta__owner">
200
+ ${owner != null && owner.trim().length > 0 ? html`<gv-icon shape="general:user" size="8px"></gv-icon>${owner}` : ''}
201
+ </div>
202
+ ${this.small !== true ? html`<div class="meta__tags">${this._renderLabels()}</div>` : ''}
203
+ </div>
204
+ `}
205
+ </div>
206
+ `;
80
207
  }
81
-
82
208
  }
209
+
83
210
  window.customElements.define('gv-row', GvRow);
84
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yb3cuanMiXSwibmFtZXMiOlsiY3NzIiwiaHRtbCIsIkxpdEVsZW1lbnQiLCJza2VsZXRvbiIsImxpbmsiLCJjbGFzc01hcCIsImkxOG4iLCJJdGVtUmVzb3VyY2UiLCJ3aXRoUmVzaXplT2JzZXJ2ZXIiLCJnZXRPd25lciIsImdldFRpdGxlIiwiZ2V0RGVzY3JpcHRpb24iLCJnZXRWZXJzaW9uIiwiR3ZSb3ciLCJzdHlsZXMiLCJwcm9wZXJ0aWVzIiwic21hbGwiLCJ0eXBlIiwiQm9vbGVhbiIsImNvbnN0cnVjdG9yIiwiYnJlYWtwb2ludHMiLCJ3aWR0aCIsInJlbmRlciIsImNsYXNzZXMiLCJyb3ciLCJlcnJvciIsIl9za2VsZXRvbiIsIl9lcnJvciIsIl9lbXB0eSIsIm93bmVyIiwiX2l0ZW0iLCJfcmVuZGVySW1hZ2UiLCJncm91cCIsIm1ldGEiLCJ0cmltIiwibGVuZ3RoIiwiX3JlbmRlckxhYmVscyIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxHQUFULEVBQWNDLElBQWQsRUFBb0JDLFVBQXBCLFFBQXNDLEtBQXRDO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QixvQkFBekI7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGdCQUFyQjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUNBLFNBQVNDLFlBQVQsUUFBNkIseUJBQTdCO0FBQ0EsU0FBU0Msa0JBQVQsUUFBbUMsZ0NBQW5DO0FBQ0EsU0FBU0MsUUFBVCxFQUFtQkMsUUFBbkIsRUFBNkJDLGNBQTdCLEVBQTZDQyxVQUE3QyxRQUErRCxhQUEvRDtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLEtBQU4sU0FBb0JMLGtCQUFrQixDQUFDRCxZQUFZLENBQUNMLFVBQUQsQ0FBYixDQUF0QyxDQUFpRTtBQUNyRCxhQUFOWSxNQUFNLEdBQUc7QUFDbEIsV0FBTyxDQUNMLEdBQUcsTUFBTUEsTUFESixFQUVMO0FBQ0FkLElBQUFBLEdBQUcsOC9DQUhFLEVBbUhMSSxJQW5ISyxFQW9ITEQsUUFwSEssQ0FBUDtBQXNIRDs7QUFFb0IsYUFBVlksVUFBVSxHQUFHO0FBQ3RCLFdBQU8sRUFDTCxHQUFHLE1BQU1BLFVBREo7O0FBRUw7QUFDQUMsTUFBQUEsS0FBSyxFQUFFO0FBQUVDLFFBQUFBLElBQUksRUFBRUM7QUFBUjtBQUhGLEtBQVA7QUFLRDs7QUFFREMsRUFBQUEsV0FBVyxHQUFHO0FBQ1o7QUFDQSxTQUFLQyxXQUFMLEdBQW1CO0FBQ2pCQyxNQUFBQSxLQUFLLEVBQUUsQ0FBQyxHQUFEO0FBRFUsS0FBbkI7QUFHQSxTQUFLTCxLQUFMLEdBQWEsS0FBYjtBQUNEOztBQUVETSxFQUFBQSxNQUFNLEdBQUc7QUFDUCxVQUFNQyxPQUFPLEdBQUc7QUFDZEMsTUFBQUEsR0FBRyxFQUFFLElBRFM7QUFFZHBCLE1BQUFBLElBQUksRUFBRSxJQUZRO0FBR2RxQixNQUFBQSxLQUFLLEVBQUUsQ0FBQyxLQUFLQyxTQUFOLEtBQW9CLEtBQUtDLE1BQUwsSUFBZSxLQUFLQyxNQUF4QztBQUhPLEtBQWhCO0FBS0EsVUFBTUMsS0FBSyxHQUFHcEIsUUFBUSxDQUFDLEtBQUtxQixLQUFOLENBQXRCO0FBQ0EsV0FBTzdCLElBQUksZ0JBQ0lJLFFBQVEsQ0FBQ2tCLE9BQUQsQ0FEWixNQUVMLENBQUMsS0FBS0csU0FBTixLQUFvQixLQUFLQyxNQUFMLElBQWUsS0FBS0MsTUFBeEMsSUFDRTNCLElBQUksd0JBQXdCLEtBQUswQixNQUFMLEdBQWNyQixJQUFJLENBQUMsY0FBRCxDQUFsQixHQUFxQ0EsSUFBSSxDQUFDLGNBQUQsQ0FBakUsUUFETixHQUVFTCxJQUFJLGdCQUNZSSxRQUFRLENBQUM7QUFBRUYsTUFBQUEsUUFBUSxFQUFFLEtBQUt1QjtBQUFqQixLQUFELENBRHBCLEtBQ3VELEtBQUtLLFlBQUwsRUFEdkQsc0JBRVkxQixRQUFRLENBQUM7QUFBRTJCLE1BQUFBLEtBQUssRUFBRSxJQUFUO0FBQWU3QixNQUFBQSxRQUFRLEVBQUUsS0FBS3VCO0FBQTlCLEtBQUQsQ0FGcEIsMkNBSXFCaEIsUUFBUSxDQUFDLEtBQUtvQixLQUFOLENBSjdCLDhCQUt5QmxCLFVBQVUsQ0FBQyxLQUFLa0IsS0FBTixDQUxuQywwQ0FPMkJuQixjQUFjLENBQUMsS0FBS21CLEtBQU4sQ0FQekMsNkJBU1l6QixRQUFRLENBQUM7QUFBRTRCLE1BQUFBLElBQUksRUFBRSxJQUFSO0FBQWM5QixNQUFBQSxRQUFRLEVBQUUsS0FBS3VCO0FBQTdCLEtBQUQsQ0FUcEIsZ0NBV0lHLEtBQUssSUFBSSxJQUFULElBQWlCQSxLQUFLLENBQUNLLElBQU4sR0FBYUMsTUFBYixHQUFzQixDQUF2QyxHQUEyQ2xDLElBQUksc0RBQXNENEIsS0FBdEQsRUFBL0MsR0FBK0csRUFYbkgsV0FhRSxLQUFLYixLQUFMLEtBQWUsSUFBZixHQUFzQmYsSUFBSSwyQkFBMkIsS0FBS21DLGFBQUwsRUFBM0IsUUFBMUIsR0FBb0YsRUFidEYsVUFKRCxVQUFYO0FBc0JEOztBQXZLcUU7QUEwS3hFQyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLFFBQTdCLEVBQXVDMUIsS0FBdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHNrZWxldG9uIH0gZnJvbSAnLi4vc3R5bGVzL3NrZWxldG9uJztcbmltcG9ydCB7IGxpbmsgfSBmcm9tICcuLi9zdHlsZXMvbGluayc7XG5pbXBvcnQgeyBjbGFzc01hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NsYXNzLW1hcCc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnLi4vbGliL2kxOG4nO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbWl4aW5zL2l0ZW0tcmVzb3VyY2UnO1xuaW1wb3J0IHsgd2l0aFJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vbWl4aW5zL3dpdGgtcmVzaXplLW9ic2VydmVyJztcbmltcG9ydCB7IGdldE93bmVyLCBnZXRUaXRsZSwgZ2V0RGVzY3JpcHRpb24sIGdldFZlcnNpb24gfSBmcm9tICcuLi9saWIvaXRlbSc7XG5cbi8qKlxuICogUm93IGNvbXBvbmVudFxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBhdHRyIHtQcm9taXNlPGFueT59IGl0ZW0gLSBBbiBpdGVtLlxuICogQGF0dHIge0Jvb2xlYW59IHNtYWxsIC0gV2hlbiB0cnVlLCBub3QgZGlzcGxheSBsYWJlbHNcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXJvdy1ob3Zlci0tYmdjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlciwgI2ZhZmFmYSldIC0gSG9vdmVyIGJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXJvdy1ob3Zlci0tdHJmLXR5PTBweF0gLSBIb292ZXIgdHJhbnNmb3JtIHRyYW5zbGF0ZVlcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXJvdy1pbWFnZS0taD0zNXB4XSAtIEltYWdlIGhlaWdodFxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3Ytcm93LWltYWdlLS13PTM1cHhdIC0gSW1hZ2Ugd2lkdGhcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlJvdyBleHRlbmRzIHdpdGhSZXNpemVPYnNlcnZlcihJdGVtUmVzb3VyY2UoTGl0RWxlbWVudCkpIHtcbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnN1cGVyLnN0eWxlcyxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgLS1ob3Zlci1iZ2M6IHZhcigtLWd2LXJvdy1ob3Zlci0tYmdjLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXIsICNmYWZhZmEpKTtcbiAgICAgICAgICAtLXRyZi10eTogdmFyKC0tZ3Ytcm93LWhvdmVyLS10cmYtdHksIDBweCk7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cblxuICAgICAgICA6aG9zdChbX2ludmlzaWJsZV0pIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyB7XG4gICAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yb3c6aG92ZXIge1xuICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiAtd2Via2l0LXRyYW5zbGF0ZVkodmFyKC0tdHJmLXR5KSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLXRyZi10eSkpO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWhvdmVyLWJnYyk7XG4gICAgICAgIH1cblxuICAgICAgICAucm93Om5vdCguZXJyb3IpIHtcbiAgICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogY2FsYyh2YXIoLS1ndi1yb3ctaW1hZ2UtLXcsIDM1cHgpICsgNXB4KSBhdXRvIGZpdC1jb250ZW50KDIwJSk7XG4gICAgICAgICAgZ3JpZC1nYXA6IDEwcHg7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIDpob3N0KFt3LWx0LTQ1MF0pIC5tZXRhIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyAubmFtZSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyAubmFtZSxcbiAgICAgICAgLnJvdyAubWV0YV9fb3duZXIge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yb3cgLnZlcnNpb24ge1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNkOWQ5ZDkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgIC0tbGg6IDEuNHJlbTtcbiAgICAgICAgICAtLW1heC1saW5lczogMjtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKHZhcigtLWxoKSAqIHZhcigtLW1heC1saW5lcykpO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saCk7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgICB0ZXh0LWFmdGVyLW92ZXJmbG93OiAnLi4uJztcbiAgICAgICAgfVxuXG4gICAgICAgIC5yb3cgLm1ldGEge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAucm93IC5tZXRhX19vd25lciB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNkOWQ5ZDkpO1xuICAgICAgICAgIC0tZ3YtaWNvbi0tczogMTZweDtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1kYXJrLCAjZDlkOWQ5KTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyAubWV0YV9fdGFncyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5za2VsZXRvbiB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogMC41cztcbiAgICAgICAgICBtaW4taGVpZ2h0OiAzMHB4O1xuICAgICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLmVycm9yIHtcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaWRlbnRpdHktcGljdHVyZSB7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1ndi1yb3ctaW1hZ2UtLWgsIDM1cHgpO1xuICAgICAgICAgIHdpZHRoOiB2YXIoLS1ndi1yb3ctaW1hZ2UtLXcsIDM1cHgpO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgICAgLS1ndi1pbWFnZS0tb2Y6IGNvbnRhaW47XG4gICAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7XG4gICAgICAgIH1cblxuICAgICAgICBoMyB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyA+IC5ncm91cCB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIG1hcmdpbjogMCA1cHg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgbGluayxcbiAgICAgIHNrZWxldG9uLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLnByb3BlcnRpZXMsXG4gICAgICAvKiogQHJlcXVpcmVkICovXG4gICAgICBzbWFsbDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5icmVha3BvaW50cyA9IHtcbiAgICAgIHdpZHRoOiBbNDUwXSxcbiAgICB9O1xuICAgIHRoaXMuc21hbGwgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgcm93OiB0cnVlLFxuICAgICAgbGluazogdHJ1ZSxcbiAgICAgIGVycm9yOiAhdGhpcy5fc2tlbGV0b24gJiYgKHRoaXMuX2Vycm9yIHx8IHRoaXMuX2VtcHR5KSxcbiAgICB9O1xuICAgIGNvbnN0IG93bmVyID0gZ2V0T3duZXIodGhpcy5faXRlbSk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPSR7Y2xhc3NNYXAoY2xhc3Nlcyl9PlxuICAgICAgICAkeyF0aGlzLl9za2VsZXRvbiAmJiAodGhpcy5fZXJyb3IgfHwgdGhpcy5fZW1wdHkpXG4gICAgICAgICAgPyBodG1sYDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+JHt0aGlzLl9lcnJvciA/IGkxOG4oJ2d2LXJvdy5lcnJvcicpIDogaTE4bignZ3Ytcm93LmVtcHR5Jyl9PC9kaXY+YFxuICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBza2VsZXRvbjogdGhpcy5fc2tlbGV0b24gfSl9XCI+JHt0aGlzLl9yZW5kZXJJbWFnZSgpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcCh7IGdyb3VwOiB0cnVlLCBza2VsZXRvbjogdGhpcy5fc2tlbGV0b24gfSl9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJuYW1lXCI+JHtnZXRUaXRsZSh0aGlzLl9pdGVtKX08L2gzPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnNpb25cIj4ke2dldFZlcnNpb24odGhpcy5faXRlbSl9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+JHtnZXREZXNjcmlwdGlvbih0aGlzLl9pdGVtKX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgbWV0YTogdHJ1ZSwgc2tlbGV0b246IHRoaXMuX3NrZWxldG9uIH0pfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRhX19vd25lclwiPlxuICAgICAgICAgICAgICAgICAgJHtvd25lciAhPSBudWxsICYmIG93bmVyLnRyaW0oKS5sZW5ndGggPiAwID8gaHRtbGA8Z3YtaWNvbiBzaGFwZT1cImdlbmVyYWw6dXNlclwiIHNpemU9XCI4cHhcIj48L2d2LWljb24+JHtvd25lcn1gIDogJyd9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgJHt0aGlzLnNtYWxsICE9PSB0cnVlID8gaHRtbGA8ZGl2IGNsYXNzPVwibWV0YV9fdGFnc1wiPiR7dGhpcy5fcmVuZGVyTGFiZWxzKCl9PC9kaXY+YCA6ICcnfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGB9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXJvdycsIEd2Um93KTtcbiJdfQ==