ngrx-entity-crud 12.0.6-beta.2

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 (184) hide show
  1. package/README.md +259 -0
  2. package/bundles/ngrx-entity-crud.umd.js +1829 -0
  3. package/bundles/ngrx-entity-crud.umd.js.map +1 -0
  4. package/esm2015/lib/actions.js +88 -0
  5. package/esm2015/lib/base-crud-gql.service.js +71 -0
  6. package/esm2015/lib/base-crud.service.js +136 -0
  7. package/esm2015/lib/create_adapter.js +14 -0
  8. package/esm2015/lib/effect.js +467 -0
  9. package/esm2015/lib/entity_state.js +23 -0
  10. package/esm2015/lib/ibase-crud-service.js +2 -0
  11. package/esm2015/lib/j-ngrx-filter.js +133 -0
  12. package/esm2015/lib/models.js +17 -0
  13. package/esm2015/lib/reducer.js +353 -0
  14. package/esm2015/lib/state_selectors.js +56 -0
  15. package/esm2015/lib/utils.js +19 -0
  16. package/esm2015/ngrx-entity-crud.js +5 -0
  17. package/esm2015/public-api.js +7 -0
  18. package/fesm2015/ngrx-entity-crud.js +1367 -0
  19. package/fesm2015/ngrx-entity-crud.js.map +1 -0
  20. package/lib/actions.d.ts +5 -0
  21. package/lib/actions.d.ts.map +1 -0
  22. package/lib/base-crud-gql.service.d.ts +19 -0
  23. package/lib/base-crud-gql.service.d.ts.map +1 -0
  24. package/lib/base-crud.service.d.ts +34 -0
  25. package/lib/base-crud.service.d.ts.map +1 -0
  26. package/lib/create_adapter.d.ts +6 -0
  27. package/lib/create_adapter.d.ts.map +1 -0
  28. package/lib/effect.d.ts +132 -0
  29. package/lib/effect.d.ts.map +1 -0
  30. package/lib/entity_state.d.ts +9 -0
  31. package/lib/entity_state.d.ts.map +1 -0
  32. package/lib/ibase-crud-service.d.ts +13 -0
  33. package/lib/ibase-crud-service.d.ts.map +1 -0
  34. package/lib/j-ngrx-filter.d.ts +14 -0
  35. package/lib/j-ngrx-filter.d.ts.map +1 -0
  36. package/lib/models.d.ts +494 -0
  37. package/lib/models.d.ts.map +1 -0
  38. package/lib/reducer.d.ts +11 -0
  39. package/lib/reducer.d.ts.map +1 -0
  40. package/lib/state_selectors.d.ts +5 -0
  41. package/lib/state_selectors.d.ts.map +1 -0
  42. package/lib/utils.d.ts +8 -0
  43. package/lib/utils.d.ts.map +1 -0
  44. package/ngrx-entity-crud.d.ts +5 -0
  45. package/ngrx-entity-crud.d.ts.map +1 -0
  46. package/ngrx-entity-crud.metadata.json +1 -0
  47. package/package.json +41 -0
  48. package/public-api.d.ts +7 -0
  49. package/public-api.d.ts.map +1 -0
  50. package/schematics/auth/files/model/auth.ts +17 -0
  51. package/schematics/auth/files/store/auth-store/actions.ts +30 -0
  52. package/schematics/auth/files/store/auth-store/auth-mock.service.ts +95 -0
  53. package/schematics/auth/files/store/auth-store/auth-store.module.ts +34 -0
  54. package/schematics/auth/files/store/auth-store/auth.guard.ts +44 -0
  55. package/schematics/auth/files/store/auth-store/auth.service.ts +28 -0
  56. package/schematics/auth/files/store/auth-store/conf.ts +2 -0
  57. package/schematics/auth/files/store/auth-store/effects.ts +53 -0
  58. package/schematics/auth/files/store/auth-store/index.d.ts +13 -0
  59. package/schematics/auth/files/store/auth-store/index.ts +13 -0
  60. package/schematics/auth/files/store/auth-store/names.ts +3 -0
  61. package/schematics/auth/files/store/auth-store/reducer.ts +16 -0
  62. package/schematics/auth/files/store/auth-store/selectors.ts +51 -0
  63. package/schematics/auth/files/store/auth-store/state.ts +16 -0
  64. package/schematics/auth/files/views/login/components/logout-button/logout-button.component.ts +49 -0
  65. package/schematics/auth/files/views/login/login-main/login-main.component.html +25 -0
  66. package/schematics/auth/files/views/login/login-main/login-main.component.ts +57 -0
  67. package/schematics/auth/files/views/login/login-routing.module.ts +30 -0
  68. package/schematics/auth/files/views/login/login.module.ts +30 -0
  69. package/schematics/auth/index.d.ts +2 -0
  70. package/schematics/auth/index.js +77 -0
  71. package/schematics/auth/index.js.map +1 -0
  72. package/schematics/auth/schema.json +21 -0
  73. package/schematics/auth0/files/store/auth-store/actions.ts +21 -0
  74. package/schematics/auth0/files/store/auth-store/auth-store.module.ts +32 -0
  75. package/schematics/auth0/files/store/auth-store/auth.guard.ts +44 -0
  76. package/schematics/auth0/files/store/auth-store/authentication.service.ts +32 -0
  77. package/schematics/auth0/files/store/auth-store/conf.ts +2 -0
  78. package/schematics/auth0/files/store/auth-store/effects.ts +59 -0
  79. package/schematics/auth0/files/store/auth-store/index.d.ts +13 -0
  80. package/schematics/auth0/files/store/auth-store/index.ts +13 -0
  81. package/schematics/auth0/files/store/auth-store/login.component.ts +75 -0
  82. package/schematics/auth0/files/store/auth-store/names.ts +3 -0
  83. package/schematics/auth0/files/store/auth-store/profile.ts +12 -0
  84. package/schematics/auth0/files/store/auth-store/reducer.ts +23 -0
  85. package/schematics/auth0/files/store/auth-store/selectors.ts +24 -0
  86. package/schematics/auth0/files/store/auth-store/state.ts +11 -0
  87. package/schematics/auth0/index.d.ts +2 -0
  88. package/schematics/auth0/index.js +67 -0
  89. package/schematics/auth0/index.js.map +1 -0
  90. package/schematics/auth0/schema.json +21 -0
  91. package/schematics/collection.json +30 -0
  92. package/schematics/my-utility.d.ts +58 -0
  93. package/schematics/my-utility.js +257 -0
  94. package/schematics/my-utility.js.map +1 -0
  95. package/schematics/ng-add/files/root-store/index.d.ts +8 -0
  96. package/schematics/ng-add/files/root-store/index.ts +8 -0
  97. package/schematics/ng-add/files/root-store/root-reducer.ts +11 -0
  98. package/schematics/ng-add/files/root-store/root-store.module.ts +29 -0
  99. package/schematics/ng-add/files/root-store/router-store/actions.ts +27 -0
  100. package/schematics/ng-add/files/root-store/router-store/effects.ts +65 -0
  101. package/schematics/ng-add/files/root-store/router-store/index.d.ts +11 -0
  102. package/schematics/ng-add/files/root-store/router-store/index.ts +11 -0
  103. package/schematics/ng-add/files/root-store/router-store/pop-up-base.component.ts +83 -0
  104. package/schematics/ng-add/files/root-store/router-store/pop-up-base.module.ts +24 -0
  105. package/schematics/ng-add/files/root-store/router-store/reducer.ts +31 -0
  106. package/schematics/ng-add/files/root-store/router-store/router-store.module.ts +30 -0
  107. package/schematics/ng-add/files/root-store/router-store/selectors.ts +63 -0
  108. package/schematics/ng-add/files/root-store/router-store/state.ts +18 -0
  109. package/schematics/ng-add/files/root-store/selectors.ts +20 -0
  110. package/schematics/ng-add/files/root-store/slide-menu-store/actions.ts +11 -0
  111. package/schematics/ng-add/files/root-store/slide-menu-store/effects.ts +10 -0
  112. package/schematics/ng-add/files/root-store/slide-menu-store/index.d.ts +13 -0
  113. package/schematics/ng-add/files/root-store/slide-menu-store/index.ts +13 -0
  114. package/schematics/ng-add/files/root-store/slide-menu-store/names.ts +3 -0
  115. package/schematics/ng-add/files/root-store/slide-menu-store/operators.ts +24 -0
  116. package/schematics/ng-add/files/root-store/slide-menu-store/reducer.ts +8 -0
  117. package/schematics/ng-add/files/root-store/slide-menu-store/selectors.ts +41 -0
  118. package/schematics/ng-add/files/root-store/slide-menu-store/slide-menu-store.module.ts +27 -0
  119. package/schematics/ng-add/files/root-store/slide-menu-store/state.ts +14 -0
  120. package/schematics/ng-add/files/root-store/state.ts +5 -0
  121. package/schematics/ng-add/index.d.ts +2 -0
  122. package/schematics/ng-add/index.js +78 -0
  123. package/schematics/ng-add/index.js.map +1 -0
  124. package/schematics/ng-add/schema.json +22 -0
  125. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.html +52 -0
  126. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.ts +57 -0
  127. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.html +7 -0
  128. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.ts +50 -0
  129. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.html +15 -0
  130. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.ts +23 -0
  131. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-routing.module.ts +36 -0
  132. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__.module.ts +33 -0
  133. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.html +1 -0
  134. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.ts +16 -0
  135. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.html +1 -0
  136. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.ts +27 -0
  137. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.html +1 -0
  138. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.ts +18 -0
  139. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-routing.module.ts +36 -0
  140. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__.module.ts +26 -0
  141. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.html +38 -0
  142. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.ts +50 -0
  143. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.html +30 -0
  144. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.ts +101 -0
  145. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.html +12 -0
  146. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.ts +21 -0
  147. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-routing.module.ts +37 -0
  148. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__.module.ts +49 -0
  149. package/schematics/section/files/primeng/__clazz@dasherize__/components/button-create-many-test-__clazz@dasherize__.component.ts +46 -0
  150. package/schematics/section/files/primeng/__clazz@dasherize__/components/button-delete-__clazz@dasherize__.component.ts +35 -0
  151. package/schematics/section/files/primeng/__clazz@dasherize__/components/button-edit-many-test-__clazz@dasherize__.component.ts +45 -0
  152. package/schematics/section/files/primeng/__clazz@dasherize__/components/button-new-__clazz@dasherize__.component.ts +45 -0
  153. package/schematics/section/index.d.ts +2 -0
  154. package/schematics/section/index.js +56 -0
  155. package/schematics/section/index.js.map +1 -0
  156. package/schematics/section/schema.json +39 -0
  157. package/schematics/store/files/base-model/__clazz@dasherize__.ts +8 -0
  158. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__-store.module.ts +26 -0
  159. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.actions.ts +9 -0
  160. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.effects.ts +11 -0
  161. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.names.ts +3 -0
  162. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.reducer.ts +8 -0
  163. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.selectors.ts +18 -0
  164. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.state.ts +6 -0
  165. package/schematics/store/files/base-store/__clazz@dasherize__-store/index.d.ts +13 -0
  166. package/schematics/store/files/base-store/__clazz@dasherize__-store/index.ts +13 -0
  167. package/schematics/store/files/crud-graphql/__clazz@dasherize__-store/__clazz@dasherize__.criteria.ts +39 -0
  168. package/schematics/store/files/crud-graphql/__clazz@dasherize__-store/__clazz@dasherize__.graphql +34 -0
  169. package/schematics/store/files/crud-model/__clazz@dasherize__.ts +8 -0
  170. package/schematics/store/files/crud-service/__clazz@dasherize__.service.ts +11 -0
  171. package/schematics/store/files/crud-service-graphql/__clazz@dasherize__.service.ts +16 -0
  172. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__-store.module.ts +26 -0
  173. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.actions.ts +55 -0
  174. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.effects.ts +90 -0
  175. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.names.ts +3 -0
  176. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.reducer.ts +103 -0
  177. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.selectors.ts +26 -0
  178. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.state.ts +11 -0
  179. package/schematics/store/files/crud-store/__clazz@dasherize__-store/index.d.ts +15 -0
  180. package/schematics/store/files/crud-store/__clazz@dasherize__-store/index.ts +15 -0
  181. package/schematics/store/index.d.ts +2 -0
  182. package/schematics/store/index.js +100 -0
  183. package/schematics/store/index.js.map +1 -0
  184. package/schematics/store/schema.json +45 -0
@@ -0,0 +1,133 @@
1
+ export const isEmpty = (obj) => {
2
+ return obj === null || undefined
3
+ ? true
4
+ : (() => {
5
+ for (const prop in obj) {
6
+ if (Object.prototype.hasOwnProperty.call(obj, prop)) {
7
+ return false;
8
+ }
9
+ }
10
+ return true;
11
+ })();
12
+ };
13
+ export function jNgrxFilter(items, filters) {
14
+ return new JNgrxFilter().jNgrxFilter(items, filters);
15
+ }
16
+ export class JNgrxFilter {
17
+ constructor() {
18
+ this.filterConstraints = {
19
+ startsWith(value, filter) {
20
+ if (filter === undefined || filter === null || filter.trim() === '') {
21
+ return true;
22
+ }
23
+ if (value === undefined || value === null) {
24
+ return false;
25
+ }
26
+ const filterValue = filter.toLowerCase();
27
+ return value.toString().toLowerCase().slice(0, filterValue.length) === filterValue;
28
+ },
29
+ contains(value, filter) {
30
+ if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {
31
+ return true;
32
+ }
33
+ if (value === undefined || value === null) {
34
+ return false;
35
+ }
36
+ return value.toString().toLowerCase().indexOf(filter.toLowerCase()) !== -1;
37
+ },
38
+ endsWith(value, filter) {
39
+ if (filter === undefined || filter === null || filter.trim() === '') {
40
+ return true;
41
+ }
42
+ if (value === undefined || value === null) {
43
+ return false;
44
+ }
45
+ const filterValue = filter.toString().toLowerCase();
46
+ return value.toString().toLowerCase().indexOf(filterValue, value.toString().length - filterValue.length) !== -1;
47
+ },
48
+ equals(value, filter) {
49
+ if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {
50
+ return true;
51
+ }
52
+ if (value === undefined || value === null) {
53
+ return false;
54
+ }
55
+ return value.toString().toLowerCase() === filter.toString().toLowerCase();
56
+ },
57
+ notEquals(value, filter) {
58
+ if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {
59
+ return false;
60
+ }
61
+ if (value === undefined || value === null) {
62
+ return true;
63
+ }
64
+ return value.toString().toLowerCase() !== filter.toString().toLowerCase();
65
+ },
66
+ in(value, filters) {
67
+ if (filters === undefined || filters === null || filters.length === 0) {
68
+ return true;
69
+ }
70
+ if (value === undefined || value === null) {
71
+ return false;
72
+ }
73
+ filters.forEach(filter => {
74
+ if (filter === value) {
75
+ return true;
76
+ }
77
+ });
78
+ return false;
79
+ }
80
+ };
81
+ this.isFunction = (obj) => !!(obj && obj.constructor && obj.call && obj.apply);
82
+ }
83
+ jNgrxFilter(items, filters) {
84
+ if (isEmpty(filters)) {
85
+ return items;
86
+ }
87
+ const filteredValue = [];
88
+ items.forEach((item) => {
89
+ let localMatch = false;
90
+ // tslint:disable-next-line:forin
91
+ for (const filterField in filters) {
92
+ const filterValue = filters[filterField].value;
93
+ const filterMatchMode = filters[filterField].matchMode || 'startsWith';
94
+ const filterConstraint = this.filterConstraints[filterMatchMode];
95
+ const renderFunction = filters[filterField].renderFunction;
96
+ const dataFieldValue = this.isFunction(renderFunction) ? renderFunction(this.resolveFieldData(item, filterField)) : this.resolveFieldData(item, filterField);
97
+ if (filterConstraint(dataFieldValue, filterValue)) {
98
+ localMatch = true;
99
+ break;
100
+ }
101
+ }
102
+ if (localMatch) {
103
+ filteredValue.push(item);
104
+ }
105
+ });
106
+ return filteredValue;
107
+ }
108
+ resolveFieldData(data, field) {
109
+ if (data && field) {
110
+ if (this.isFunction(field)) {
111
+ return field(data);
112
+ }
113
+ else if (field.indexOf('.') === -1) {
114
+ return data[field];
115
+ }
116
+ else {
117
+ const fields = field.split('.');
118
+ let value = data;
119
+ for (let i = 0, len = fields.length; i < len; ++i) {
120
+ if (value == null) {
121
+ return null;
122
+ }
123
+ value = value[fields[i]];
124
+ }
125
+ return value;
126
+ }
127
+ }
128
+ else {
129
+ return null;
130
+ }
131
+ }
132
+ }
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiai1uZ3J4LWZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25ncngtZW50aXR5LWNydWQvc3JjL2xpYi9qLW5ncngtZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQzdCLE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxTQUFTO1FBQzlCLENBQUMsQ0FBQyxJQUFJO1FBQ04sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO1lBQ04sS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUU7Z0JBQ3RCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDbkQsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxXQUFXLENBQUksS0FBVSxFQUFFLE9BQXlDO0lBQ2xGLE9BQU8sSUFBSSxXQUFXLEVBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLE9BQU8sV0FBVztJQUF4QjtRQUVtQixzQkFBaUIsR0FBRztZQUVuQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU07Z0JBQ3RCLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ25FLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUVELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO29CQUN6QyxPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFFRCxNQUFNLFdBQVcs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QUFPLElBQUksQ0FBQztxQkFDYjtvQkFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQjtnQkFDRCxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ZpbHRlck1ldGFkYXRhfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKG9iaikgPT4ge1xuICByZXR1cm4gb2JqID09PSBudWxsIHx8IHVuZGVmaW5lZFxuICAgID8gdHJ1ZVxuICAgIDogKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KSgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGpOZ3J4RmlsdGVyPFQ+KGl0ZW1zOiBUW10sIGZpbHRlcnM6IHsgW3M6IHN0cmluZ106IEZpbHRlck1ldGFkYXRhOyB9KTogVFtdIHtcbiAgcmV0dXJuIG5ldyBKTmdyeEZpbHRlcjxUPigpLmpOZ3J4RmlsdGVyKGl0ZW1zLCBmaWx0ZXJzKTtcbn1cblxuZXhwb3J0IGNsYXNzIEpOZ3J4RmlsdGVyPFQ+IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlckNvbnN0cmFpbnRzID0ge1xuXG4gICAgc3RhcnRzV2l0aCh2YWx1ZSwgZmlsdGVyKTogYm9vbGVhbiB7XG4gICAgICBpZiAoZmlsdGVyID09PSB1bmRlZmluZWQgfHwgZmlsdGVyID09PSBudWxsIHx8IGZpbHRlci50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZmlsdGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIGZpbHRlclZhbHVlLmxlbmd0aCkgPT09IGZpbHRlclZhbHVlO1xuICAgIH0sXG5cbiAgICBjb250YWlucyh2YWx1ZSwgZmlsdGVyKTogYm9vbGVhbiB7XG4gICAgICBpZiAoZmlsdGVyID09PSB1bmRlZmluZWQgfHwgZmlsdGVyID09PSBudWxsIHx8ICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyAmJiBmaWx0ZXIudHJpbSgpID09PSAnJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlci50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XG4gICAgfSxcblxuICAgIGVuZHNXaXRoKHZhbHVlLCBmaWx0ZXIpOiBib29sZWFuIHtcbiAgICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXIgPT09IG51bGwgfHwgZmlsdGVyLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBmaWx0ZXIudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlLCB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCAtIGZpbHRlclZhbHVlLmxlbmd0aCkgIT09IC0xO1xuICAgIH0sXG5cbiAgICBlcXVhbHModmFsdWUsIGZpbHRlcik6IGJvb2xlYW4ge1xuICAgICAgaWYgKGZpbHRlciA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlciA9PT0gbnVsbCB8fCAodHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycgJiYgZmlsdGVyLnRyaW0oKSA9PT0gJycpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlci50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgfSxcblxuICAgIG5vdEVxdWFscyh2YWx1ZSwgZmlsdGVyKTogYm9vbGVhbiB7XG4gICAgICBpZiAoZmlsdGVyID09PSB1bmRlZmluZWQgfHwgZmlsdGVyID09PSBudWxsIHx8ICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyAmJiBmaWx0ZXIudHJpbSgpID09PSAnJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSAhPT0gZmlsdGVyLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICB9LFxuXG4gICAgaW4odmFsdWUsIGZpbHRlcnM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICBpZiAoZmlsdGVycyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlcnMgPT09IG51bGwgfHwgZmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIgPT09IHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIHB1YmxpYyBqTmdyeEZpbHRlcihpdGVtczogVFtdLCBmaWx0ZXJzOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YTsgfSk6IFRbXSB7XG5cbiAgICBpZiAoaXNFbXB0eShmaWx0ZXJzKSkge1xuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkVmFsdWUgPSBbXTtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBsZXQgbG9jYWxNYXRjaCA9IGZhbHNlO1xuXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cbiAgICAgIGZvciAoY29uc3QgZmlsdGVyRmllbGQgaW4gZmlsdGVycykge1xuXG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZmlsdGVyc1tmaWx0ZXJGaWVsZF0udmFsdWU7XG4gICAgICAgIGNvbnN0IGZpbHRlck1hdGNoTW9kZSA9IGZpbHRlcnNbZmlsdGVyRmllbGRdLm1hdGNoTW9kZSB8fCAnc3RhcnRzV2l0aCc7XG4gICAgICAgIGNvbnN0IGZpbHRlckNvbnN0cmFpbnQgPSB0aGlzLmZpbHRlckNvbnN0cmFpbnRzW2ZpbHRlck1hdGNoTW9kZV07XG5cbiAgICAgICAgY29uc3QgcmVuZGVyRnVuY3Rpb24gPSBmaWx0ZXJzW2ZpbHRlckZpZWxkXS5yZW5kZXJGdW5jdGlvbjtcbiAgICAgICAgY29uc3QgZGF0YUZpZWxkVmFsdWUgPSB0aGlzLmlzRnVuY3Rpb24ocmVuZGVyRnVuY3Rpb24pID8gcmVuZGVyRnVuY3Rpb24odGhpcy5yZXNvbHZlRmllbGREYXRhKGl0ZW0sIGZpbHRlckZpZWxkKSkgOiB0aGlzLnJlc29sdmVGaWVsZERhdGEoaXRlbSwgZmlsdGVyRmllbGQpO1xuXG4gICAgICAgIGlmIChmaWx0ZXJDb25zdHJhaW50KGRhdGFGaWVsZFZhbHVlLCBmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICBsb2NhbE1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvY2FsTWF0Y2gpIHtcbiAgICAgICAgZmlsdGVyZWRWYWx1ZS5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVGaWVsZERhdGEoZGF0YTogYW55LCBmaWVsZDogYW55KTogYW55IHtcbiAgICBpZiAoZGF0YSAmJiBmaWVsZCkge1xuICAgICAgaWYgKHRoaXMuaXNGdW5jdGlvbihmaWVsZCkpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkKGRhdGEpO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC5pbmRleE9mKCcuJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBkYXRhW2ZpZWxkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogc3RyaW5nW10gPSBmaWVsZC5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgdmFsdWUgPSBkYXRhO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmllbGRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2ZpZWxkc1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGlzRnVuY3Rpb24gPSAob2JqOiBhbnkpID0+ICEhKG9iaiAmJiBvYmouY29uc3RydWN0b3IgJiYgb2JqLmNhbGwgJiYgb2JqLmFwcGx5KTtcbn1cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ export var CrudEnum;
2
+ (function (CrudEnum) {
3
+ CrudEnum["SEARCH"] = "Search";
4
+ CrudEnum["DELETE"] = "Delete";
5
+ CrudEnum["CREATE"] = "Create";
6
+ CrudEnum["EDIT"] = "Edit";
7
+ CrudEnum["SELECT"] = "Select";
8
+ CrudEnum["RESET"] = "Reset";
9
+ })(CrudEnum || (CrudEnum = {}));
10
+ export var ActionEnum;
11
+ (function (ActionEnum) {
12
+ ActionEnum["RESPONSE"] = "Response";
13
+ ActionEnum["REQUEST"] = "Request";
14
+ ActionEnum["FAILURE"] = "Failure";
15
+ ActionEnum["SUCCESS"] = "Success";
16
+ })(ActionEnum || (ActionEnum = {}));
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdyeC1lbnRpdHktY3J1ZC9zcmMvbGliL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3REEsTUFBTSxDQUFOLElBQVksUUFPWDtBQVBELFdBQVksUUFBUTtJQUNsQiw2QkFBaUIsQ0FBQTtJQUNqQiw2QkFBaUIsQ0FBQTtJQUNqQiw2QkFBaUIsQ0FBQTtJQUNqQix5QkFBYSxDQUFBO0lBQ2IsNkJBQWlCLENBQUE7SUFDakIsMkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUFcsUUFBUSxLQUFSLFFBQVEsUUFPbkI7QUFFRCxNQUFNLENBQU4sSUFBWSxVQUtYO0FBTEQsV0FBWSxVQUFVO0lBQ3BCLG1DQUFxQixDQUFBO0lBQ3JCLGlDQUFtQixDQUFBO0lBQ25CLGlDQUFtQixDQUFBO0lBQ25CLGlDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxVQUFVLEtBQVYsVUFBVSxRQUtyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW50aXR5QWRhcHRlciwgRW50aXR5U3RhdGV9IGZyb20gJ0BuZ3J4L2VudGl0eSc7XG5pbXBvcnQge0FjdGlvbiwgQWN0aW9uQ3JlYXRvciwgTWVtb2l6ZWRTZWxlY3Rvcn0gZnJvbSAnQG5ncngvc3RvcmUnO1xuXG4vLyBDT1BJQVRPIERBIEBuZ3J4L3N0b3JlL3NyYy9tb2RlbHNcbi8vIHNlIHZpZW5lIGltcG9ydGF0byBkYSBAbmdyeC9zdG9yZS9zcmMvbW9kZWxzLCBkYSBlcnJvcmkgbmVpIHByb2dldHRpIGRvdmUgdmllbmUgdXRpbGl6emF0by5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUeXBlZEFjdGlvbjxUIGV4dGVuZHMgc3RyaW5nPiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGU6IFQ7XG59XG5cbi8vIENPUElBVE8gREEgQG5ncngvc3RvcmUvc3JjL21vZGVsc1xuLy8gc2UgdmllbmUgaW1wb3J0YXRvIGRhIEBuZ3J4L2VudGl0eS9zcmMvbW9kZWxzLCBkYSBlcnJvcmkgbmVpIHByb2dldHRpIGRvdmUgdmllbmUgdXRpbGl6emF0by5cbmV4cG9ydCBpbnRlcmZhY2UgRGljdGlvbmFyeU51bTxUPiB7XG4gIFtpZDogbnVtYmVyXTogVCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlY2xhcmUgYWJzdHJhY3QgY2xhc3MgRGljdGlvbmFyeTxUPiBpbXBsZW1lbnRzIERpY3Rpb25hcnlOdW08VD4ge1xuICBbaWQ6IHN0cmluZ106IFQgfCB1bmRlZmluZWQ7XG59XG5cbi8vIENPUElBVE8gREEgQG5ncngvc3RvcmUvc3JjL21vZGVsc1xuLy8gc2UgdmllbmUgaW1wb3J0YXRvIGRhIEBuZ3J4L2VudGl0eS9zcmMvbW9kZWxzLCBkYSBlcnJvcmkgbmVpIHByb2dldHRpIGRvdmUgdmllbmUgdXRpbGl6emF0by5cbmV4cG9ydCB0eXBlIElkU2VsZWN0b3JTdHI8VD4gPSAobW9kZWw6IFQpID0+IHN0cmluZztcbmV4cG9ydCB0eXBlIElkU2VsZWN0b3JOdW08VD4gPSAobW9kZWw6IFQpID0+IG51bWJlcjtcbi8vIENPUElBVE8gREEgQG5ncngvc3RvcmUvc3JjL21vZGVsc1xuLy8gc2UgdmllbmUgaW1wb3J0YXRvIGRhIEBuZ3J4L2VudGl0eS9zcmMvbW9kZWxzLCBkYSBlcnJvcmkgbmVpIHByb2dldHRpIGRvdmUgdmllbmUgdXRpbGl6emF0by5cbmV4cG9ydCB0eXBlIElkU2VsZWN0b3I8VD4gPSBJZFNlbGVjdG9yU3RyPFQ+IHwgSWRTZWxlY3Rvck51bTxUPjtcblxuLy8gcGVyIGV2aXRhcmUgbCdpbXBvcnRhemlvbmVcbi8vIGltcG9ydCB7Q29tcGFyZXIsIEVudGl0eUFkYXB0ZXIsIElkU2VsZWN0b3J9IGZyb20gJ0BuZ3J4L2VudGl0eS9zcmMvbW9kZWxzJztcbi8vIGhvIGNvcGlhdG8gaSBzZWd1ZW50aSB0eXBlXG5leHBvcnQgZGVjbGFyZSB0eXBlIENvbXBhcmVyU3RyPFQ+ID0gKGE6IFQsIGI6IFQpID0+IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIHR5cGUgQ29tcGFyZXI8VD4gPSAoYTogVCwgYjogVCkgPT4gbnVtYmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlbGVjdG9yczxULCBWPiB7XG4gIC8qKlxuICAgKiAtIHVzZWQgdG8gc2VsZWN0IGEgZ3JvdXAgb2YgaWRzXG4gICAqIEBwYXJhbSAoc3RhdGU6IFYpID0+IHN0cmluZ1tdIHwgbnVtYmVyW11cbiAgICovXG4gIHNlbGVjdElkczogKHN0YXRlOiBWKSA9PiBzdHJpbmdbXSB8IG51bWJlcltdO1xuICAvKipcbiAgICogLSB1c2VkIHRvIHNlbGVjdCBhIGdyb3VwIG9mIGVudGl0aWVzXG4gICAqIEBwYXJhbSAoc3RhdGU6IFYpID0+IERpY3Rpb25hcnk8VD5cbiAgICovXG4gIHNlbGVjdEVudGl0aWVzOiAoc3RhdGU6IFYpID0+IERpY3Rpb25hcnk8VD47XG4gIC8qKlxuICAgKiAtIHVzZWQgdG8gc2VsZWN0IGFsbCBpdGVtc1xuICAgKiBAcGFyYW0gKHN0YXRlOiBWKSA9PiBUW11cbiAgICovXG4gIHNlbGVjdEFsbDogKHN0YXRlOiBWKSA9PiBUW107XG4gIC8qKlxuICAgKiAtIHVzZWQgdG8gc2VsZWN0IHRoZSBzdW0gb2YgaXRlbXNcbiAgICogQHBhcmFtIChzdGF0ZTogVikgPT4gbnVtYmVyXG4gICAqL1xuICBzZWxlY3RUb3RhbDogKHN0YXRlOiBWKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIENydWRFbnVtIHtcbiAgU0VBUkNIID0gJ1NlYXJjaCcsXG4gIERFTEVURSA9ICdEZWxldGUnLFxuICBDUkVBVEUgPSAnQ3JlYXRlJyxcbiAgRURJVCA9ICdFZGl0JyxcbiAgU0VMRUNUID0gJ1NlbGVjdCcsXG4gIFJFU0VUID0gJ1Jlc2V0Jyxcbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uRW51bSB7XG4gIFJFU1BPTlNFID0gJ1Jlc3BvbnNlJyxcbiAgUkVRVUVTVCA9ICdSZXF1ZXN0JyxcbiAgRkFJTFVSRSA9ICdGYWlsdXJlJyxcbiAgU1VDQ0VTUyA9ICdTdWNjZXNzJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRSZXF1ZXN0QmFzZSB7XG4gIC8qKlxuICAgKiBpcyBhZGRlZCB0byB0aGUgc2VydmljZSByb3V0ZSxcbiAgICogaW4gc29tZSBjYXNlcyBpdCBpcyBuZWNlc3NhcnkgdG8gaW52b2tlIGEgc3ViLXJvdXRlLlxuICAgKiBpZiB0aGUgc2VydmljZSB3YXMgXCJ1c2VyXCIgYW5kIHRoZSBzdWItcm91dGUgXCJ1c2VyL2FjY2VwdFwiOlxuICAgKiBwYXRoOltcImFjY2VwdFwiXVxuICAgKi9cbiAgcGF0aD86IGFueVtdO1xuICAvKipcbiAgICogRGlzcGF0Y2hlZCBhY3Rpb25zIGluIGNhc2Ugb2YgZXJyb3IuXG4gICAqL1xuICBvbkZhdWx0PzogQWN0aW9uW107XG4gIC8qKlxuICAgKiBEaXNwYXRjaGVkIGFjdGlvbnMgaW4gdGhlIGV2ZW50IG9mIGEgcG9zaXRpdmUgcmVzcG9uc2VcbiAgICovXG4gIG9uUmVzdWx0PzogQWN0aW9uW107XG5cbiAgLyoqXG4gICAqIHBlciBvZ25pIHN0cmluZ2EgcHJlc2VudGUgbmVsbCdhdHRyaWJ1dG8sIHZlcnLDoCBzcGVkaXRhIHVuYSBub3RpZmljYSBSZXNwb25zZS5cbiAgICogaW4gcXVlc3RvIG1vZG8sIGNoaSBpbnZpYSBsYSBub3RpZmljYSBwb3Ryw6AgcG9pIGZpbHRyYXJlIGkgZmF0aSBpbiBiYXNlIGFsbGEgY2hpYXZlIGludmlhdGEuXG4gICAqL1xuICBkaXNwYXRjaFJlc3BvbnNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiAtIGNyaXRlcmlhOiBJQ3JpdGVyaWE6IGNyaXRlcmlhIGRpIHJpY2VyY2FcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ3JpdGVyaWE8UVAgPSBhbnk+IGV4dGVuZHMgT3B0UmVxdWVzdEJhc2Uge1xuICAvKipcbiAgICpcbiAgICogXCJSRUZSRVNIXCIgdGhlIHN0b3JlIHdpbGwgYmUgZGVsZXRlZCBiZWZvcmUgbWFraW5nIHRoZSByZW1vdGUgY2FsbCwgYWxsIHRoZSBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjYWxsIHJlc3VsdC5cbiAgICpcbiAgICovXG4gIG1vZGU/OiAnUkVGUkVTSCcgfCAndXBzZXJ0TWFueScgfCAnYWRkQWxsJztcblxuICBxdWVyeVBhcmFtcz86IFFQO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdFJlcXVlc3Q8VCA9IGFueT4gZXh0ZW5kcyBPcHRSZXF1ZXN0QmFzZSB7XG4gIG11dGF0aW9uUGFyYW1zOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdFJlc3BvbnNlPFQ+IHtcbiAgYWN0aW9uVHlwZTogc3RyaW5nO1xuICByZXNwb25zZTogUmVzcG9uc2U8VD47XG4gIHJlcXVlc3Q6IElDcml0ZXJpYSB8IE9wdFJlcXVlc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0RWZmZWN0IHtcbiAgLyoqXG4gICAqIHBlciBvZ25pIHN0cmluZ2EgcHJlc2VudGUgbmVsbCdhdHRyaWJ1dG8sIHZlcnLDoCBzcGVkaXRhIHVuYSBub3RpZmljYSBSZXNwb25zZS5cbiAgICogaW4gcXVlc3RvIG1vZG8sIGNoaSBpbnZpYSBsYSBub3RpZmljYSBwb3Ryw6AgcG9pIGZpbHRyYXJlIGkgZmF0aSBpbiBiYXNlIGFsbGEgY2hpYXZlIGludmlhdGEuXG4gICAqL1xuICBkaXNwYXRjaFJlc3BvbnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZTxUPiB7XG4gIGRhdGE6IFQgfCBhbnk7XG4gIGhhc0Vycm9yOiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyTWV0YWRhdGEge1xuICB2YWx1ZT86IGFueTtcbiAgbWF0Y2hNb2RlPzogc3RyaW5nO1xuICByZW5kZXJGdW5jdGlvbj86ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3J1ZFN0YXRlPFQ+IGV4dGVuZHMgRW50aXR5U3RhdGU8VD4ge1xuICBlcnJvcjogc3RyaW5nO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIGlzTG9hZGVkOiBib29sZWFuO1xuICBmaWx0ZXJzOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YTsgfTtcbiAgbGFzdENyaXRlcmlhOiBJQ3JpdGVyaWE7XG4gIGlkc1NlbGVjdGVkOiBzdHJpbmdbXSB8IG51bWJlcltdO1xuICBpdGVtU2VsZWN0ZWQ6IFQ7XG4gIGlkU2VsZWN0ZWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgLy8gaXRlbXNTZWxlY3RlZDogVFtdO1xuICBlbnRpdGllc1NlbGVjdGVkOiBEaWN0aW9uYXJ5PFQ+O1xuICAvLyBvZ25pIGVudGl0w6AgcmVnaXN0cmEgbCdhemlvbmUgc2NhdGVuYXRhIGUgbGEgcmlzcG9zdGEgZGFsIHNlcnZlci5cbiAgcmVzcG9uc2VzOiBPcHRSZXNwb25zZTxUPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUNydWRTZWxlY3RvcnM8VCwgVj4gZXh0ZW5kcyBFbnRpdHlTZWxlY3RvcnM8VCwgVj4ge1xuICAvKipcbiAgICpcbiAgICpcbiAgICogLSB1c2VkIHRvIHNlbGVjdCBzZWxlY3RlZCBpZFxuICAgKiAtIHBvcHVsYXRlZCB3aXRoIGFjdGlvbiBcIi4uLlNlbGVjdGVkSXRlbSh7aXRlbX0pXCIsXG4gICAqIEBwYXJhbSAoc3RhdGU6IFYpID0+IHN0cmluZyB8IG51bWJlclxuICAgKi9cbiAgc2VsZWN0SWRTZWxlY3RlZDogKHN0YXRlOiBWKSA9PiBzdHJpbmcgfCBudW1iZXI7XG4gIC8qKlxuICAgKiAtIHVzZWQgdG8gc2VsZWN0IHNlbGVjdGVkIGlkc1xuICAgKiAtIHBvcHVsYXRlZCB3aXRoIGFjdGlvbiBcIi4uLlNlbGVjdGVkSXRlbXMoe2l0ZW19KVwiLFxuICAgKiBAcGFyYW0gKHN0YXRlOiBWKSA9PiBzdHJpbmdbXSB8IG51bWJlcltdXG4gICAqL1xuICBzZWxlY3RJZHNTZWxlY3RlZDogKHN0YXRlOiBWKSA9PiBzdHJpbmdbXSB8IG51bWJlcltdO1xuICAvKipcbiAgICogLSB1c2VkIHRvIHNlbGVjdCBzZWxlY3RlZEl0ZW1cbiAgICogLSBwb3B1bGF0ZWQgd2l0aCBhY3Rpb24gXCIuLi5TZWxlY3RlZEl0ZW1zKHtpdGVtfSlcIixcbiAgICogLSBsb2NhbCBjbG9uZSwgZG9lcyBub3QgbWF0Y2ggdGhlIGluc3RhbmNlIGluIHRoZSBzdG9yZVxuICAgKiBAcGFyYW0gKHN0YXRlOiBWKSA9PiBUXG4gICAqL1xuICBzZWxlY3RJdGVtU2VsZWN0ZWQ6IChzdGF0ZTogVikgPT4gVDtcbiAgLyoqXG4gICAqIC0gdXNlZCB0byBzZWxlY3Qgc2VsZWN0ZWQgaXRlbVxuICAgKiAtIHBvcHVsYXRlZCB3aXRoIGFjdGlvbiBcIi4uLlNlbGVjdGVkSXRlbXMoe2l0ZW06e2lkOnN0cmluZyAuLi59fSlcIixcbiAgICogLSBzYW1lIGluc3RhbmNlIG9mIHRoZSBzdG9yZSAoc3RhdGUuZW50aXRpZXMpXG4gICAqIC0gdGhlIHNlbGVjdG9yIGlzIGNyZWF0ZWQgd2l0aDpcbiAgICogICAgLSBzZWxlY3RJZFNlbGVjdGVkICsgc2VsZWN0RW50aXRpZXMsXG4gICAqIEBwYXJhbSAoc3RhdGU6IFYpID0+IFRcbiAgICovXG4gIHNlbGVjdEl0ZW1TZWxlY3RlZE9yaWdpbjogKHN0YXRlOiBWKSA9PiBUO1xuICAvKipcbiAgICogLSB1c2VkIHRvIHNlbGVjdCBhIGdyb3VwIG9mIHNlbGVjdGVkIGl0ZW1zXG4gICAqIC0gcG9wdWxhdGVkIHdpdGggYWN0aW9uIFwiLi4uU2VsZWN0ZWRJdGVtcyh7aXRlbX0pXCIsXG4gICAqIC0gbG9jYWwgY2xvbmUsIGRvZXMgbm90IG1hdGNoIHRoZSBpbnN0YW5jZSBpbiB0aGUgc3RvcmVcbiAgICogQHBhcmFtIChzdGF0ZTogVikgPT4gVFtdXG4gICAqL1xuICBzZWxlY3RJdGVtc1NlbGVjdGVkOiAoc3RhdGU6IFYpID0+IFRbXTtcblxuICAvKipcbiAgICogLSB1c2VkIHRvIHNlbGVjdCBhIGdyb3VwIG9mIHNlbGVjdGVkIGVudGl0aWVzXG4gICAqIC0gcG9wdWxhdGVkIHdpdGggYWN0aW9uIFwiLi4uU2VsZWN0ZWRJdGVtcyh7aXRlbX0pXCIsXG4gICAqIC0gbG9jYWwgY2xvbmUsIGRvZXMgbm90IG1hdGNoIHRoZSBpbnN0YW5jZSBpbiB0aGUgc3RvcmVcbiAgICogQHBhcmFtIChzdGF0ZTogVikgPT4gRGljdGlvbmFyeTxUPlxuICAgKi9cbiAgc2VsZWN0RW50aXRpZXNTZWxlY3RlZDogKHN0YXRlOiBWKSA9PiBEaWN0aW9uYXJ5PFQ+O1xuICAvKipcbiAgICogLSB1c2VkIHRvIHNlbGVjdCBhIGdyb3VwIG9mIHNlbGVjdGVkIGl0ZW1zXG4gICAqIC0gcG9wdWxhdGVkIHdpdGggYWN0aW9uIFwiLi4uU2VsZWN0ZWRJdGVtcyh7aXRlbX0pXCIsXG4gICAqIC0gc2FtZSBpbnN0YW5jZSBvZiB0aGUgc3RvcmUgKHN0YXRlLmVudGl0aWVzKVxuICAgKiAgICAtIHNlbGVjdElkc1NlbGVjdGVkICsgc2VsZWN0RW50aXRpZXMsXG4gICAqIEBwYXJhbSAoc3RhdGU6IFYpID0+IFRbXVxuICAgKi9cbiAgc2VsZWN0SXRlbXNTZWxlY3RlZE9yaWdpbjogKHN0YXRlOiBWKSA9PiBUW107XG4gIC8qKlxuICAgKiAtIHVzZWQgdG8gc2VsZWN0IGxhc3QgY3JpdGVyaWFcbiAgICogQHBhcmFtIChzdGF0ZTogVikgPT4gSUNyaXRlcmlhXG4gICAqL1xuICBzZWxlY3RMYXN0Q3JpdGVyaWE6IChzdGF0ZTogVikgPT4gSUNyaXRlcmlhO1xuICAvKipcbiAgICogLSB1c2VkIHRvIHNlbGVjdCBhbiBlcnJvclxuICAgKiBAcGFyYW0gKHN0YXRlOiBWKSA9PiBzdHJpbmdcbiAgICovXG4gIHNlbGVjdEVycm9yOiAoc3RhdGU6IFYpID0+IHN0cmluZztcbiAgLyoqXG4gICAqIC0gcmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBjYWxscyBpbiBwcm9ncmVzc1xuICAgKiBAQHBhcmFtIChzdGF0ZTogVikgPT4gYm9vbGVhblxuICAgKi9cbiAgc2VsZWN0SXNMb2FkaW5nOiAoc3RhdGU6IFYpID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiAtIHJldHVybnMgdHJ1ZSBpZiBhbGwgY2FsbHMgYXJlIGNvbXBsZXRlZFxuICAgKiBAQHBhcmFtIChzdGF0ZTogVikgPT4gYm9vbGVhblxuICAgKi9cbiAgc2VsZWN0SXNMb2FkZWQ6IChzdGF0ZTogVikgPT4gYm9vbGVhbjtcbiAgLyoqXG4gICAqIC0gdXNlZCB0byBzZWxlY3QgZmlsdGVyc1xuICAgKiBAcGFyYW0gKHN0YXRlOiBWKSA9PiB7W3M6IHN0cmluZ106IEZpbHRlck1ldGFkYXRhO31cbiAgICovXG4gIHNlbGVjdEZpbHRlcnM6IChzdGF0ZTogVikgPT4geyBbczogc3RyaW5nXTogRmlsdGVyTWV0YWRhdGE7IH07XG4gIC8qKlxuICAgKiAtIHVzZWQgdG8gc2VsZWN0IGZpbHRlcmVkIGl0ZW1zXG4gICAqIEBwYXJhbSBNZW1vaXplZFNlbGVjdG9yPFYsIFRbXT5cbiAgICovXG4gIHNlbGVjdEZpbHRlcmVkSXRlbXM6IE1lbW9pemVkU2VsZWN0b3I8ViwgVFtdPjtcbiAgLyoqXG4gICAqIC0gdXNlZCB0byBzZWxlY3QgcmVzcG9uc2UgdmFyaWFibGUgY29udGFpbmVkIGluIHRoZSBmb3JtdWxhXG4gICAqIEBwYXJhbSAoc3RhdGU6IFYpID0+IE9wdFJlc3BvbnNlPFQ+W11cbiAgICovXG4gIHNlbGVjdFJlc3BvbnNlczogKHN0YXRlOiBWKSA9PiBPcHRSZXNwb25zZTxUPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUNydWRTdGF0ZTxUPiBleHRlbmRzIEVudGl0eVN0YXRlPFQ+IHtcbiAgZXJyb3I6IHN0cmluZztcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBpc0xvYWRlZDogYm9vbGVhbjtcbiAgZmlsdGVyczogeyBbczogc3RyaW5nXTogRmlsdGVyTWV0YWRhdGE7IH07XG4gIGxhc3RDcml0ZXJpYTogSUNyaXRlcmlhO1xuICBpdGVtU2VsZWN0ZWQ6IFQ7XG4gIGlkU2VsZWN0ZWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgLy8gLyoqXG4gIC8vICAqIFRPRE86IHF1ZXN0byBhdHRyaWJ1dG8gYW5kcmEgc29zdGl0dWlybyBkYSB1bmEgbGlzdGEgZGkgaWQsIGRcbiAgLy8gICogIGEgdXRpbGl6emFyZSBjb21lIHJpZmVyaW1lbnRpIGFnbGkgZWxlbWVudGkgc2VsZXppb25hdGkuXG4gIC8vICAqIEBkZXByZWNhdGVkIHV0aWxpenphcmUgZW50aXR5U2VsZWN0ZWQvaWRTZWxlY3RlZFxuICAvLyAgKi9cbiAgLy8gaXRlbXNTZWxlY3RlZDogVFtdO1xuICBlbnRpdGllc1NlbGVjdGVkOiBEaWN0aW9uYXJ5PFQ+O1xuXG4gIGlkc1NlbGVjdGVkOiBzdHJpbmdbXSB8IG51bWJlcltdO1xuICAvLyBvZ25pIGVudGl0w6AgcmVnaXN0cmEgbCdhemlvbmUgc2NhdGVuYXRhIGUgbGEgcmlzcG9zdGEgZGFsIHNlcnZlci5cbiAgcmVzcG9uc2VzOiBPcHRSZXNwb25zZTxUPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUNydWRBZGFwdGVyPFQ+IGV4dGVuZHMgRW50aXR5QWRhcHRlcjxUPiB7XG4gIGdldEluaXRpYWxDcnVkU3RhdGUoKTogRW50aXR5Q3J1ZFN0YXRlPFQ+O1xuXG4gIGdldEluaXRpYWxDcnVkU3RhdGU8UyBleHRlbmRzIG9iamVjdD4oc3RhdGU6IFMpOiBFbnRpdHlDcnVkU3RhdGU8VD4gJiBTO1xuXG4gIGdldENydWRTZWxlY3RvcnM8Vj4oc2VsZWN0U3RhdGU6IChzdGF0ZTogVikgPT4gRW50aXR5Q3J1ZFN0YXRlPFQ+KTogRW50aXR5Q3J1ZFNlbGVjdG9yczxULCBWPjtcblxuICBjcmVhdGVDcnVkQWN0aW9ucyhuYW1lOiBzdHJpbmcpOiBBY3Rpb25zPFQ+O1xuXG4gIC8vIHRvZG8gbW9kaWZpY2FyZSBsYSBmaXJtYSBkZWwgbWV0b2RvLCB0aXBpenphcmUgQWN0aW9uczxhbnk+XG4gIGNyZWF0ZUNydWRSZWR1Y2VyPFM+KGluaXRpYWxTdGF0ZTogUywgYWN0aW9uczogQWN0aW9uczxhbnk+KTtcbn1cblxuaW50ZXJmYWNlIFByb3BzU2VhcmNoU3VjY2VzczxUPiB7XG4gIGl0ZW1zOiBUO1xuICByZXF1ZXN0OiBJQ3JpdGVyaWE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uczxUPiB7XG5cbiAgLy8gYXppb25lIGRpc3BhY2NpYXRhIGRhbGwnZWZmZWN0IHNlOlxuICAvLyBPcHRSZXF1ZXN0QmFzZS5kaXNwYXRjaFJlc3BvbnNlID09PSB0cnVlXG4gIC8vIE9wdEVmZmVjdC5kaXNwYXRjaFJlc3BvbnNlID09PSB0cnVlXG4gIFJlc3BvbnNlPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogT3B0UmVzcG9uc2U8VCB8IFRbXT4pID0+IE9wdFJlc3BvbnNlPFQgfCBUW10+ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG4gIFJlc2V0UmVzcG9uc2VzPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsICgpID0+IHsgdHlwZTogc3RyaW5nOyB9PjtcblxuICAvKipcbiAgICogLSBhY3Rpb24gdXNlZCB0byBleGVjdXRlIGFzeW5jaHJvbm91cyByZXNlYXJjaGVzXG4gICAqIEBleGFtcGxlIFN0b3JlQWN0aW9ucy5TZWFyY2hSZXF1ZXN0KHtxdWVyeVBhcmFtczoge319KVxuICAgKiAtIG1vZGU/OiAnUkVGUkVTSCc6IHNlIHZpZW5lIHBhc3NhdG8gaWwgdmFsb3JlIFJFRlJFU0gsIGlsIGRhdG8gcHJlc2VudGUgbmVsbG8gc3RvcmUgdmllbmUgY2FuY2VsbGF0byBwcmltYSBkaSBlc2VndWlyZSBsYSBjaGlhbWF0YSxcbiAgICogICAgICAgIGFsdHJpbWVudGkgaWwgZGF0byB2ZXJyw6Agc29zdGl0dWl0byBhbCByZXN1bHQgZGVsbGEgY2hpYW1hdGFcbiAgICogQHBhcmFtIG1vZGU/OiAnUkVGUkVTSCcgfCAndXBzZXJ0TWFueScgfCAnYWRkQWxsJ1xuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXM/OiBhbnlcbiAgICogQHBhcmFtIHBhdGg/OiBhbnlbXVxuICAgKiBAcGFyYW0gb25GYXVsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBvblJlc3VsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBkaXNwYXRjaFJlc3BvbnNlPzogYm9vbGVhblxuICAgKiBAcGFyYW0gdHlwZTogc3RyaW5nXG4gICAqXG4gICAqL1xuICBTZWFyY2hSZXF1ZXN0PzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogSUNyaXRlcmlhKSA9PiBJQ3JpdGVyaWEgJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcbiAgU2VhcmNoRmFpbHVyZT86IEFjdGlvbkNyZWF0b3I8c3RyaW5nLCAocHJvcHM6IHsgZXJyb3I6IHN0cmluZzsgfSkgPT4geyBlcnJvcjogc3RyaW5nOyB9ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG4gIFNlYXJjaFN1Y2Nlc3M/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGl0ZW1zOiBUW10sIHJlcXVlc3Q6IElDcml0ZXJpYSB9KSA9PiB7IGl0ZW1zOiBUW10sIHJlcXVlc3Q6IElDcml0ZXJpYSB9ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG5cbiAgLyoqXG4gICAqIC0gYWN0aW9uIHVzZWQgdG8gZXhlY3V0ZSBhIHJlcXVlc3QgdG8gcmVtb3ZlIGFuIGl0ZW1cbiAgICogQGV4YW1wbGUgY29uc3QgdG9TdGF0ZTogU3RhdGUgPSBmZWF0dXJlUmVkdWNlcihzdGF0ZSwgYWN0aW9ucy5EZWxldGVSZXF1ZXN0KHBheWxvYWQpKTtcbiAgICogQHBhcmFtIGl0ZW06IFRcbiAgICogQHBhcmFtIHBhdGg/OiBhbnlbXVxuICAgKiBAcGFyYW0gb25GYXVsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBvblJlc3VsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBkaXNwYXRjaFJlc3BvbnNlPzogYm9vbGVhblxuICAgKi9cbiAgRGVsZXRlUmVxdWVzdD86IEFjdGlvbkNyZWF0b3I8c3RyaW5nLCAocHJvcHM6IE9wdFJlcXVlc3QpID0+IE9wdFJlcXVlc3QgJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcbiAgRGVsZXRlRmFpbHVyZT86IEFjdGlvbkNyZWF0b3I8c3RyaW5nLCAocHJvcHM6IHsgZXJyb3I6IHN0cmluZzsgfSkgPT4geyBlcnJvcjogc3RyaW5nOyB9ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG4gIERlbGV0ZVN1Y2Nlc3M/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGlkOiBzdHJpbmc7IH0pID0+IHsgaWQ6IHN0cmluZzsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiAtIGFjdGlvbiB1c2VkIHRvIGV4ZWN1dGUgYSByZXF1ZXN0IHRvIHJlbW92ZSBtb3JlIGl0ZW1zXG4gICAqIEBleGFtcGxlIHRoaXMuc3RvcmUkLmRpc3BhdGNoKDwlPSBjbGF6eiAlPlN0b3JlQWN0aW9ucy5EZWxldGVNYW55UmVxdWVzdCh7aXRlbXN9KSk7XG4gICAqIEBwYXJhbSBpdGVtczogVFtdXG4gICAqIEBwYXJhbSBwYXRoPzogYW55W11cbiAgICogQHBhcmFtIG9uRmF1bHQ/OiBBY3Rpb25bXVxuICAgKiBAcGFyYW0gb25SZXN1bHQ/OiBBY3Rpb25bXVxuICAgKiBAcGFyYW0gZGlzcGF0Y2hSZXNwb25zZT86IGJvb2xlYW5cbiAgICovXG4gIERlbGV0ZU1hbnlSZXF1ZXN0PzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogT3B0UmVxdWVzdCkgPT4gT3B0UmVxdWVzdCAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuICBEZWxldGVNYW55RmFpbHVyZT86IEFjdGlvbkNyZWF0b3I8c3RyaW5nLCAocHJvcHM6IHsgZXJyb3I6IHN0cmluZzsgfSkgPT4geyBlcnJvcjogc3RyaW5nOyB9ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG4gIERlbGV0ZU1hbnlTdWNjZXNzPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogeyBpZHM6IHN0cmluZ1tdOyB9KSA9PiB7IGlkczogc3RyaW5nW107IH0gJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcblxuICAvKipcbiAgICogLSBhY3Rpb24gdXNlZCB0byBleGVjdXRlIGEgcmVxdWVzdCB0byBjcmVhdGUgYSBuZXcgaXRlbVxuICAgKiBAZXhhbXBsZSAgc3RvcmUuZGlzcGF0Y2goYWN0aW9ucy5DcmVhdGVSZXF1ZXN0KHBheWxvYWQpKTtcbiAgICogQHBhcmFtIGl0ZW06IFRcbiAgICogQHBhcmFtIHBhdGg/OiBhbnlbXVxuICAgKiBAcGFyYW0gb25GYXVsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBvblJlc3VsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBkaXNwYXRjaFJlc3BvbnNlPzogYm9vbGVhblxuICAgKi9cbiAgQ3JlYXRlUmVxdWVzdD86IEFjdGlvbkNyZWF0b3I8c3RyaW5nLCAocHJvcHM6IE9wdFJlcXVlc3QpID0+IE9wdFJlcXVlc3QgJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcbiAgQ3JlYXRlRmFpbHVyZT86IEFjdGlvbkNyZWF0b3I8c3RyaW5nLCAocHJvcHM6IHsgZXJyb3I6IHN0cmluZzsgfSkgPT4geyBlcnJvcjogc3RyaW5nOyB9ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG4gIENyZWF0ZVN1Y2Nlc3M/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGl0ZW06IFQ7IH0pID0+IHsgaXRlbTogVDsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiAtIGFjdGlvbiB1c2VkIHRvIGV4ZWN1dGUgYSByZXF1ZXN0IHRvIGNyZWF0ZSBtb3JlIG5ldyBpdGVtc1xuICAgKiBAZXhhbXBsZSBzdG9yZS5kaXNwYXRjaChhY3Rpb25zLkNyZWF0ZU1hbnlSZXF1ZXN0KHBheWxvYWQpKTtcbiAgICogQHBhcmFtIGl0ZW1zOiBUW11cbiAgICogQHBhcmFtIHBhdGg/OiBhbnlbXVxuICAgKiBAcGFyYW0gb25GYXVsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBvblJlc3VsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBkaXNwYXRjaFJlc3BvbnNlPzogYm9vbGVhblxuICAgKi9cbiAgQ3JlYXRlTWFueVJlcXVlc3Q/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiBPcHRSZXF1ZXN0PFRbXSB8IFQ+KSA9PiBPcHRSZXF1ZXN0PFRbXSB8IFQ+ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG4gIENyZWF0ZU1hbnlGYWlsdXJlPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogeyBlcnJvcjogc3RyaW5nOyB9KSA9PiB7IGVycm9yOiBzdHJpbmc7IH0gJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcbiAgQ3JlYXRlTWFueVN1Y2Nlc3M/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGl0ZW1zOiBUW107IH0pID0+IHsgaXRlbXM6IFRbXTsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiAgLSBhY3Rpb24gdXNlZCB0byBleGVjdXRlIGEgcmVxdWVzdCB0byBzZWxlY3QgYW4gaXRlbVxuICAgKiBAZXhhbXBsZSBzdG9yZS5kaXNwYXRjaChhY3Rpb25zLlNlbGVjdFJlcXVlc3QocGF5bG9hZCkpO1xuICAgKiBAcGFyYW0gaXRlbTogVFxuICAgKiBAcGFyYW0gcGF0aD86IGFueVtdXG4gICAqIEBwYXJhbSBvbkZhdWx0PzogQWN0aW9uW11cbiAgICogQHBhcmFtIG9uUmVzdWx0PzogQWN0aW9uW11cbiAgICogQHBhcmFtIGRpc3BhdGNoUmVzcG9uc2U/OiBib29sZWFuXG4gICAqL1xuICBTZWxlY3RSZXF1ZXN0PzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogSUNyaXRlcmlhKSA9PiBJQ3JpdGVyaWEgJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcbiAgU2VsZWN0RmFpbHVyZT86IEFjdGlvbkNyZWF0b3I8c3RyaW5nLCAocHJvcHM6IHsgZXJyb3I6IHN0cmluZzsgfSkgPT4geyBlcnJvcjogc3RyaW5nOyB9ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG4gIFNlbGVjdFN1Y2Nlc3M/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGl0ZW06IFQ7IH0pID0+IHsgaXRlbTogVDsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiAgLSBhY3Rpb24gdXNlZCB0byBleGVjdXRlIGEgcmVxdWVzdCB0byBtb2RpZnkgYW4gaXRlbVxuICAgKiBAZXhhbXBsZSBzdG9yZS5kaXNwYXRjaChhY3Rpb25zLkVkaXRSZXF1ZXN0KHBheWxvYWQpKTtcbiAgICogQHBhcmFtIGl0ZW06IFRcbiAgICogQHBhcmFtIHBhdGg/OiBhbnlbXVxuICAgKiBAcGFyYW0gb25GYXVsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBvblJlc3VsdD86IEFjdGlvbltdXG4gICAqIEBwYXJhbSBkaXNwYXRjaFJlc3BvbnNlPzogYm9vbGVhblxuICAgKi9cbiAgRWRpdFJlcXVlc3Q/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiBPcHRSZXF1ZXN0KSA9PiBPcHRSZXF1ZXN0ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG4gIEVkaXRGYWlsdXJlPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogeyBlcnJvcjogc3RyaW5nOyB9KSA9PiB7IGVycm9yOiBzdHJpbmc7IH0gJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcbiAgRWRpdFN1Y2Nlc3M/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGl0ZW06IFQ7IH0pID0+IHsgaXRlbTogVDsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiAgLSBhY3Rpb24gdXNlZCB0byBleGVjdXRlIGEgcmVxdWVzdCB0byBtb2RpZnkgbW9yZSBpdGVtc1xuICAgKiBAZXhhbXBsZSBzdG9yZS5kaXNwYXRjaChhY3Rpb25zLkVkaXRNYW55UmVxdWVzdChwYXlsb2FkKSk7XG4gICAqIEBwYXJhbSBpdGVtczogVFtdXG4gICAqIEBwYXJhbSBwYXRoPzogYW55W11cbiAgICogQHBhcmFtIG9uRmF1bHQ/OiBBY3Rpb25bXVxuICAgKiBAcGFyYW0gb25SZXN1bHQ/OiBBY3Rpb25bXVxuICAgKiBAcGFyYW0gZGlzcGF0Y2hSZXNwb25zZT86IGJvb2xlYW5cbiAgICovXG4gIEVkaXRNYW55UmVxdWVzdD86IEFjdGlvbkNyZWF0b3I8c3RyaW5nLCAocHJvcHM6IE9wdFJlcXVlc3QpID0+IE9wdFJlcXVlc3QgJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcbiAgRWRpdE1hbnlGYWlsdXJlPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogeyBlcnJvcjogc3RyaW5nOyB9KSA9PiB7IGVycm9yOiBzdHJpbmc7IH0gJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcbiAgRWRpdE1hbnlTdWNjZXNzPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogeyBpdGVtczogVFtdOyB9KSA9PiB7IGl0ZW1zOiBUW107IH0gJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcblxuICAvKipcbiAgICogLSBhY3Rpb24gdXNlZCB0byBleGVjdXRlIGEgc3RvcmUgcmVzZXRcbiAgICogQGV4YW1wbGUgc3RvcmUuZGlzcGF0Y2goYWN0aW9ucy5SZXNldCgpKTtcbiAgICogQHBhcmFtIHR5cGU6IHN0cmluZ1xuICAgKi9cbiAgUmVzZXQ/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKCkgPT4geyB0eXBlOiBzdHJpbmc7IH0+O1xuXG4gIC8qKlxuICAgKiAtIGFjdGlvbiB1c2VkIHRvIGFwcGx5IHNvbWUgZmlsdGVycyBvbiBkYXRhXG4gICAqIEBleGFtcGxlIHN0b3JlLmRpc3BhdGNoKGFjdGlvbnMuRmlsdGVycyhwYXlsb2FkKSk7XG4gICAqIEBwYXJhbSBmaWx0ZXJzOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YTt9XG4gICAqL1xuICBGaWx0ZXJzPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogeyBmaWx0ZXJzOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YTsgfTsgfSkgPT4geyBmaWx0ZXJzOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YTsgfTsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuXG4gIC8vIHNlbGV6aW9uZSBsb2NhbGUgZGkgKyBlbGVtZW50aVxuICAvKipcbiAgICogLSBhY3Rpb24gdXNlZCB0byBpZGVudGlmeSBhIGdyb3VwIG9mIGl0ZW1zIHRvIHNlbGVjdFxuICAgKiBAZXhhbXBsZSBzdG9yZS5kaXNwYXRjaChhY3Rpb25zLlNlbGVjdEl0ZW1zKHBheWxvYWQpKTtcbiAgICogQHBhcmFtIGl0ZW1zOiBUW11cbiAgICovXG4gIFNlbGVjdEl0ZW1zPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogeyBpdGVtczogVFtdOyB9KSA9PiB7IGl0ZW1zOiBUW107IH0gJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcbiAgLy8gVE9ETzogZG9jXG4gIEFkZE1hbnlTZWxlY3RlZD86IEFjdGlvbkNyZWF0b3I8c3RyaW5nLCAocHJvcHM6IHsgaXRlbXM6IFRbXTsgfSkgPT4geyBpdGVtczogVFtdOyB9ICYgVHlwZWRBY3Rpb248c3RyaW5nPj47XG4gIC8vIFRPRE86IGRvY1xuICBSZW1vdmVNYW55U2VsZWN0ZWQ/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGlkczogc3RyaW5nW107IH0pID0+IHsgaWRzOiBzdHJpbmdbXTsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuICAvLyBUT0RPOiBkb2NcbiAgUmVtb3ZlQWxsU2VsZWN0ZWQ/OiBBY3Rpb25DcmVhdG9yPHN0cmluZz47XG4gIC8qKlxuICAgKiAtIGFjdGlvbiB1c2VkIHRvIGlkZW50aWZ5IGEgc2luZ2xlIGl0ZW0gdG8gc2VsZWN0XG4gICAqIEBleGFtcGxlIHN0b3JlLmRpc3BhdGNoKGFjdGlvbnMuU2VsZWN0SXRlbShwYXlsb2FkKSk7XG4gICAqIEBwYXJhbSBpdGVtOiBUXG4gICAqL1xuICBTZWxlY3RJdGVtPzogQWN0aW9uQ3JlYXRvcjxzdHJpbmcsIChwcm9wczogeyBpdGVtOiBUOyB9KSA9PiB7IGl0ZW06IFQ7IH0gJiBUeXBlZEFjdGlvbjxzdHJpbmc+PjtcblxuICAvKipcbiAgICogLSBhY3Rpb24gdXNlZCB0byBtb2RpZnkgYW4gaXRlbSBvbiB0aGUgc3RvcmVcbiAgICogQGV4YW1wbGUgc3RvcmUuZGlzcGF0Y2goYWN0aW9ucy5FZGl0KHBheWxvYWQpKTtcbiAgICogQHBhcmFtIGl0ZW06IFRcbiAgICovXG4gIEVkaXQ/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGl0ZW06IFQ7IH0pID0+IHsgaXRlbTogVDsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiAtIGFjdGlvbiB1c2VkIHRvIGNyZWF0ZSBhbiBpdGVtIG9uIHRoZSBzdG9yZVxuICAgKiBAZXhhbXBsZSBzdG9yZS5kaXNwYXRjaChhY3Rpb25zLkNyZWF0ZShwYXlsb2FkKSk7XG4gICAqIEBwYXJhbSBpdGVtOiBUXG4gICAqL1xuICBDcmVhdGU/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGl0ZW06IFQ7IH0pID0+IHsgaXRlbTogVDsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiAtIGFjdGlvbiB1c2VkIHRvIHJlbW92ZSBhbiBpdGVtIG9uIHRoZSBzdG9yZVxuICAgKiBAZXhhbXBsZSBjb25zdCB0b1N0YXRlOiBTdGF0ZSA9IGZlYXR1cmVSZWR1Y2VyKGV4cGVjdFN0YXRlLCBhY3Rpb25zLkRlbGV0ZShwYXlsb2FkKSk7XG4gICAqIEBwYXJhbSBpZDogc3RyaW5nXG4gICAqL1xuICBEZWxldGU/OiBBY3Rpb25DcmVhdG9yPHN0cmluZywgKHByb3BzOiB7IGlkOiBzdHJpbmc7IH0pID0+IHsgaWQ6IHN0cmluZzsgfSAmIFR5cGVkQWN0aW9uPHN0cmluZz4+O1xuXG59XG4iXX0=