@kaspernj/api-maker 1.0.2056 → 1.0.2057

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 (209) hide show
  1. package/build/api.js +22 -16
  2. package/build/attribute-not-loaded-error.js +5 -2
  3. package/build/base-component.js +6 -3
  4. package/build/base-error.js +15 -9
  5. package/build/base-model/attribute.js +10 -4
  6. package/build/base-model/column.js +5 -2
  7. package/build/base-model/reflection.js +49 -10
  8. package/build/base-model/scope.js +41 -5
  9. package/build/base-model.js +115 -76
  10. package/build/bootstrap/attribute-row.js +71 -33
  11. package/build/bootstrap/attribute-rows.js +20 -15
  12. package/build/bootstrap/card.js +72 -34
  13. package/build/bootstrap/checkbox.js +35 -30
  14. package/build/bootstrap/checkboxes.js +69 -31
  15. package/build/bootstrap/index.d.ts +1 -0
  16. package/build/bootstrap/index.js +2 -0
  17. package/build/bootstrap/input.js +48 -43
  18. package/build/bootstrap/invalid-feedback.js +17 -11
  19. package/build/bootstrap/paginate.js +73 -35
  20. package/build/bootstrap/radio-buttons.js +33 -28
  21. package/build/bootstrap/select.js +34 -29
  22. package/build/bootstrap/sort-link.js +68 -30
  23. package/build/cable-connection-pool.js +18 -12
  24. package/build/cable-subscription-pool.js +58 -19
  25. package/build/cable-subscription.d.ts +2 -2
  26. package/build/cable-subscription.d.ts.map +1 -1
  27. package/build/cable-subscription.js +12 -6
  28. package/build/cache-key-generator.js +11 -5
  29. package/build/can-can.d.ts +2 -2
  30. package/build/can-can.d.ts.map +1 -1
  31. package/build/can-can.js +56 -17
  32. package/build/channels-consumer.js +10 -5
  33. package/build/collection-loader.js +36 -31
  34. package/build/collection.js +58 -19
  35. package/build/command-submit-data.d.ts +1 -1
  36. package/build/command-submit-data.d.ts.map +1 -1
  37. package/build/command-submit-data.js +10 -4
  38. package/build/commands-pool.js +39 -33
  39. package/build/compose.js +5 -2
  40. package/build/config.d.ts +3 -3
  41. package/build/config.d.ts.map +1 -1
  42. package/build/config.js +40 -6
  43. package/build/custom-error.js +9 -4
  44. package/build/data-set-to-attributes.js +39 -3
  45. package/build/deserializer.js +57 -18
  46. package/build/destroy-error.js +9 -4
  47. package/build/devise.d.ts +1 -1
  48. package/build/devise.d.ts.map +1 -1
  49. package/build/devise.js +55 -16
  50. package/build/draggable-sort/controller.js +14 -11
  51. package/build/draggable-sort/index.js +69 -31
  52. package/build/draggable-sort/item.js +70 -32
  53. package/build/error-logger.js +14 -8
  54. package/build/error-messages.js +8 -5
  55. package/build/event-connection.js +18 -12
  56. package/build/event-emitter-listener.js +9 -4
  57. package/build/event-model-class.js +17 -11
  58. package/build/events.d.ts +2 -2
  59. package/build/events.d.ts.map +1 -1
  60. package/build/events.js +6 -5
  61. package/build/form.js +69 -27
  62. package/build/history-expo.js +11 -6
  63. package/build/history-react-native.js +14 -9
  64. package/build/history.js +5 -3
  65. package/build/index.js +5 -2
  66. package/build/inputs/attachment.js +29 -24
  67. package/build/inputs/auto-submit.js +42 -6
  68. package/build/inputs/checkbox.js +73 -35
  69. package/build/inputs/checkboxes.js +68 -30
  70. package/build/inputs/id-for-component.js +39 -3
  71. package/build/inputs/input-wrapper.js +12 -7
  72. package/build/inputs/input.js +101 -62
  73. package/build/inputs/money.js +85 -47
  74. package/build/inputs/name-for-component.js +39 -3
  75. package/build/inputs/select.js +32 -26
  76. package/build/instance-of-class-name.js +7 -5
  77. package/build/is-expo.js +8 -6
  78. package/build/key-value-store.js +10 -4
  79. package/build/link.js +21 -16
  80. package/build/logger.js +5 -2
  81. package/build/merge-styles.js +7 -4
  82. package/build/modal.js +15 -10
  83. package/build/model-class-require.js +39 -4
  84. package/build/model-events.js +20 -14
  85. package/build/model-name.js +44 -5
  86. package/build/model-prop-type.js +15 -9
  87. package/build/model-recipes-loader.js +14 -8
  88. package/build/model-recipes-model-loader.d.ts +1 -1
  89. package/build/model-recipes-model-loader.js +57 -18
  90. package/build/models-response-reader.js +46 -7
  91. package/build/models.js +10 -5
  92. package/build/money-formatter.d.ts +2 -2
  93. package/build/money-formatter.d.ts.map +1 -1
  94. package/build/money-formatter.js +19 -13
  95. package/build/not-loaded-error.js +5 -2
  96. package/build/params.js +19 -13
  97. package/build/preloaded.js +44 -5
  98. package/build/resize-observer.js +11 -6
  99. package/build/rest-props-validator.js +4 -2
  100. package/build/result.js +5 -2
  101. package/build/router/route.js +82 -40
  102. package/build/router/switch.js +56 -17
  103. package/build/router.js +59 -21
  104. package/build/routes-native.js +54 -15
  105. package/build/routes.js +49 -13
  106. package/build/run-last.js +5 -2
  107. package/build/serializer.js +8 -5
  108. package/build/services.js +10 -4
  109. package/build/session-status-updater.js +53 -14
  110. package/build/source-maps-loader.js +50 -11
  111. package/build/super-admin/config-reader.d.ts +2 -2
  112. package/build/super-admin/config-reader.js +45 -9
  113. package/build/super-admin/edit-page/edit-attribute-checkbox.js +61 -23
  114. package/build/super-admin/edit-page/edit-attribute-content.js +21 -16
  115. package/build/super-admin/edit-page/edit-attribute-input.js +59 -21
  116. package/build/super-admin/edit-page/edit-attribute.js +65 -27
  117. package/build/super-admin/edit-page.js +72 -34
  118. package/build/super-admin/has-edit-config.js +9 -4
  119. package/build/super-admin/index-page.js +17 -12
  120. package/build/super-admin/index.js +84 -46
  121. package/build/super-admin/layout/header/index.js +63 -25
  122. package/build/super-admin/layout/index.js +78 -40
  123. package/build/super-admin/layout/menu/index.js +47 -42
  124. package/build/super-admin/layout/menu/menu-content.js +60 -22
  125. package/build/super-admin/layout/menu/menu-item.js +23 -18
  126. package/build/super-admin/layout/no-access.js +20 -15
  127. package/build/super-admin/model-class-table.js +64 -26
  128. package/build/super-admin/models.js +38 -3
  129. package/build/super-admin/show-nav.js +61 -23
  130. package/build/super-admin/show-page/belongs-to-attribute-row.js +52 -14
  131. package/build/super-admin/show-page/index.js +63 -25
  132. package/build/super-admin/show-reflection-actions.js +62 -24
  133. package/build/super-admin/show-reflection-link.js +19 -14
  134. package/build/super-admin/show-reflection-page.js +63 -25
  135. package/build/table/column-content.js +54 -15
  136. package/build/table/column-identifier.js +5 -2
  137. package/build/table/column-visible.js +5 -2
  138. package/build/table/components/column.js +14 -9
  139. package/build/table/components/flat-list.js +14 -9
  140. package/build/table/components/header.js +16 -11
  141. package/build/table/components/row.js +16 -11
  142. package/build/table/filters/attribute-element.js +26 -21
  143. package/build/table/filters/filter-form.js +109 -71
  144. package/build/table/filters/filter.js +29 -24
  145. package/build/table/filters/index.js +43 -38
  146. package/build/table/filters/load-search-modal.js +64 -26
  147. package/build/table/filters/reflection-element.js +22 -17
  148. package/build/table/filters/save-search-modal.js +27 -22
  149. package/build/table/filters/scope-element.js +19 -14
  150. package/build/table/header-column-content.js +27 -22
  151. package/build/table/header-column.js +71 -33
  152. package/build/table/header-select.js +29 -24
  153. package/build/table/model-callback-args.js +39 -3
  154. package/build/table/model-column.js +75 -37
  155. package/build/table/model-row.js +79 -41
  156. package/build/table/select-calculator.js +52 -13
  157. package/build/table/settings/column-row.js +57 -19
  158. package/build/table/settings/download-action.js +31 -26
  159. package/build/table/settings/index.js +61 -23
  160. package/build/table/table-settings.js +70 -31
  161. package/build/table/table.js +196 -158
  162. package/build/table/use-sorting.js +12 -6
  163. package/build/table/widths.js +12 -9
  164. package/build/table/worker-plugins-check-all-checkbox.js +64 -26
  165. package/build/table/worker-plugins-checkbox.js +61 -23
  166. package/build/translated-attributes.js +5 -2
  167. package/build/translated-collections.js +14 -8
  168. package/build/updated-attribute.js +21 -15
  169. package/build/url-encode.js +10 -4
  170. package/build/use-breakpoint.js +58 -20
  171. package/build/use-can-can.js +21 -15
  172. package/build/use-collection.js +70 -32
  173. package/build/use-created-event.js +27 -22
  174. package/build/use-current-user-context.js +74 -36
  175. package/build/use-current-user.d.ts +2 -2
  176. package/build/use-current-user.d.ts.map +1 -1
  177. package/build/use-current-user.js +17 -11
  178. package/build/use-destroyed-event.js +18 -13
  179. package/build/use-event-emitter.js +13 -7
  180. package/build/use-event-listener.js +12 -7
  181. package/build/use-input.js +33 -28
  182. package/build/use-model-event.js +18 -13
  183. package/build/use-model.js +65 -27
  184. package/build/use-resize-observer.js +13 -8
  185. package/build/use-router.js +62 -24
  186. package/build/use-screen-layout.js +7 -5
  187. package/build/use-styles.js +52 -13
  188. package/build/use-updated-event.js +18 -13
  189. package/build/use-validation-errors.js +14 -9
  190. package/build/utils/button.js +33 -28
  191. package/build/utils/card.js +61 -23
  192. package/build/utils/checkbox.js +60 -22
  193. package/build/utils/checkboxes.js +78 -40
  194. package/build/utils/default-style.js +56 -15
  195. package/build/utils/header.js +12 -7
  196. package/build/utils/icon.js +61 -23
  197. package/build/utils/invalid-feedback.js +17 -12
  198. package/build/utils/modal.js +55 -17
  199. package/build/utils/text.js +14 -9
  200. package/build/validation-error.js +45 -6
  201. package/build/validation-errors.js +59 -19
  202. package/build/with-api-maker.js +52 -12
  203. package/build/with-collection.js +50 -12
  204. package/build/with-current-user.js +12 -7
  205. package/build/with-model.js +14 -9
  206. package/build/with-router.js +12 -7
  207. package/package.json +2 -1
  208. package/build/source-maps-loader.d.ts +0 -37
  209. package/build/source-maps-loader.d.ts.map +0 -1
@@ -1,44 +1,82 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo, useRef } from "react";
3
- import { ActivityIndicator, View } from "react-native";
4
- import AttributeElement from "./attribute-element";
5
- import BaseComponent from "../../base-component.js";
6
- import Button from "../../utils/button";
7
- import Card from "../../utils/card";
8
- import { digg, digs } from "diggerize";
9
- import * as inflection from "inflection";
10
- import { Form } from "../../form";
11
- import Header from "../../utils/header";
12
- import Input from "../../inputs/input";
13
- import memo from "set-state-compare/build/memo.js";
14
- import Params from "../../params.js";
15
- import PropTypes from "prop-types";
16
- import PropTypesExact from "prop-types-exact";
17
- import React from "react";
18
- import ReflectionElement from "./reflection-element";
19
- import ScopeElement from "./scope-element";
20
- import Select from "../../inputs/select";
21
- import Services from "../../services.js";
22
- import { shapeComponent } from "set-state-compare/build/shape-component.js";
23
- import Text from "../../utils/text";
24
- import useBreakpoint from "../../use-breakpoint.js";
25
- import useI18n from "i18n-on-steroids/src/use-i18n.mjs";
26
- export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends BaseComponent {
27
- static propTypes = PropTypesExact({
28
- filter: PropTypes.object,
29
- modelClass: PropTypes.func.isRequired,
30
- onApplyClicked: PropTypes.func.isRequired,
31
- onRequestClose: PropTypes.func.isRequired,
32
- querySearchName: PropTypes.string.isRequired
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const jsx_runtime_1 = require("react/jsx-runtime");
40
+ const react_1 = require("react");
41
+ const react_native_1 = require("react-native");
42
+ const attribute_element_1 = __importDefault(require("./attribute-element"));
43
+ const base_component_js_1 = __importDefault(require("../../base-component.js"));
44
+ const button_1 = __importDefault(require("../../utils/button"));
45
+ const card_1 = __importDefault(require("../../utils/card"));
46
+ const diggerize_1 = require("diggerize");
47
+ const inflection = __importStar(require("inflection"));
48
+ const form_1 = require("../../form");
49
+ const header_1 = __importDefault(require("../../utils/header"));
50
+ const input_1 = __importDefault(require("../../inputs/input"));
51
+ const memo_js_1 = __importDefault(require("set-state-compare/build/memo.js"));
52
+ const params_js_1 = __importDefault(require("../../params.js"));
53
+ const prop_types_1 = __importDefault(require("prop-types"));
54
+ const prop_types_exact_1 = __importDefault(require("prop-types-exact"));
55
+ const react_2 = __importDefault(require("react"));
56
+ const reflection_element_1 = __importDefault(require("./reflection-element"));
57
+ const scope_element_1 = __importDefault(require("./scope-element"));
58
+ const select_1 = __importDefault(require("../../inputs/select"));
59
+ const services_js_1 = __importDefault(require("../../services.js"));
60
+ const shape_component_js_1 = require("set-state-compare/build/shape-component.js");
61
+ const text_1 = __importDefault(require("../../utils/text"));
62
+ const use_breakpoint_js_1 = __importDefault(require("../../use-breakpoint.js"));
63
+ const use_i18n_mjs_1 = __importDefault(require("i18n-on-steroids/src/use-i18n.mjs"));
64
+ exports.default = (0, memo_js_1.default)((0, shape_component_js_1.shapeComponent)(class ApiMakerTableFiltersFilterForm extends base_component_js_1.default {
65
+ static propTypes = (0, prop_types_exact_1.default)({
66
+ filter: prop_types_1.default.object,
67
+ modelClass: prop_types_1.default.func.isRequired,
68
+ onApplyClicked: prop_types_1.default.func.isRequired,
69
+ onRequestClose: prop_types_1.default.func.isRequired,
70
+ querySearchName: prop_types_1.default.string.isRequired
33
71
  });
34
72
  setup() {
35
- const { t } = useI18n({ namespace: "js.api_maker.table.filters.filter_form" });
73
+ const { t } = (0, use_i18n_mjs_1.default)({ namespace: "js.api_maker.table.filters.filter_form" });
36
74
  this.useStates({
37
75
  associations: null,
38
76
  attribute: undefined,
39
77
  actualCurrentModelClass: () => ({ modelClass: this.p.modelClass }),
40
78
  loading: 0,
41
- modelClassName: digg(this.p.modelClass.modelClassData(), "className"),
79
+ modelClassName: (0, diggerize_1.digg)(this.p.modelClass.modelClassData(), "className"),
42
80
  path: [],
43
81
  predicate: undefined,
44
82
  predicates: undefined,
@@ -48,21 +86,21 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
48
86
  value: this.props.filter.v
49
87
  });
50
88
  this.setInstance({
51
- breakpoint: useBreakpoint(),
89
+ breakpoint: (0, use_breakpoint_js_1.default)(),
52
90
  t,
53
- valueInputRef: useRef(),
91
+ valueInputRef: (0, react_1.useRef)(),
54
92
  });
55
- useMemo(() => {
93
+ (0, react_1.useMemo)(() => {
56
94
  this.loadRansackPredicates();
57
95
  if (this.props.filter.v) {
58
96
  this.loadInitialValuesWithLoadingIndicator();
59
97
  }
60
98
  }, []);
61
- useMemo(() => {
99
+ (0, react_1.useMemo)(() => {
62
100
  this.loadAssociations();
63
101
  }, [this.s.modelClassName]);
64
102
  }
65
- currentModelClass = () => digg(this.s.actualCurrentModelClass, "modelClass");
103
+ currentModelClass = () => (0, diggerize_1.digg)(this.s.actualCurrentModelClass, "modelClass");
66
104
  parseAssociationData(result) {
67
105
  const associations = result.associations.map(({ human_name, model_class_name, reflection_name, resource }) => ({
68
106
  humanName: human_name,
@@ -70,10 +108,10 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
70
108
  reflectionName: inflection.camelize(reflection_name, true),
71
109
  resource
72
110
  }));
73
- const ransackableAttributes = digg(result, "ransackable_attributes").map(({ attribute_name: attributeName, human_name: humanName }) => ({
111
+ const ransackableAttributes = (0, diggerize_1.digg)(result, "ransackable_attributes").map(({ attribute_name: attributeName, human_name: humanName }) => ({
74
112
  attributeName, humanName
75
113
  }));
76
- const ransackableScopes = digg(result, "ransackable_scopes");
114
+ const ransackableScopes = (0, diggerize_1.digg)(result, "ransackable_scopes");
77
115
  return { associations, ransackableAttributes, ransackableScopes };
78
116
  }
79
117
  async loadAssociations() {
@@ -81,7 +119,7 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
81
119
  try {
82
120
  if (!this.s.modelClassName)
83
121
  throw new Error("'modelClassName' not set in state");
84
- const result = await Services.current().sendRequest("Models::Associations", { model_class_name: this.s.modelClassName });
122
+ const result = await services_js_1.default.current().sendRequest("Models::Associations", { model_class_name: this.s.modelClassName });
85
123
  const { associations, ransackableAttributes, ransackableScopes } = this.parseAssociationData(result);
86
124
  this.setState({ associations, ransackableAttributes, ransackableScopes });
87
125
  }
@@ -103,33 +141,33 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
103
141
  async loadInitialValues() {
104
142
  if (!this.s.modelClassName)
105
143
  throw new Error("'modelClassName' not set in state");
106
- let result = await Services.current().sendRequest("Models::Associations", { model_class_name: this.s.modelClassName });
144
+ let result = await services_js_1.default.current().sendRequest("Models::Associations", { model_class_name: this.s.modelClassName });
107
145
  let data = this.parseAssociationData(result);
108
146
  let modelClassName = this.s.modelClassName;
109
147
  const path = [];
110
148
  for (const pathPart of this.props.filter.p) {
111
- const reflection = data.associations.find((association) => digg(association, "reflectionName") == inflection.camelize(pathPart, true));
149
+ const reflection = data.associations.find((association) => (0, diggerize_1.digg)(association, "reflectionName") == inflection.camelize(pathPart, true));
112
150
  if (!reflection)
113
151
  throw new Error(`Couldn't find association by that name ${this.s.modelClassName}#${pathPart}`);
114
- modelClassName = digg(reflection, "modelClassName");
152
+ modelClassName = (0, diggerize_1.digg)(reflection, "modelClassName");
115
153
  if (!modelClassName) {
116
154
  const pathNames = path.map((pathPart) => pathPart.name()).join(".");
117
155
  throw new Error(`No model class name from ${pathNames}.${reflection.name()}`);
118
156
  }
119
- result = await Services.current().sendRequest("Models::Associations", { model_class_name: modelClassName });
157
+ result = await services_js_1.default.current().sendRequest("Models::Associations", { model_class_name: modelClassName });
120
158
  data = this.parseAssociationData(result);
121
159
  path.push(reflection);
122
160
  }
123
161
  const { ransackableAttributes } = data;
124
162
  const attribute = this.p.filter.a;
125
- const ransackableAttribute = ransackableAttributes.find((ransackableAttribute) => digg(ransackableAttribute, "attributeName") == attribute);
163
+ const ransackableAttribute = ransackableAttributes.find((ransackableAttribute) => (0, diggerize_1.digg)(ransackableAttribute, "attributeName") == attribute);
126
164
  this.setState({ attribute: ransackableAttribute, modelClassName, path });
127
165
  }
128
166
  async loadRansackPredicates() {
129
167
  this.increaseLoading();
130
168
  try {
131
- const response = await Services.current().sendRequest("Ransack::Predicates");
132
- const predicates = digg(response, "predicates");
169
+ const response = await services_js_1.default.current().sendRequest("Ransack::Predicates");
170
+ const predicates = (0, diggerize_1.digg)(response, "predicates");
133
171
  let currentPredicate;
134
172
  if (this.props.filter.pre) {
135
173
  currentPredicate = predicates.find((predicate) => predicate.name == this.props.filter.pre);
@@ -154,26 +192,26 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
154
192
  else if (scope) {
155
193
  submitEnabled = true;
156
194
  }
157
- return (_jsxs(Card, { testID: "api-maker/table/filters/filter-form", style: this.cache("cardStyle", {
195
+ return ((0, jsx_runtime_1.jsxs)(card_1.default, { testID: "api-maker/table/filters/filter-form", style: this.cache("cardStyle", {
158
196
  width: mdUp ? undefined : "100%",
159
197
  minWidth: 50,
160
198
  minHeight: 50
161
- }, [mdUp]), children: [_jsxs(Form, { onSubmit: this.tt.onSubmit, children: [_jsx(View, { style: { flexDirection: "row" }, children: path.map(({ humanName, reflectionName }, pathPartIndex) => _jsxs(View, { style: { flexDirection: "row" }, children: [pathPartIndex > 0 &&
162
- _jsx(Text, { style: { marginRight: 5, marginLeft: 5 }, children: "-" }), _jsx(Text, { children: humanName })] }, `${pathPartIndex}-${reflectionName}`)) }), _jsxs(View, { style: { flexDirection: mdUp ? "row" : "column" }, children: [_jsxs(View, { style: { marginTop: mdUp ? undefined : 25 }, children: [_jsx(Header, { children: t(".relationships", { defaultValue: "Relationships" }) }), this.s.associations && this.sortedReflectionsByName(this.s.associations).map((reflection) => _jsx(ReflectionElement, { modelClassName: this.s.modelClassName, onClick: this.tt.onReflectionClicked, reflection: reflection }, reflection.reflectionName))] }), _jsxs(View, { style: { marginTop: mdUp ? undefined : 25 }, children: [_jsx(Header, { children: t(".attributes", { defaultValue: "Attributes" }) }), this.s.ransackableAttributes && this.sortedAttributesByName(this.s.ransackableAttributes)?.map((attribute) => _jsx(AttributeElement, { active: attribute.attributeName == this.s.attribute?.attributeName, attribute: attribute, modelClassName: this.s.modelClassName, onClick: this.tt.onAttributeClicked }, attribute.attributeName)), this.s.ransackableScopes?.map((scope) => _jsx(ScopeElement, { active: scope == this.s.scope, scope: scope, onScopeClicked: this.tt.onScopeClicked }, scope))] }), _jsxs(View, { style: { marginTop: mdUp ? undefined : 25 }, children: [_jsx(Header, { children: t(".search", { defaultValue: "Search" }) }), _jsx(View, { children: predicates && !this.s.scope &&
163
- _jsx(Select, { className: "predicate-select", defaultValue: predicate?.name, includeBlank: true, onChange: this.tt.onPredicateChanged, options: predicates.map((predicate) => digg(predicate, "name")) }) }), _jsx(View, { style: { marginTop: 10 }, children: ((attribute && predicate) || scope) &&
164
- _jsx(Input, { className: "value-input", defaultValue: value, inputRef: valueInputRef }) })] })] }), _jsxs(View, { style: { flexDirection: "row", justifyContent: "end", marginTop: 10 }, children: [_jsx(Button, { danger: true, icon: "remove", label: t(".cancel", { defaultValue: "Cancel" }), onPress: this.p.onRequestClose, pressableProps: this.cancelButtonPressableProps ||= {
199
+ }, [mdUp]), children: [(0, jsx_runtime_1.jsxs)(form_1.Form, { onSubmit: this.tt.onSubmit, children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flexDirection: "row" }, children: path.map(({ humanName, reflectionName }, pathPartIndex) => (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: "row" }, children: [pathPartIndex > 0 &&
200
+ (0, jsx_runtime_1.jsx)(text_1.default, { style: { marginRight: 5, marginLeft: 5 }, children: "-" }), (0, jsx_runtime_1.jsx)(text_1.default, { children: humanName })] }, `${pathPartIndex}-${reflectionName}`)) }), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: mdUp ? "row" : "column" }, children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { marginTop: mdUp ? undefined : 25 }, children: [(0, jsx_runtime_1.jsx)(header_1.default, { children: t(".relationships", { defaultValue: "Relationships" }) }), this.s.associations && this.sortedReflectionsByName(this.s.associations).map((reflection) => (0, jsx_runtime_1.jsx)(reflection_element_1.default, { modelClassName: this.s.modelClassName, onClick: this.tt.onReflectionClicked, reflection: reflection }, reflection.reflectionName))] }), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { marginTop: mdUp ? undefined : 25 }, children: [(0, jsx_runtime_1.jsx)(header_1.default, { children: t(".attributes", { defaultValue: "Attributes" }) }), this.s.ransackableAttributes && this.sortedAttributesByName(this.s.ransackableAttributes)?.map((attribute) => (0, jsx_runtime_1.jsx)(attribute_element_1.default, { active: attribute.attributeName == this.s.attribute?.attributeName, attribute: attribute, modelClassName: this.s.modelClassName, onClick: this.tt.onAttributeClicked }, attribute.attributeName)), this.s.ransackableScopes?.map((scope) => (0, jsx_runtime_1.jsx)(scope_element_1.default, { active: scope == this.s.scope, scope: scope, onScopeClicked: this.tt.onScopeClicked }, scope))] }), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { marginTop: mdUp ? undefined : 25 }, children: [(0, jsx_runtime_1.jsx)(header_1.default, { children: t(".search", { defaultValue: "Search" }) }), (0, jsx_runtime_1.jsx)(react_native_1.View, { children: predicates && !this.s.scope &&
201
+ (0, jsx_runtime_1.jsx)(select_1.default, { className: "predicate-select", defaultValue: predicate?.name, includeBlank: true, onChange: this.tt.onPredicateChanged, options: predicates.map((predicate) => (0, diggerize_1.digg)(predicate, "name")) }) }), (0, jsx_runtime_1.jsx)(react_native_1.View, { style: { marginTop: 10 }, children: ((attribute && predicate) || scope) &&
202
+ (0, jsx_runtime_1.jsx)(input_1.default, { className: "value-input", defaultValue: value, inputRef: valueInputRef }) })] })] }), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: "row", justifyContent: "end", marginTop: 10 }, children: [(0, jsx_runtime_1.jsx)(button_1.default, { danger: true, icon: "remove", label: t(".cancel", { defaultValue: "Cancel" }), onPress: this.p.onRequestClose, pressableProps: this.cancelButtonPressableProps ||= {
165
203
  marginRight: 5
166
- } }), _jsx(Button, { disabled: !submitEnabled, icon: "check", label: t(".apply", { defaultValue: "Apply" }), pressableProps: this.appleButtonPressableProps ||= {
204
+ } }), (0, jsx_runtime_1.jsx)(button_1.default, { disabled: !submitEnabled, icon: "check", label: t(".apply", { defaultValue: "Apply" }), pressableProps: this.appleButtonPressableProps ||= {
167
205
  style: { marginLeft: 5 },
168
206
  testID: "apply-filter-button"
169
207
  }, submit: true })] })] }), this.s.loading > 0 &&
170
- _jsx(View, { style: {
208
+ (0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
171
209
  alignItems: "center",
172
210
  justifyContent: "center",
173
211
  position: "absolute",
174
212
  width: "100%",
175
213
  height: "100%"
176
- }, children: _jsx(ActivityIndicator, { size: "large" }) })] }));
214
+ }, children: (0, jsx_runtime_1.jsx)(react_native_1.ActivityIndicator, { size: "large" }) })] }));
177
215
  }
178
216
  currentModelClassFromPath(path) {
179
217
  const { modelClass } = this.p;
@@ -216,7 +254,7 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
216
254
  });
217
255
  };
218
256
  onPredicateChanged = (e) => {
219
- const chosenPredicateName = digg(e, "target", "value");
257
+ const chosenPredicateName = (0, diggerize_1.digg)(e, "target", "value");
220
258
  const predicate = this.s.predicates.find((predicate) => predicate.name == chosenPredicateName);
221
259
  this.setState({ predicate });
222
260
  };
@@ -225,8 +263,8 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
225
263
  this.setState({
226
264
  associations: null,
227
265
  attribute: undefined,
228
- actualCurrentModelClass: { modelClass: digg(reflection, "resource") },
229
- modelClassName: digg(reflection, "modelClassName"),
266
+ actualCurrentModelClass: { modelClass: (0, diggerize_1.digg)(reflection, "resource") },
267
+ modelClassName: (0, diggerize_1.digg)(reflection, "modelClassName"),
230
268
  path: newPath,
231
269
  predicate: undefined
232
270
  });
@@ -241,17 +279,17 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
241
279
  onSubmit = () => {
242
280
  const { filter, querySearchName } = this.p;
243
281
  const { attribute, path, predicate, scope } = this.s;
244
- const { filterIndex } = digs(filter, "filterIndex");
245
- const searchParams = Params.parse()[querySearchName] || {};
246
- const value = digg(this.tt.valueInputRef, "current", "value");
282
+ const { filterIndex } = (0, diggerize_1.digs)(filter, "filterIndex");
283
+ const searchParams = params_js_1.default.parse()[querySearchName] || {};
284
+ const value = (0, diggerize_1.digg)(this.tt.valueInputRef, "current", "value");
247
285
  const p = path.map((reflection) => inflection.underscore(reflection.reflectionName));
248
286
  const newSearchParams = {
249
287
  p,
250
288
  v: value
251
289
  };
252
290
  if (attribute) {
253
- newSearchParams.a = digg(attribute, "attributeName");
254
- newSearchParams.pre = digg(predicate, "name");
291
+ newSearchParams.a = (0, diggerize_1.digg)(attribute, "attributeName");
292
+ newSearchParams.pre = (0, diggerize_1.digg)(predicate, "name");
255
293
  }
256
294
  else if (scope) {
257
295
  newSearchParams.sc = scope;
@@ -262,7 +300,7 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
262
300
  searchParams[filterIndex] = JSON.stringify(newSearchParams);
263
301
  const newParams = {};
264
302
  newParams[querySearchName] = searchParams;
265
- Params.changeParams(newParams);
303
+ params_js_1.default.changeParams(newParams);
266
304
  this.props.onApplyClicked();
267
305
  };
268
306
  reflectionsWithModelClass(reflections) {
@@ -277,14 +315,14 @@ export default memo(shapeComponent(class ApiMakerTableFiltersFilterForm extends
277
315
  });
278
316
  }
279
317
  sortedAttributesByName(attributes) {
280
- return attributes.sort((a, b) => digg(a, "humanName")
318
+ return attributes.sort((a, b) => (0, diggerize_1.digg)(a, "humanName")
281
319
  .toLowerCase()
282
- .localeCompare(digg(b, "humanName").toLowerCase()));
320
+ .localeCompare((0, diggerize_1.digg)(b, "humanName").toLowerCase()));
283
321
  }
284
322
  sortedReflectionsByName(reflections) {
285
- return reflections.sort((a, b) => digg(a, "humanName")
323
+ return reflections.sort((a, b) => (0, diggerize_1.digg)(a, "humanName")
286
324
  .toLowerCase()
287
- .localeCompare(digg(b, "humanName").toLowerCase()));
325
+ .localeCompare((0, diggerize_1.digg)(b, "humanName").toLowerCase()));
288
326
  }
289
327
  }));
290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZvcm0uanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL2ZpbHRlcnMvZmlsdGVyLWZvcm0uanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNyQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3BELE9BQU8sZ0JBQWdCLE1BQU0scUJBQXFCLENBQUE7QUFDbEQsT0FBTyxhQUFhLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxNQUFNLE1BQU0sb0JBQW9CLENBQUE7QUFDdkMsT0FBTyxJQUFJLE1BQU0sa0JBQWtCLENBQUE7QUFDbkMsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDcEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUMvQixPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQTtBQUN2QyxPQUFPLEtBQUssTUFBTSxvQkFBb0IsQ0FBQTtBQUN0QyxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQTtBQUNwQyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBQ3pCLE9BQU8saUJBQWlCLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxZQUFZLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxNQUFNLE1BQU0scUJBQXFCLENBQUE7QUFDeEMsT0FBTyxRQUFRLE1BQU0sbUJBQW1CLENBQUE7QUFDeEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pF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QUV2QixPQUFPLElBQUksQ0FBQTtZQUNiLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sS0FBSyxDQUFBO1lBQ2QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHNCQUFzQixDQUFDLFVBQVU7UUFDL0IsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQzlCLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDO2FBQ2pCLFdBQVcsRUFBRTthQUNiLGFBQWEsQ0FDWixJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUNuQyxDQUNKLENBQUE7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsV0FBVztRQUNqQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDL0IsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUM7YUFDakIsV0FBVyxFQUFFO2FBQ2IsYUFBYSxDQUNaLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQ25DLENBQ0osQ0FBQTtJQUNILENBQUM7Q0FDRixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlTWVtbywgdXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtBY3Rpdml0eUluZGljYXRvciwgVmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQgQXR0cmlidXRlRWxlbWVudCBmcm9tIFwiLi9hdHRyaWJ1dGUtZWxlbWVudFwiXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tIFwiLi4vLi4vYmFzZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vLi4vdXRpbHMvYnV0dG9uXCJcbmltcG9ydCBDYXJkIGZyb20gXCIuLi8uLi91dGlscy9jYXJkXCJcbmltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7Rm9ybX0gZnJvbSBcIi4uLy4uL2Zvcm1cIlxuaW1wb3J0IEhlYWRlciBmcm9tIFwiLi4vLi4vdXRpbHMvaGVhZGVyXCJcbmltcG9ydCBJbnB1dCBmcm9tIFwiLi4vLi4vaW5wdXRzL2lucHV0XCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCBQYXJhbXMgZnJvbSBcIi4uLy4uL3BhcmFtcy5qc1wiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBQcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBSZWZsZWN0aW9uRWxlbWVudCBmcm9tIFwiLi9yZWZsZWN0aW9uLWVsZW1lbnRcIlxuaW1wb3J0IFNjb3BlRWxlbWVudCBmcm9tIFwiLi9zY29wZS1lbGVtZW50XCJcbmltcG9ydCBTZWxlY3QgZnJvbSBcIi4uLy4uL2lucHV0cy9zZWxlY3RcIlxuaW1wb3J0IFNlcnZpY2VzIGZyb20gXCIuLi8uLi9zZXJ2aWNlcy5qc1wiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCBUZXh0IGZyb20gXCIuLi8uLi91dGlscy90ZXh0XCJcbmltcG9ydCB1c2VCcmVha3BvaW50IGZyb20gXCIuLi8uLi91c2UtYnJlYWtwb2ludC5qc1wiXG5pbXBvcnQgdXNlSTE4biBmcm9tIFwiaTE4bi1vbi1zdGVyb2lkcy9zcmMvdXNlLWkxOG4ubWpzXCJcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBBcGlNYWtlclRhYmxlRmlsdGVyc0ZpbHRlckZvcm0gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IFByb3BUeXBlc0V4YWN0KHtcbiAgICBmaWx0ZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbW9kZWxDbGFzczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFwcGx5Q2xpY2tlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlcXVlc3RDbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBxdWVyeVNlYXJjaE5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICB9KVxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IHVzZUkxOG4oe25hbWVzcGFjZTogXCJqcy5hcGlfbWFrZXIudGFibGUuZmlsdGVycy5maWx0ZXJfZm9ybVwifSlcblxuICAgIHRoaXMudXNlU3RhdGVzKHtcbiAgICAgIGFzc29jaWF0aW9uczogbnVsbCxcbiAgICAgIGF0dHJpYnV0ZTogdW5kZWZpbmVkLFxuICAgICAgYWN0dWFsQ3VycmVudE1vZGVsQ2xhc3M6ICgpID0+ICh7bW9kZWxDbGFzczogdGhpcy5wLm1vZGVsQ2xhc3N9KSxcbiAgICAgIGxvYWRpbmc6IDAsXG4gICAgICBtb2RlbENsYXNzTmFtZTogZGlnZyh0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcImNsYXNzTmFtZVwiKSxcbiAgICAgIHBhdGg6IFtdLFxuICAgICAgcHJlZGljYXRlOiB1bmRlZmluZWQsXG4gICAgICBwcmVkaWNhdGVzOiB1bmRlZmluZWQsXG4gICAgICByYW5zYWNrYWJsZUF0dHJpYnV0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIHJhbnNhY2thYmxlU2NvcGVzOiB1bmRlZmluZWQsXG4gICAgICBzY29wZTogdGhpcy5wcm9wcy5maWx0ZXIuc2MsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy5maWx0ZXIudlxuICAgIH0pXG5cbiAgICB0aGlzLnNldEluc3RhbmNlKHtcbiAgICAgIGJyZWFrcG9pbnQ6IHVzZUJyZWFrcG9pbnQoKSxcbiAgICAgIHQsXG4gICAgICB2YWx1ZUlucHV0UmVmOiB1c2VSZWYoKSxcbiAgICB9KVxuXG4gICAgdXNlTWVtbygoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRSYW5zYWNrUHJlZGljYXRlcygpXG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmZpbHRlci52KSB7XG4gICAgICAgIHRoaXMubG9hZEluaXRpYWxWYWx1ZXNXaXRoTG9hZGluZ0luZGljYXRvcigpXG4gICAgICB9XG4gICAgfSwgW10pXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIHRoaXMubG9hZEFzc29jaWF0aW9ucygpXG4gICAgfSwgW3RoaXMucy5tb2RlbENsYXNzTmFtZV0pXG4gIH1cblxuICBjdXJyZW50TW9kZWxDbGFzcyA9ICgpID0+IGRpZ2codGhpcy5zLmFjdHVhbEN1cnJlbnRNb2RlbENsYXNzLCBcIm1vZGVsQ2xhc3NcIilcblxuICBwYXJzZUFzc29jaWF0aW9uRGF0YShyZXN1bHQpIHtcbiAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSByZXN1bHQuYXNzb2NpYXRpb25zLm1hcCgoe2h1bWFuX25hbWUsIG1vZGVsX2NsYXNzX25hbWUsIHJlZmxlY3Rpb25fbmFtZSwgcmVzb3VyY2V9KSA9PiAoe1xuICAgICAgaHVtYW5OYW1lOiBodW1hbl9uYW1lLFxuICAgICAgbW9kZWxDbGFzc05hbWU6IG1vZGVsX2NsYXNzX25hbWUsXG4gICAgICByZWZsZWN0aW9uTmFtZTogaW5mbGVjdGlvbi5jYW1lbGl6ZShyZWZsZWN0aW9uX25hbWUsIHRydWUpLFxuICAgICAgcmVzb3VyY2VcbiAgICB9KSlcbiAgICBjb25zdCByYW5zYWNrYWJsZUF0dHJpYnV0ZXMgPSBkaWdnKHJlc3VsdCwgXCJyYW5zYWNrYWJsZV9hdHRyaWJ1dGVzXCIpLm1hcCgoe2F0dHJpYnV0ZV9uYW1lOiBhdHRyaWJ1dGVOYW1lLCBodW1hbl9uYW1lOiBodW1hbk5hbWV9KSA9PiAoe1xuICAgICAgYXR0cmlidXRlTmFtZSwgaHVtYW5OYW1lXG4gICAgfSkpXG4gICAgY29uc3QgcmFuc2Fja2FibGVTY29wZXMgPSBkaWdnKHJlc3VsdCwgXCJyYW5zYWNrYWJsZV9zY29wZXNcIilcblxuICAgIHJldHVybiB7YXNzb2NpYXRpb25zLCByYW5zYWNrYWJsZUF0dHJpYnV0ZXMsIHJhbnNhY2thYmxlU2NvcGVzfVxuICB9XG5cbiAgYXN5bmMgbG9hZEFzc29jaWF0aW9ucygpIHtcbiAgICB0aGlzLmluY3JlYXNlTG9hZGluZygpXG5cbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLnMubW9kZWxDbGFzc05hbWUpIHRocm93IG5ldyBFcnJvcihcIidtb2RlbENsYXNzTmFtZScgbm90IHNldCBpbiBzdGF0ZVwiKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJNb2RlbHM6OkFzc29jaWF0aW9uc1wiLCB7bW9kZWxfY2xhc3NfbmFtZTogdGhpcy5zLm1vZGVsQ2xhc3NOYW1lfSlcbiAgICAgIGNvbnN0IHthc3NvY2lhdGlvbnMsIHJhbnNhY2thYmxlQXR0cmlidXRlcywgcmFuc2Fja2FibGVTY29wZXN9ID0gdGhpcy5wYXJzZUFzc29jaWF0aW9uRGF0YShyZXN1bHQpXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe2Fzc29jaWF0aW9ucywgcmFuc2Fja2FibGVBdHRyaWJ1dGVzLCByYW5zYWNrYWJsZVNjb3Blc30pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZGVjcmVhc2VMb2FkaW5nKClcbiAgICB9XG4gIH1cblxuICBkZWNyZWFzZUxvYWRpbmcgPSAoKSA9PiB0aGlzLnNldFN0YXRlKChwcmV2U3RhdGUpID0+ICh7bG9hZGluZzogcHJldlN0YXRlLmxvYWRpbmcgLSAxfSkpXG4gIGluY3JlYXNlTG9hZGluZyA9ICgpID0+IHRoaXMuc2V0U3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtsb2FkaW5nOiBwcmV2U3RhdGUubG9hZGluZyArIDF9KSlcblxuICBhc3luYyBsb2FkSW5pdGlhbFZhbHVlc1dpdGhMb2FkaW5nSW5kaWNhdG9yKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmluY3JlYXNlTG9hZGluZygpXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbml0aWFsVmFsdWVzKClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kZWNyZWFzZUxvYWRpbmcoKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRJbml0aWFsVmFsdWVzKCkge1xuICAgIGlmICghdGhpcy5zLm1vZGVsQ2xhc3NOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCInbW9kZWxDbGFzc05hbWUnIG5vdCBzZXQgaW4gc3RhdGVcIilcblxuICAgIGxldCByZXN1bHQgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJNb2RlbHM6OkFzc29jaWF0aW9uc1wiLCB7bW9kZWxfY2xhc3NfbmFtZTogdGhpcy5zLm1vZGVsQ2xhc3NOYW1lfSlcbiAgICBsZXQgZGF0YSA9IHRoaXMucGFyc2VBc3NvY2lhdGlvbkRhdGEocmVzdWx0KVxuICAgIGxldCBtb2RlbENsYXNzTmFtZSA9IHRoaXMucy5tb2RlbENsYXNzTmFtZVxuICAgIGNvbnN0IHBhdGggPSBbXVxuXG4gICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiB0aGlzLnByb3BzLmZpbHRlci5wKSB7XG4gICAgICBjb25zdCByZWZsZWN0aW9uID0gZGF0YS5hc3NvY2lhdGlvbnMuZmluZCgoYXNzb2NpYXRpb24pID0+IGRpZ2coYXNzb2NpYXRpb24sIFwicmVmbGVjdGlvbk5hbWVcIikgPT0gaW5mbGVjdGlvbi5jYW1lbGl6ZShwYXRoUGFydCwgdHJ1ZSkpXG5cbiAgICAgIGlmICghcmVmbGVjdGlvbikgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIGFzc29jaWF0aW9uIGJ5IHRoYXQgbmFtZSAke3RoaXMucy5tb2RlbENsYXNzTmFtZX0jJHtwYXRoUGFydH1gKVxuXG4gICAgICBtb2RlbENsYXNzTmFtZSA9IGRpZ2cocmVmbGVjdGlvbiwgXCJtb2RlbENsYXNzTmFtZVwiKVxuXG4gICAgICBpZiAoIW1vZGVsQ2xhc3NOYW1lKSB7XG4gICAgICAgIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGgubWFwKChwYXRoUGFydCkgPT4gcGF0aFBhcnQubmFtZSgpKS5qb2luKFwiLlwiKVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbW9kZWwgY2xhc3MgbmFtZSBmcm9tICR7cGF0aE5hbWVzfS4ke3JlZmxlY3Rpb24ubmFtZSgpfWApXG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IGF3YWl0IFNlcnZpY2VzLmN1cnJlbnQoKS5zZW5kUmVxdWVzdChcIk1vZGVsczo6QXNzb2NpYXRpb25zXCIsIHttb2RlbF9jbGFzc19uYW1lOiBtb2RlbENsYXNzTmFtZX0pXG4gICAgICBkYXRhID0gdGhpcy5wYXJzZUFzc29jaWF0aW9uRGF0YShyZXN1bHQpXG5cbiAgICAgIHBhdGgucHVzaChyZWZsZWN0aW9uKVxuICAgIH1cblxuICAgIGNvbnN0IHtyYW5zYWNrYWJsZUF0dHJpYnV0ZXN9ID0gZGF0YVxuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMucC5maWx0ZXIuYVxuICAgIGNvbnN0IHJhbnNhY2thYmxlQXR0cmlidXRlID0gcmFuc2Fja2FibGVBdHRyaWJ1dGVzLmZpbmQoKHJhbnNhY2thYmxlQXR0cmlidXRlKSA9PiBkaWdnKHJhbnNhY2thYmxlQXR0cmlidXRlLCBcImF0dHJpYnV0ZU5hbWVcIikgPT0gYXR0cmlidXRlKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7YXR0cmlidXRlOiByYW5zYWNrYWJsZUF0dHJpYnV0ZSwgbW9kZWxDbGFzc05hbWUsIHBhdGh9KVxuICB9XG5cbiAgYXN5bmMgbG9hZFJhbnNhY2tQcmVkaWNhdGVzKCkge1xuICAgIHRoaXMuaW5jcmVhc2VMb2FkaW5nKClcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFNlcnZpY2VzLmN1cnJlbnQoKS5zZW5kUmVxdWVzdChcIlJhbnNhY2s6OlByZWRpY2F0ZXNcIilcbiAgICAgIGNvbnN0IHByZWRpY2F0ZXMgPSBkaWdnKHJlc3BvbnNlLCBcInByZWRpY2F0ZXNcIilcbiAgICAgIGxldCBjdXJyZW50UHJlZGljYXRlXG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmZpbHRlci5wcmUpIHtcbiAgICAgICAgY3VycmVudFByZWRpY2F0ZSA9IHByZWRpY2F0ZXMuZmluZCgocHJlZGljYXRlKSA9PiBwcmVkaWNhdGUubmFtZSA9PSB0aGlzLnByb3BzLmZpbHRlci5wcmUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwcmVkaWNhdGU6IGN1cnJlbnRQcmVkaWNhdGUsXG4gICAgICAgIHByZWRpY2F0ZXNcbiAgICAgIH0pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZGVjcmVhc2VMb2FkaW5nKClcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2JyZWFrcG9pbnQsIHQsIHZhbHVlSW5wdXRSZWZ9ID0gdGhpcy50dFxuICAgIGNvbnN0IHthdHRyaWJ1dGUsIHBhdGgsIHByZWRpY2F0ZSwgcHJlZGljYXRlcywgc2NvcGUsIHZhbHVlfSA9IHRoaXMuc1xuICAgIGNvbnN0IHttZFVwfSA9IGJyZWFrcG9pbnRcbiAgICBsZXQgc3VibWl0RW5hYmxlZCA9IGZhbHNlXG5cbiAgICBpZiAoYXR0cmlidXRlICYmIHByZWRpY2F0ZSkge1xuICAgICAgc3VibWl0RW5hYmxlZCA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHNjb3BlKSB7XG4gICAgICBzdWJtaXRFbmFibGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q2FyZFxuICAgICAgICB0ZXN0SUQ9XCJhcGktbWFrZXIvdGFibGUvZmlsdGVycy9maWx0ZXItZm9ybVwiXG4gICAgICAgIHN0eWxlPXt0aGlzLmNhY2hlKFwiY2FyZFN0eWxlXCIsIHtcbiAgICAgICAgICB3aWR0aDogbWRVcCA/IHVuZGVmaW5lZCA6IFwiMTAwJVwiLFxuICAgICAgICAgIG1pbldpZHRoOiA1MCxcbiAgICAgICAgICBtaW5IZWlnaHQ6IDUwXG4gICAgICAgIH0sIFttZFVwXSl9XG4gICAgICA+XG4gICAgICAgIDxGb3JtIG9uU3VibWl0PXt0aGlzLnR0Lm9uU3VibWl0fT5cbiAgICAgICAgICA8VmlldyBzdHlsZT17e2ZsZXhEaXJlY3Rpb246IFwicm93XCJ9fT5cbiAgICAgICAgICAgIHtwYXRoLm1hcCgoe2h1bWFuTmFtZSwgcmVmbGVjdGlvbk5hbWV9LCBwYXRoUGFydEluZGV4KSA9PlxuICAgICAgICAgICAgICA8VmlldyBrZXk9e2Ake3BhdGhQYXJ0SW5kZXh9LSR7cmVmbGVjdGlvbk5hbWV9YH0gc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgICAgICAgICAge3BhdGhQYXJ0SW5kZXggPiAwICYmXG4gICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17e21hcmdpblJpZ2h0OiA1LCBtYXJnaW5MZWZ0OiA1fX0+XG4gICAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICB7aHVtYW5OYW1lfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBtZFVwID8gXCJyb3dcIiA6IFwiY29sdW1uXCJ9fT5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7bWFyZ2luVG9wOiBtZFVwID8gdW5kZWZpbmVkIDogMjV9fT5cbiAgICAgICAgICAgICAgPEhlYWRlcj5cbiAgICAgICAgICAgICAgICB7dChcIi5yZWxhdGlvbnNoaXBzXCIsIHtkZWZhdWx0VmFsdWU6IFwiUmVsYXRpb25zaGlwc1wifSl9XG4gICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICB7dGhpcy5zLmFzc29jaWF0aW9ucyAmJiB0aGlzLnNvcnRlZFJlZmxlY3Rpb25zQnlOYW1lKHRoaXMucy5hc3NvY2lhdGlvbnMpLm1hcCgocmVmbGVjdGlvbikgPT5cbiAgICAgICAgICAgICAgICA8UmVmbGVjdGlvbkVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIGtleT17cmVmbGVjdGlvbi5yZWZsZWN0aW9uTmFtZX1cbiAgICAgICAgICAgICAgICAgIG1vZGVsQ2xhc3NOYW1lPXt0aGlzLnMubW9kZWxDbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnR0Lm9uUmVmbGVjdGlvbkNsaWNrZWR9XG4gICAgICAgICAgICAgICAgICByZWZsZWN0aW9uPXtyZWZsZWN0aW9ufVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e21hcmdpblRvcDogbWRVcCA/IHVuZGVmaW5lZCA6IDI1fX0+XG4gICAgICAgICAgICAgIDxIZWFkZXI+XG4gICAgICAgICAgICAgICAge3QoXCIuYXR0cmlidXRlc1wiLCB7ZGVmYXVsdFZhbHVlOiBcIkF0dHJpYnV0ZXNcIn0pfVxuICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAge3RoaXMucy5yYW5zYWNrYWJsZUF0dHJpYnV0ZXMgJiYgdGhpcy5zb3J0ZWRBdHRyaWJ1dGVzQnlOYW1lKHRoaXMucy5yYW5zYWNrYWJsZUF0dHJpYnV0ZXMpPy5tYXAoKGF0dHJpYnV0ZSkgPT5cbiAgICAgICAgICAgICAgICA8QXR0cmlidXRlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgYWN0aXZlPXthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZSA9PSB0aGlzLnMuYXR0cmlidXRlPy5hdHRyaWJ1dGVOYW1lfVxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlPXthdHRyaWJ1dGV9XG4gICAgICAgICAgICAgICAgICBrZXk9e2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lfVxuICAgICAgICAgICAgICAgICAgbW9kZWxDbGFzc05hbWU9e3RoaXMucy5tb2RlbENsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMudHQub25BdHRyaWJ1dGVDbGlja2VkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHt0aGlzLnMucmFuc2Fja2FibGVTY29wZXM/Lm1hcCgoc2NvcGUpID0+XG4gICAgICAgICAgICAgICAgPFNjb3BlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgYWN0aXZlPXtzY29wZSA9PSB0aGlzLnMuc2NvcGV9XG4gICAgICAgICAgICAgICAgICBrZXk9e3Njb3BlfVxuICAgICAgICAgICAgICAgICAgc2NvcGU9e3Njb3BlfVxuICAgICAgICAgICAgICAgICAgb25TY29wZUNsaWNrZWQ9e3RoaXMudHQub25TY29wZUNsaWNrZWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7bWFyZ2luVG9wOiBtZFVwID8gdW5kZWZpbmVkIDogMjV9fT5cbiAgICAgICAgICAgICAgPEhlYWRlcj5cbiAgICAgICAgICAgICAgICB7dChcIi5zZWFyY2hcIiwge2RlZmF1bHRWYWx1ZTogXCJTZWFyY2hcIn0pfVxuICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICAgICAge3ByZWRpY2F0ZXMgJiYgIXRoaXMucy5zY29wZSAmJlxuICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwcmVkaWNhdGUtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtwcmVkaWNhdGU/Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVCbGFua1xuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy50dC5vblByZWRpY2F0ZUNoYW5nZWR9XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3ByZWRpY2F0ZXMubWFwKChwcmVkaWNhdGUpID0+IGRpZ2cocHJlZGljYXRlLCBcIm5hbWVcIikpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3ttYXJnaW5Ub3A6IDEwfX0+XG4gICAgICAgICAgICAgICAgeygoYXR0cmlidXRlICYmIHByZWRpY2F0ZSkgfHwgc2NvcGUpICYmXG4gICAgICAgICAgICAgICAgICA8SW5wdXQgY2xhc3NOYW1lPVwidmFsdWUtaW5wdXRcIiBkZWZhdWx0VmFsdWU9e3ZhbHVlfSBpbnB1dFJlZj17dmFsdWVJbnB1dFJlZn0gLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBqdXN0aWZ5Q29udGVudDogXCJlbmRcIiwgbWFyZ2luVG9wOiAxMH19PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBkYW5nZXJcbiAgICAgICAgICAgICAgaWNvbj1cInJlbW92ZVwiXG4gICAgICAgICAgICAgIGxhYmVsPXt0KFwiLmNhbmNlbFwiLCB7ZGVmYXVsdFZhbHVlOiBcIkNhbmNlbFwifSl9XG4gICAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMucC5vblJlcXVlc3RDbG9zZX1cbiAgICAgICAgICAgICAgcHJlc3NhYmxlUHJvcHM9e3RoaXMuY2FuY2VsQnV0dG9uUHJlc3NhYmxlUHJvcHMgfHw9IHtcbiAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogNVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFzdWJtaXRFbmFibGVkfVxuICAgICAgICAgICAgICBpY29uPVwiY2hlY2tcIlxuICAgICAgICAgICAgICBsYWJlbD17dChcIi5hcHBseVwiLCB7ZGVmYXVsdFZhbHVlOiBcIkFwcGx5XCJ9KX1cbiAgICAgICAgICAgICAgcHJlc3NhYmxlUHJvcHM9e3RoaXMuYXBwbGVCdXR0b25QcmVzc2FibGVQcm9wcyB8fD0ge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7bWFyZ2luTGVmdDogNX0sXG4gICAgICAgICAgICAgICAgdGVzdElEOiBcImFwcGx5LWZpbHRlci1idXR0b25cIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdWJtaXRcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L0Zvcm0+XG4gICAgICAgIHt0aGlzLnMubG9hZGluZyA+IDAgJiZcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QWN0aXZpdHlJbmRpY2F0b3Igc2l6ZT1cImxhcmdlXCIgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgIDwvQ2FyZD5cbiAgICApXG4gIH1cblxuICBjdXJyZW50TW9kZWxDbGFzc0Zyb21QYXRoKHBhdGgpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSB0aGlzLnBcbiAgICBsZXQgY3VycmVudE1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG5cbiAgICBmb3IgKGNvbnN0IHBhdGhQYXJ0IG9mIHBhdGgpIHtcbiAgICAgIGNvbnN0IGNhbWVsaXplZFBhdGhQYXJ0ID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShwYXRoUGFydCwgdHJ1ZSlcbiAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gY3VycmVudE1vZGVsQ2xhc3MucmFuc2Fja2FibGVBc3NvY2lhdGlvbnMoKS5maW5kKChyZWZsZWN0aW9uKSA9PiByZWZsZWN0aW9uLm5hbWUoKSA9PSBjYW1lbGl6ZWRQYXRoUGFydClcblxuICAgICAgaWYgKCFhc3NvY2lhdGlvbikge1xuICAgICAgICBjb25zdCByYW5zYWNrYWJsZUFzc29jaWF0aW9uTmFtZXMgPSBjdXJyZW50TW9kZWxDbGFzcy5yYW5zYWNrYWJsZUFzc29jaWF0aW9ucygpLm1hcCgocmVmbGVjdGlvbikgPT4gcmVmbGVjdGlvbi5uYW1lKCkpLmpvaW4oXCIsIFwiKVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYSBSYW5zYWNrYWJsZSBhc3NvY2lhdGlvbiBieSB0aGF0IG5hbWU6ICR7Y2FtZWxpemVkUGF0aFBhcnR9IGluICR7cmFuc2Fja2FibGVBc3NvY2lhdGlvbk5hbWVzfWApXG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRNb2RlbENsYXNzID0gYXNzb2NpYXRpb24ubW9kZWxDbGFzcygpXG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRNb2RlbENsYXNzXG4gIH1cblxuICBjdXJyZW50UGF0aFBhcnRzKCkge1xuICAgIGNvbnN0IHttb2RlbENsYXNzfSA9IHRoaXMucFxuICAgIGNvbnN0IHtwYXRofSA9IHRoaXMuc1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdXG4gICAgbGV0IGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuXG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgbW9kZWxDbGFzcyxcbiAgICAgIHRyYW5zbGF0aW9uOiBtb2RlbENsYXNzLm1vZGVsTmFtZSgpLmh1bWFuKHtjb3VudDogMn0pXG4gICAgfSlcblxuICAgIGZvciAoY29uc3QgcGF0aFBhcnQgb2YgcGF0aCkge1xuICAgICAgY29uc3QgY2FtZWxpemVkUGF0aFBhcnQgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHBhdGhQYXJ0LCB0cnVlKVxuICAgICAgY29uc3QgcGF0aFBhcnRUcmFuc2xhdGlvbiA9IGN1cnJlbnRNb2RlbENsYXNzLmh1bWFuQXR0cmlidXRlTmFtZShjYW1lbGl6ZWRQYXRoUGFydClcblxuICAgICAgY3VycmVudE1vZGVsQ2xhc3MgPSBjdXJyZW50TW9kZWxDbGFzcy5yYW5zYWNrYWJsZUFzc29jaWF0aW9ucygpLmZpbmQoKHJlZmxlY3Rpb24pID0+IHJlZmxlY3Rpb24ubmFtZSgpID09IGNhbWVsaXplZFBhdGhQYXJ0KS5tb2RlbENsYXNzKClcblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBtb2RlbENsYXNzOiBjdXJyZW50TW9kZWxDbGFzcyxcbiAgICAgICAgdHJhbnNsYXRpb246IHBhdGhQYXJ0VHJhbnNsYXRpb25cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgb25BdHRyaWJ1dGVDbGlja2VkID0gKHthdHRyaWJ1dGV9KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhdHRyaWJ1dGUsXG4gICAgICBzY29wZTogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIG9uUHJlZGljYXRlQ2hhbmdlZCA9IChlKSA9PiB7XG4gICAgY29uc3QgY2hvc2VuUHJlZGljYXRlTmFtZSA9IGRpZ2coZSwgXCJ0YXJnZXRcIiwgXCJ2YWx1ZVwiKVxuICAgIGNvbnN0IHByZWRpY2F0ZSA9IHRoaXMucy5wcmVkaWNhdGVzLmZpbmQoKHByZWRpY2F0ZSkgPT4gcHJlZGljYXRlLm5hbWUgPT0gY2hvc2VuUHJlZGljYXRlTmFtZSlcblxuICAgIHRoaXMuc2V0U3RhdGUoe3ByZWRpY2F0ZX0pXG4gIH1cblxuICBvblJlZmxlY3Rpb25DbGlja2VkID0gKHtyZWZsZWN0aW9ufSkgPT4ge1xuICAgIGNvbnN0IG5ld1BhdGggPSB0aGlzLnMucGF0aC5jb25jYXQoW3JlZmxlY3Rpb25dKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhc3NvY2lhdGlvbnM6IG51bGwsXG4gICAgICBhdHRyaWJ1dGU6IHVuZGVmaW5lZCxcbiAgICAgIGFjdHVhbEN1cnJlbnRNb2RlbENsYXNzOiB7bW9kZWxDbGFzczogZGlnZyhyZWZsZWN0aW9uLCBcInJlc291cmNlXCIpfSxcbiAgICAgIG1vZGVsQ2xhc3NOYW1lOiBkaWdnKHJlZmxlY3Rpb24sIFwibW9kZWxDbGFzc05hbWVcIiksXG4gICAgICBwYXRoOiBuZXdQYXRoLFxuICAgICAgcHJlZGljYXRlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgb25TY29wZUNsaWNrZWQgPSAoe3Njb3BlfSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYXR0cmlidXRlOiB1bmRlZmluZWQsXG4gICAgICBwcmVkaWNhdGU6IHVuZGVmaW5lZCxcbiAgICAgIHNjb3BlXG4gICAgfSlcbiAgfVxuXG4gIG9uU3VibWl0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHtmaWx0ZXIsIHF1ZXJ5U2VhcmNoTmFtZX0gPSB0aGlzLnBcbiAgICBjb25zdCB7YXR0cmlidXRlLCBwYXRoLCBwcmVkaWNhdGUsIHNjb3BlfSA9IHRoaXMuc1xuICAgIGNvbnN0IHtmaWx0ZXJJbmRleH0gPSBkaWdzKGZpbHRlciwgXCJmaWx0ZXJJbmRleFwiKVxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IFBhcmFtcy5wYXJzZSgpW3F1ZXJ5U2VhcmNoTmFtZV0gfHwge31cbiAgICBjb25zdCB2YWx1ZSA9IGRpZ2codGhpcy50dC52YWx1ZUlucHV0UmVmLCBcImN1cnJlbnRcIiwgXCJ2YWx1ZVwiKVxuICAgIGNvbnN0IHAgPSBwYXRoLm1hcCgocmVmbGVjdGlvbikgPT4gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlZmxlY3Rpb24ucmVmbGVjdGlvbk5hbWUpKVxuICAgIGNvbnN0IG5ld1NlYXJjaFBhcmFtcyA9IHtcbiAgICAgIHAsXG4gICAgICB2OiB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgIG5ld1NlYXJjaFBhcmFtcy5hID0gZGlnZyhhdHRyaWJ1dGUsIFwiYXR0cmlidXRlTmFtZVwiKVxuICAgICAgbmV3U2VhcmNoUGFyYW1zLnByZSA9IGRpZ2cocHJlZGljYXRlLCBcIm5hbWVcIilcbiAgICB9IGVsc2UgaWYgKHNjb3BlKSB7XG4gICAgICBuZXdTZWFyY2hQYXJhbXMuc2MgPSBzY29wZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEb250IGtub3cgaWYgc2hvdWxkIHNlYXJjaCBmb3IgYXR0cmlidXRlIG9yIHNjb3BlP1wiKVxuICAgIH1cblxuICAgIHNlYXJjaFBhcmFtc1tmaWx0ZXJJbmRleF0gPSBKU09OLnN0cmluZ2lmeShuZXdTZWFyY2hQYXJhbXMpXG5cbiAgICBjb25zdCBuZXdQYXJhbXMgPSB7fVxuXG4gICAgbmV3UGFyYW1zW3F1ZXJ5U2VhcmNoTmFtZV0gPSBzZWFyY2hQYXJhbXNcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMobmV3UGFyYW1zKVxuXG4gICAgdGhpcy5wcm9wcy5vbkFwcGx5Q2xpY2tlZCgpXG4gIH1cblxuICByZWZsZWN0aW9uc1dpdGhNb2RlbENsYXNzKHJlZmxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb25zLmZpbHRlcigocmVmbGVjdGlvbikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVmbGVjdGlvbi5tb2RlbENsYXNzKClcblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHNvcnRlZEF0dHJpYnV0ZXNCeU5hbWUoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzLnNvcnQoKGEsIGIpID0+XG4gICAgICBkaWdnKGEsIFwiaHVtYW5OYW1lXCIpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5sb2NhbGVDb21wYXJlKFxuICAgICAgICAgIGRpZ2coYiwgXCJodW1hbk5hbWVcIikudG9Mb3dlckNhc2UoKVxuICAgICAgICApXG4gICAgKVxuICB9XG5cbiAgc29ydGVkUmVmbGVjdGlvbnNCeU5hbWUocmVmbGVjdGlvbnMpIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbnMuc29ydCgoYSwgYikgPT5cbiAgICAgIGRpZ2coYSwgXCJodW1hbk5hbWVcIilcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLmxvY2FsZUNvbXBhcmUoXG4gICAgICAgICAgZGlnZyhiLCBcImh1bWFuTmFtZVwiKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIClcbiAgICApXG4gIH1cbn0pKVxuIl19
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZvcm0uanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL2ZpbHRlcnMvZmlsdGVyLWZvcm0uanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFxQztBQUNyQywrQ0FBb0Q7QUFDcEQsNEVBQWtEO0FBQ2xELGdGQUFtRDtBQUNuRCxnRUFBdUM7QUFDdkMsNERBQW1DO0FBQ25DLHlDQUFvQztBQUNwQyx1REFBd0M7QUFDeEMscUNBQStCO0FBQy9CLGdFQUF1QztBQUN2QywrREFBc0M7QUFDdEMsOEVBQWtEO0FBQ2xELGdFQUFvQztBQUNwQyw0REFBa0M7QUFDbEMsd0VBQTZDO0FBQzdDLGtEQUF5QjtBQUN6Qiw4RUFBb0Q7QUFDcEQsb0VBQTBDO0FBQzFDLGlFQUF3QztBQUN4QyxvRUFBd0M7QUFDeEMsbUZBQXlFO0FBQ3pFLDREQUFtQztBQUNuQyxnRkFBbUQ7QUFDbkQscUZBQXVEO0FBRXZELGtCQUFlLElBQUEsaUJBQUksRUFBQyxJQUFBLG1DQUFjLEVBQUMsTUFBTSw4QkFBK0IsU0FBUSwyQkFBYTtJQUMzRixNQUFNLENBQUMsU0FBUyxHQUFHLElBQUEsMEJBQWMsRUFBQztRQUNoQyxNQUFNLEVBQUUsb0JBQVMsQ0FBQyxNQUFNO1FBQ3hCLFVBQVUsRUFBRSxvQkFBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ3JDLGNBQWMsRUFBRSxvQkFBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ3pDLGNBQWMsRUFBRSxvQkFBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ3pDLGVBQWUsRUFBRSxvQkFBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO0tBQzdDLENBQUMsQ0FBQTtJQUVGLEtBQUs7UUFDSCxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsSUFBQSxzQkFBTyxFQUFDLEVBQUMsU0FBUyxFQUFFLHdDQUF3QyxFQUFDLENBQUMsQ0FBQTtRQUUxRSxJ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Q0FDbkMsQ0FDSixDQUFBO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLFdBQVc7UUFDakMsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQy9CLElBQUEsZ0JBQUksRUFBQyxDQUFDLEVBQUUsV0FBVyxDQUFDO2FBQ2pCLFdBQVcsRUFBRTthQUNiLGFBQWEsQ0FDWixJQUFBLGdCQUFJLEVBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUNuQyxDQUNKLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7QWN0aXZpdHlJbmRpY2F0b3IsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IEF0dHJpYnV0ZUVsZW1lbnQgZnJvbSBcIi4vYXR0cmlidXRlLWVsZW1lbnRcIlxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uLy4uL2Jhc2UtY29tcG9uZW50LmpzXCJcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uLy4uL3V0aWxzL2J1dHRvblwiXG5pbXBvcnQgQ2FyZCBmcm9tIFwiLi4vLi4vdXRpbHMvY2FyZFwiXG5pbXBvcnQge2RpZ2csIGRpZ3N9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge0Zvcm19IGZyb20gXCIuLi8uLi9mb3JtXCJcbmltcG9ydCBIZWFkZXIgZnJvbSBcIi4uLy4uL3V0aWxzL2hlYWRlclwiXG5pbXBvcnQgSW5wdXQgZnJvbSBcIi4uLy4uL2lucHV0cy9pbnB1dFwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvbWVtby5qc1wiXG5pbXBvcnQgUGFyYW1zIGZyb20gXCIuLi8uLi9wYXJhbXMuanNcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgUHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUmVmbGVjdGlvbkVsZW1lbnQgZnJvbSBcIi4vcmVmbGVjdGlvbi1lbGVtZW50XCJcbmltcG9ydCBTY29wZUVsZW1lbnQgZnJvbSBcIi4vc2NvcGUtZWxlbWVudFwiXG5pbXBvcnQgU2VsZWN0IGZyb20gXCIuLi8uLi9pbnB1dHMvc2VsZWN0XCJcbmltcG9ydCBTZXJ2aWNlcyBmcm9tIFwiLi4vLi4vc2VydmljZXMuanNcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vLi4vdXRpbHMvdGV4dFwiXG5pbXBvcnQgdXNlQnJlYWtwb2ludCBmcm9tIFwiLi4vLi4vdXNlLWJyZWFrcG9pbnQuanNcIlxuaW1wb3J0IHVzZUkxOG4gZnJvbSBcImkxOG4tb24tc3Rlcm9pZHMvc3JjL3VzZS1pMThuLm1qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJUYWJsZUZpbHRlcnNGaWx0ZXJGb3JtIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBQcm9wVHlwZXNFeGFjdCh7XG4gICAgZmlsdGVyOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG1vZGVsQ2xhc3M6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BcHBseUNsaWNrZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZXF1ZXN0Q2xvc2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcXVlcnlTZWFyY2hOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgfSlcblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSB1c2VJMThuKHtuYW1lc3BhY2U6IFwianMuYXBpX21ha2VyLnRhYmxlLmZpbHRlcnMuZmlsdGVyX2Zvcm1cIn0pXG5cbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBhc3NvY2lhdGlvbnM6IG51bGwsXG4gICAgICBhdHRyaWJ1dGU6IHVuZGVmaW5lZCxcbiAgICAgIGFjdHVhbEN1cnJlbnRNb2RlbENsYXNzOiAoKSA9PiAoe21vZGVsQ2xhc3M6IHRoaXMucC5tb2RlbENsYXNzfSksXG4gICAgICBsb2FkaW5nOiAwLFxuICAgICAgbW9kZWxDbGFzc05hbWU6IGRpZ2codGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKSwgXCJjbGFzc05hbWVcIiksXG4gICAgICBwYXRoOiBbXSxcbiAgICAgIHByZWRpY2F0ZTogdW5kZWZpbmVkLFxuICAgICAgcHJlZGljYXRlczogdW5kZWZpbmVkLFxuICAgICAgcmFuc2Fja2FibGVBdHRyaWJ1dGVzOiB1bmRlZmluZWQsXG4gICAgICByYW5zYWNrYWJsZVNjb3BlczogdW5kZWZpbmVkLFxuICAgICAgc2NvcGU6IHRoaXMucHJvcHMuZmlsdGVyLnNjLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMuZmlsdGVyLnZcbiAgICB9KVxuXG4gICAgdGhpcy5zZXRJbnN0YW5jZSh7XG4gICAgICBicmVha3BvaW50OiB1c2VCcmVha3BvaW50KCksXG4gICAgICB0LFxuICAgICAgdmFsdWVJbnB1dFJlZjogdXNlUmVmKCksXG4gICAgfSlcblxuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkUmFuc2Fja1ByZWRpY2F0ZXMoKVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5maWx0ZXIudikge1xuICAgICAgICB0aGlzLmxvYWRJbml0aWFsVmFsdWVzV2l0aExvYWRpbmdJbmRpY2F0b3IoKVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgdXNlTWVtbygoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRBc3NvY2lhdGlvbnMoKVxuICAgIH0sIFt0aGlzLnMubW9kZWxDbGFzc05hbWVdKVxuICB9XG5cbiAgY3VycmVudE1vZGVsQ2xhc3MgPSAoKSA9PiBkaWdnKHRoaXMucy5hY3R1YWxDdXJyZW50TW9kZWxDbGFzcywgXCJtb2RlbENsYXNzXCIpXG5cbiAgcGFyc2VBc3NvY2lhdGlvbkRhdGEocmVzdWx0KSB7XG4gICAgY29uc3QgYXNzb2NpYXRpb25zID0gcmVzdWx0LmFzc29jaWF0aW9ucy5tYXAoKHtodW1hbl9uYW1lLCBtb2RlbF9jbGFzc19uYW1lLCByZWZsZWN0aW9uX25hbWUsIHJlc291cmNlfSkgPT4gKHtcbiAgICAgIGh1bWFuTmFtZTogaHVtYW5fbmFtZSxcbiAgICAgIG1vZGVsQ2xhc3NOYW1lOiBtb2RlbF9jbGFzc19uYW1lLFxuICAgICAgcmVmbGVjdGlvbk5hbWU6IGluZmxlY3Rpb24uY2FtZWxpemUocmVmbGVjdGlvbl9uYW1lLCB0cnVlKSxcbiAgICAgIHJlc291cmNlXG4gICAgfSkpXG4gICAgY29uc3QgcmFuc2Fja2FibGVBdHRyaWJ1dGVzID0gZGlnZyhyZXN1bHQsIFwicmFuc2Fja2FibGVfYXR0cmlidXRlc1wiKS5tYXAoKHthdHRyaWJ1dGVfbmFtZTogYXR0cmlidXRlTmFtZSwgaHVtYW5fbmFtZTogaHVtYW5OYW1lfSkgPT4gKHtcbiAgICAgIGF0dHJpYnV0ZU5hbWUsIGh1bWFuTmFtZVxuICAgIH0pKVxuICAgIGNvbnN0IHJhbnNhY2thYmxlU2NvcGVzID0gZGlnZyhyZXN1bHQsIFwicmFuc2Fja2FibGVfc2NvcGVzXCIpXG5cbiAgICByZXR1cm4ge2Fzc29jaWF0aW9ucywgcmFuc2Fja2FibGVBdHRyaWJ1dGVzLCByYW5zYWNrYWJsZVNjb3Blc31cbiAgfVxuXG4gIGFzeW5jIGxvYWRBc3NvY2lhdGlvbnMoKSB7XG4gICAgdGhpcy5pbmNyZWFzZUxvYWRpbmcoKVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5zLm1vZGVsQ2xhc3NOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCInbW9kZWxDbGFzc05hbWUnIG5vdCBzZXQgaW4gc3RhdGVcIilcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgU2VydmljZXMuY3VycmVudCgpLnNlbmRSZXF1ZXN0KFwiTW9kZWxzOjpBc3NvY2lhdGlvbnNcIiwge21vZGVsX2NsYXNzX25hbWU6IHRoaXMucy5tb2RlbENsYXNzTmFtZX0pXG4gICAgICBjb25zdCB7YXNzb2NpYXRpb25zLCByYW5zYWNrYWJsZUF0dHJpYnV0ZXMsIHJhbnNhY2thYmxlU2NvcGVzfSA9IHRoaXMucGFyc2VBc3NvY2lhdGlvbkRhdGEocmVzdWx0KVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHthc3NvY2lhdGlvbnMsIHJhbnNhY2thYmxlQXR0cmlidXRlcywgcmFuc2Fja2FibGVTY29wZXN9KVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRlY3JlYXNlTG9hZGluZygpXG4gICAgfVxuICB9XG5cbiAgZGVjcmVhc2VMb2FkaW5nID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSgocHJldlN0YXRlKSA9PiAoe2xvYWRpbmc6IHByZXZTdGF0ZS5sb2FkaW5nIC0gMX0pKVxuICBpbmNyZWFzZUxvYWRpbmcgPSAoKSA9PiB0aGlzLnNldFN0YXRlKChwcmV2U3RhdGUpID0+ICh7bG9hZGluZzogcHJldlN0YXRlLmxvYWRpbmcgKyAxfSkpXG5cbiAgYXN5bmMgbG9hZEluaXRpYWxWYWx1ZXNXaXRoTG9hZGluZ0luZGljYXRvcigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pbmNyZWFzZUxvYWRpbmcoKVxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbFZhbHVlcygpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZGVjcmVhc2VMb2FkaW5nKClcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkSW5pdGlhbFZhbHVlcygpIHtcbiAgICBpZiAoIXRoaXMucy5tb2RlbENsYXNzTmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiJ21vZGVsQ2xhc3NOYW1lJyBub3Qgc2V0IGluIHN0YXRlXCIpXG5cbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgU2VydmljZXMuY3VycmVudCgpLnNlbmRSZXF1ZXN0KFwiTW9kZWxzOjpBc3NvY2lhdGlvbnNcIiwge21vZGVsX2NsYXNzX25hbWU6IHRoaXMucy5tb2RlbENsYXNzTmFtZX0pXG4gICAgbGV0IGRhdGEgPSB0aGlzLnBhcnNlQXNzb2NpYXRpb25EYXRhKHJlc3VsdClcbiAgICBsZXQgbW9kZWxDbGFzc05hbWUgPSB0aGlzLnMubW9kZWxDbGFzc05hbWVcbiAgICBjb25zdCBwYXRoID0gW11cblxuICAgIGZvciAoY29uc3QgcGF0aFBhcnQgb2YgdGhpcy5wcm9wcy5maWx0ZXIucCkge1xuICAgICAgY29uc3QgcmVmbGVjdGlvbiA9IGRhdGEuYXNzb2NpYXRpb25zLmZpbmQoKGFzc29jaWF0aW9uKSA9PiBkaWdnKGFzc29jaWF0aW9uLCBcInJlZmxlY3Rpb25OYW1lXCIpID09IGluZmxlY3Rpb24uY2FtZWxpemUocGF0aFBhcnQsIHRydWUpKVxuXG4gICAgICBpZiAoIXJlZmxlY3Rpb24pIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBhc3NvY2lhdGlvbiBieSB0aGF0IG5hbWUgJHt0aGlzLnMubW9kZWxDbGFzc05hbWV9IyR7cGF0aFBhcnR9YClcblxuICAgICAgbW9kZWxDbGFzc05hbWUgPSBkaWdnKHJlZmxlY3Rpb24sIFwibW9kZWxDbGFzc05hbWVcIilcblxuICAgICAgaWYgKCFtb2RlbENsYXNzTmFtZSkge1xuICAgICAgICBjb25zdCBwYXRoTmFtZXMgPSBwYXRoLm1hcCgocGF0aFBhcnQpID0+IHBhdGhQYXJ0Lm5hbWUoKSkuam9pbihcIi5cIilcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1vZGVsIGNsYXNzIG5hbWUgZnJvbSAke3BhdGhOYW1lc30uJHtyZWZsZWN0aW9uLm5hbWUoKX1gKVxuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJNb2RlbHM6OkFzc29jaWF0aW9uc1wiLCB7bW9kZWxfY2xhc3NfbmFtZTogbW9kZWxDbGFzc05hbWV9KVxuICAgICAgZGF0YSA9IHRoaXMucGFyc2VBc3NvY2lhdGlvbkRhdGEocmVzdWx0KVxuXG4gICAgICBwYXRoLnB1c2gocmVmbGVjdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCB7cmFuc2Fja2FibGVBdHRyaWJ1dGVzfSA9IGRhdGFcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSB0aGlzLnAuZmlsdGVyLmFcbiAgICBjb25zdCByYW5zYWNrYWJsZUF0dHJpYnV0ZSA9IHJhbnNhY2thYmxlQXR0cmlidXRlcy5maW5kKChyYW5zYWNrYWJsZUF0dHJpYnV0ZSkgPT4gZGlnZyhyYW5zYWNrYWJsZUF0dHJpYnV0ZSwgXCJhdHRyaWJ1dGVOYW1lXCIpID09IGF0dHJpYnV0ZSlcblxuICAgIHRoaXMuc2V0U3RhdGUoe2F0dHJpYnV0ZTogcmFuc2Fja2FibGVBdHRyaWJ1dGUsIG1vZGVsQ2xhc3NOYW1lLCBwYXRofSlcbiAgfVxuXG4gIGFzeW5jIGxvYWRSYW5zYWNrUHJlZGljYXRlcygpIHtcbiAgICB0aGlzLmluY3JlYXNlTG9hZGluZygpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJSYW5zYWNrOjpQcmVkaWNhdGVzXCIpXG4gICAgICBjb25zdCBwcmVkaWNhdGVzID0gZGlnZyhyZXNwb25zZSwgXCJwcmVkaWNhdGVzXCIpXG4gICAgICBsZXQgY3VycmVudFByZWRpY2F0ZVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5maWx0ZXIucHJlKSB7XG4gICAgICAgIGN1cnJlbnRQcmVkaWNhdGUgPSBwcmVkaWNhdGVzLmZpbmQoKHByZWRpY2F0ZSkgPT4gcHJlZGljYXRlLm5hbWUgPT0gdGhpcy5wcm9wcy5maWx0ZXIucHJlKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcHJlZGljYXRlOiBjdXJyZW50UHJlZGljYXRlLFxuICAgICAgICBwcmVkaWNhdGVzXG4gICAgICB9KVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRlY3JlYXNlTG9hZGluZygpXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHticmVha3BvaW50LCB0LCB2YWx1ZUlucHV0UmVmfSA9IHRoaXMudHRcbiAgICBjb25zdCB7YXR0cmlidXRlLCBwYXRoLCBwcmVkaWNhdGUsIHByZWRpY2F0ZXMsIHNjb3BlLCB2YWx1ZX0gPSB0aGlzLnNcbiAgICBjb25zdCB7bWRVcH0gPSBicmVha3BvaW50XG4gICAgbGV0IHN1Ym1pdEVuYWJsZWQgPSBmYWxzZVxuXG4gICAgaWYgKGF0dHJpYnV0ZSAmJiBwcmVkaWNhdGUpIHtcbiAgICAgIHN1Ym1pdEVuYWJsZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChzY29wZSkge1xuICAgICAgc3VibWl0RW5hYmxlZCA9IHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENhcmRcbiAgICAgICAgdGVzdElEPVwiYXBpLW1ha2VyL3RhYmxlL2ZpbHRlcnMvZmlsdGVyLWZvcm1cIlxuICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcImNhcmRTdHlsZVwiLCB7XG4gICAgICAgICAgd2lkdGg6IG1kVXAgPyB1bmRlZmluZWQgOiBcIjEwMCVcIixcbiAgICAgICAgICBtaW5XaWR0aDogNTAsXG4gICAgICAgICAgbWluSGVpZ2h0OiA1MFxuICAgICAgICB9LCBbbWRVcF0pfVxuICAgICAgPlxuICAgICAgICA8Rm9ybSBvblN1Ym1pdD17dGhpcy50dC5vblN1Ym1pdH0+XG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgICAgICB7cGF0aC5tYXAoKHtodW1hbk5hbWUsIHJlZmxlY3Rpb25OYW1lfSwgcGF0aFBhcnRJbmRleCkgPT5cbiAgICAgICAgICAgICAgPFZpZXcga2V5PXtgJHtwYXRoUGFydEluZGV4fS0ke3JlZmxlY3Rpb25OYW1lfWB9IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogXCJyb3dcIn19PlxuICAgICAgICAgICAgICAgIHtwYXRoUGFydEluZGV4ID4gMCAmJlxuICAgICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3ttYXJnaW5SaWdodDogNSwgbWFyZ2luTGVmdDogNX19PlxuICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAge2h1bWFuTmFtZX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogbWRVcCA/IFwicm93XCIgOiBcImNvbHVtblwifX0+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e21hcmdpblRvcDogbWRVcCA/IHVuZGVmaW5lZCA6IDI1fX0+XG4gICAgICAgICAgICAgIDxIZWFkZXI+XG4gICAgICAgICAgICAgICAge3QoXCIucmVsYXRpb25zaGlwc1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlJlbGF0aW9uc2hpcHNcIn0pfVxuICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAge3RoaXMucy5hc3NvY2lhdGlvbnMgJiYgdGhpcy5zb3J0ZWRSZWZsZWN0aW9uc0J5TmFtZSh0aGlzLnMuYXNzb2NpYXRpb25zKS5tYXAoKHJlZmxlY3Rpb24pID0+XG4gICAgICAgICAgICAgICAgPFJlZmxlY3Rpb25FbGVtZW50XG4gICAgICAgICAgICAgICAgICBrZXk9e3JlZmxlY3Rpb24ucmVmbGVjdGlvbk5hbWV9XG4gICAgICAgICAgICAgICAgICBtb2RlbENsYXNzTmFtZT17dGhpcy5zLm1vZGVsQ2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy50dC5vblJlZmxlY3Rpb25DbGlja2VkfVxuICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbj17cmVmbGVjdGlvbn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3ttYXJnaW5Ub3A6IG1kVXAgPyB1bmRlZmluZWQgOiAyNX19PlxuICAgICAgICAgICAgICA8SGVhZGVyPlxuICAgICAgICAgICAgICAgIHt0KFwiLmF0dHJpYnV0ZXNcIiwge2RlZmF1bHRWYWx1ZTogXCJBdHRyaWJ1dGVzXCJ9KX1cbiAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgIHt0aGlzLnMucmFuc2Fja2FibGVBdHRyaWJ1dGVzICYmIHRoaXMuc29ydGVkQXR0cmlidXRlc0J5TmFtZSh0aGlzLnMucmFuc2Fja2FibGVBdHRyaWJ1dGVzKT8ubWFwKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZT17YXR0cmlidXRlLmF0dHJpYnV0ZU5hbWUgPT0gdGhpcy5zLmF0dHJpYnV0ZT8uYXR0cmlidXRlTmFtZX1cbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZT17YXR0cmlidXRlfVxuICAgICAgICAgICAgICAgICAga2V5PXthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZX1cbiAgICAgICAgICAgICAgICAgIG1vZGVsQ2xhc3NOYW1lPXt0aGlzLnMubW9kZWxDbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnR0Lm9uQXR0cmlidXRlQ2xpY2tlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7dGhpcy5zLnJhbnNhY2thYmxlU2NvcGVzPy5tYXAoKHNjb3BlKSA9PlxuICAgICAgICAgICAgICAgIDxTY29wZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZT17c2NvcGUgPT0gdGhpcy5zLnNjb3BlfVxuICAgICAgICAgICAgICAgICAga2V5PXtzY29wZX1cbiAgICAgICAgICAgICAgICAgIHNjb3BlPXtzY29wZX1cbiAgICAgICAgICAgICAgICAgIG9uU2NvcGVDbGlja2VkPXt0aGlzLnR0Lm9uU2NvcGVDbGlja2VkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8VmlldyBzdHlsZT17e21hcmdpblRvcDogbWRVcCA/IHVuZGVmaW5lZCA6IDI1fX0+XG4gICAgICAgICAgICAgIDxIZWFkZXI+XG4gICAgICAgICAgICAgICAge3QoXCIuc2VhcmNoXCIsIHtkZWZhdWx0VmFsdWU6IFwiU2VhcmNoXCJ9KX1cbiAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAgICAgIHtwcmVkaWNhdGVzICYmICF0aGlzLnMuc2NvcGUgJiZcbiAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHJlZGljYXRlLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17cHJlZGljYXRlPy5uYW1lfVxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlQmxhbmtcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMudHQub25QcmVkaWNhdGVDaGFuZ2VkfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtwcmVkaWNhdGVzLm1hcCgocHJlZGljYXRlKSA9PiBkaWdnKHByZWRpY2F0ZSwgXCJuYW1lXCIpKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt7bWFyZ2luVG9wOiAxMH19PlxuICAgICAgICAgICAgICAgIHsoKGF0dHJpYnV0ZSAmJiBwcmVkaWNhdGUpIHx8IHNjb3BlKSAmJlxuICAgICAgICAgICAgICAgICAgPElucHV0IGNsYXNzTmFtZT1cInZhbHVlLWlucHV0XCIgZGVmYXVsdFZhbHVlPXt2YWx1ZX0gaW5wdXRSZWY9e3ZhbHVlSW5wdXRSZWZ9IC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwganVzdGlmeUNvbnRlbnQ6IFwiZW5kXCIsIG1hcmdpblRvcDogMTB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgZGFuZ2VyXG4gICAgICAgICAgICAgIGljb249XCJyZW1vdmVcIlxuICAgICAgICAgICAgICBsYWJlbD17dChcIi5jYW5jZWxcIiwge2RlZmF1bHRWYWx1ZTogXCJDYW5jZWxcIn0pfVxuICAgICAgICAgICAgICBvblByZXNzPXt0aGlzLnAub25SZXF1ZXN0Q2xvc2V9XG4gICAgICAgICAgICAgIHByZXNzYWJsZVByb3BzPXt0aGlzLmNhbmNlbEJ1dHRvblByZXNzYWJsZVByb3BzIHx8PSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IDVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGRpc2FibGVkPXshc3VibWl0RW5hYmxlZH1cbiAgICAgICAgICAgICAgaWNvbj1cImNoZWNrXCJcbiAgICAgICAgICAgICAgbGFiZWw9e3QoXCIuYXBwbHlcIiwge2RlZmF1bHRWYWx1ZTogXCJBcHBseVwifSl9XG4gICAgICAgICAgICAgIHByZXNzYWJsZVByb3BzPXt0aGlzLmFwcGxlQnV0dG9uUHJlc3NhYmxlUHJvcHMgfHw9IHtcbiAgICAgICAgICAgICAgICBzdHlsZToge21hcmdpbkxlZnQ6IDV9LFxuICAgICAgICAgICAgICAgIHRlc3RJRDogXCJhcHBseS1maWx0ZXItYnV0dG9uXCJcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgc3VibWl0XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9Gb3JtPlxuICAgICAgICB7dGhpcy5zLmxvYWRpbmcgPiAwICYmXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIHNpemU9XCJsYXJnZVwiIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICA8L0NhcmQ+XG4gICAgKVxuICB9XG5cbiAgY3VycmVudE1vZGVsQ2xhc3NGcm9tUGF0aChwYXRoKSB7XG4gICAgY29uc3Qge21vZGVsQ2xhc3N9ID0gdGhpcy5wXG4gICAgbGV0IGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuXG4gICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiBwYXRoKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZWRQYXRoUGFydCA9IGluZmxlY3Rpb24uY2FtZWxpemUocGF0aFBhcnQsIHRydWUpXG4gICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IGN1cnJlbnRNb2RlbENsYXNzLnJhbnNhY2thYmxlQXNzb2NpYXRpb25zKCkuZmluZCgocmVmbGVjdGlvbikgPT4gcmVmbGVjdGlvbi5uYW1lKCkgPT0gY2FtZWxpemVkUGF0aFBhcnQpXG5cbiAgICAgIGlmICghYXNzb2NpYXRpb24pIHtcbiAgICAgICAgY29uc3QgcmFuc2Fja2FibGVBc3NvY2lhdGlvbk5hbWVzID0gY3VycmVudE1vZGVsQ2xhc3MucmFuc2Fja2FibGVBc3NvY2lhdGlvbnMoKS5tYXAoKHJlZmxlY3Rpb24pID0+IHJlZmxlY3Rpb24ubmFtZSgpKS5qb2luKFwiLCBcIilcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgUmFuc2Fja2FibGUgYXNzb2NpYXRpb24gYnkgdGhhdCBuYW1lOiAke2NhbWVsaXplZFBhdGhQYXJ0fSBpbiAke3JhbnNhY2thYmxlQXNzb2NpYXRpb25OYW1lc31gKVxuICAgICAgfVxuXG4gICAgICBjdXJyZW50TW9kZWxDbGFzcyA9IGFzc29jaWF0aW9uLm1vZGVsQ2xhc3MoKVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50TW9kZWxDbGFzc1xuICB9XG5cbiAgY3VycmVudFBhdGhQYXJ0cygpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSB0aGlzLnBcbiAgICBjb25zdCB7cGF0aH0gPSB0aGlzLnNcbiAgICBjb25zdCByZXN1bHQgPSBbXVxuICAgIGxldCBjdXJyZW50TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcblxuICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICB0cmFuc2xhdGlvbjogbW9kZWxDbGFzcy5tb2RlbE5hbWUoKS5odW1hbih7Y291bnQ6IDJ9KVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IHBhdGhQYXJ0IG9mIHBhdGgpIHtcbiAgICAgIGNvbnN0IGNhbWVsaXplZFBhdGhQYXJ0ID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShwYXRoUGFydCwgdHJ1ZSlcbiAgICAgIGNvbnN0IHBhdGhQYXJ0VHJhbnNsYXRpb24gPSBjdXJyZW50TW9kZWxDbGFzcy5odW1hbkF0dHJpYnV0ZU5hbWUoY2FtZWxpemVkUGF0aFBhcnQpXG5cbiAgICAgIGN1cnJlbnRNb2RlbENsYXNzID0gY3VycmVudE1vZGVsQ2xhc3MucmFuc2Fja2FibGVBc3NvY2lhdGlvbnMoKS5maW5kKChyZWZsZWN0aW9uKSA9PiByZWZsZWN0aW9uLm5hbWUoKSA9PSBjYW1lbGl6ZWRQYXRoUGFydCkubW9kZWxDbGFzcygpXG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgbW9kZWxDbGFzczogY3VycmVudE1vZGVsQ2xhc3MsXG4gICAgICAgIHRyYW5zbGF0aW9uOiBwYXRoUGFydFRyYW5zbGF0aW9uXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIG9uQXR0cmlidXRlQ2xpY2tlZCA9ICh7YXR0cmlidXRlfSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYXR0cmlidXRlLFxuICAgICAgc2NvcGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICBvblByZWRpY2F0ZUNoYW5nZWQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IGNob3NlblByZWRpY2F0ZU5hbWUgPSBkaWdnKGUsIFwidGFyZ2V0XCIsIFwidmFsdWVcIilcbiAgICBjb25zdCBwcmVkaWNhdGUgPSB0aGlzLnMucHJlZGljYXRlcy5maW5kKChwcmVkaWNhdGUpID0+IHByZWRpY2F0ZS5uYW1lID09IGNob3NlblByZWRpY2F0ZU5hbWUpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtwcmVkaWNhdGV9KVxuICB9XG5cbiAgb25SZWZsZWN0aW9uQ2xpY2tlZCA9ICh7cmVmbGVjdGlvbn0pID0+IHtcbiAgICBjb25zdCBuZXdQYXRoID0gdGhpcy5zLnBhdGguY29uY2F0KFtyZWZsZWN0aW9uXSlcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYXNzb2NpYXRpb25zOiBudWxsLFxuICAgICAgYXR0cmlidXRlOiB1bmRlZmluZWQsXG4gICAgICBhY3R1YWxDdXJyZW50TW9kZWxDbGFzczoge21vZGVsQ2xhc3M6IGRpZ2cocmVmbGVjdGlvbiwgXCJyZXNvdXJjZVwiKX0sXG4gICAgICBtb2RlbENsYXNzTmFtZTogZGlnZyhyZWZsZWN0aW9uLCBcIm1vZGVsQ2xhc3NOYW1lXCIpLFxuICAgICAgcGF0aDogbmV3UGF0aCxcbiAgICAgIHByZWRpY2F0ZTogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIG9uU2NvcGVDbGlja2VkID0gKHtzY29wZX0pID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGF0dHJpYnV0ZTogdW5kZWZpbmVkLFxuICAgICAgcHJlZGljYXRlOiB1bmRlZmluZWQsXG4gICAgICBzY29wZVxuICAgIH0pXG4gIH1cblxuICBvblN1Ym1pdCA9ICgpID0+IHtcbiAgICBjb25zdCB7ZmlsdGVyLCBxdWVyeVNlYXJjaE5hbWV9ID0gdGhpcy5wXG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgcGF0aCwgcHJlZGljYXRlLCBzY29wZX0gPSB0aGlzLnNcbiAgICBjb25zdCB7ZmlsdGVySW5kZXh9ID0gZGlncyhmaWx0ZXIsIFwiZmlsdGVySW5kZXhcIilcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBQYXJhbXMucGFyc2UoKVtxdWVyeVNlYXJjaE5hbWVdIHx8IHt9XG4gICAgY29uc3QgdmFsdWUgPSBkaWdnKHRoaXMudHQudmFsdWVJbnB1dFJlZiwgXCJjdXJyZW50XCIsIFwidmFsdWVcIilcbiAgICBjb25zdCBwID0gcGF0aC5tYXAoKHJlZmxlY3Rpb24pID0+IGluZmxlY3Rpb24udW5kZXJzY29yZShyZWZsZWN0aW9uLnJlZmxlY3Rpb25OYW1lKSlcbiAgICBjb25zdCBuZXdTZWFyY2hQYXJhbXMgPSB7XG4gICAgICBwLFxuICAgICAgdjogdmFsdWVcbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICBuZXdTZWFyY2hQYXJhbXMuYSA9IGRpZ2coYXR0cmlidXRlLCBcImF0dHJpYnV0ZU5hbWVcIilcbiAgICAgIG5ld1NlYXJjaFBhcmFtcy5wcmUgPSBkaWdnKHByZWRpY2F0ZSwgXCJuYW1lXCIpXG4gICAgfSBlbHNlIGlmIChzY29wZSkge1xuICAgICAgbmV3U2VhcmNoUGFyYW1zLnNjID0gc2NvcGVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRG9udCBrbm93IGlmIHNob3VsZCBzZWFyY2ggZm9yIGF0dHJpYnV0ZSBvciBzY29wZT9cIilcbiAgICB9XG5cbiAgICBzZWFyY2hQYXJhbXNbZmlsdGVySW5kZXhdID0gSlNPTi5zdHJpbmdpZnkobmV3U2VhcmNoUGFyYW1zKVxuXG4gICAgY29uc3QgbmV3UGFyYW1zID0ge31cblxuICAgIG5ld1BhcmFtc1txdWVyeVNlYXJjaE5hbWVdID0gc2VhcmNoUGFyYW1zXG5cbiAgICBQYXJhbXMuY2hhbmdlUGFyYW1zKG5ld1BhcmFtcylcblxuICAgIHRoaXMucHJvcHMub25BcHBseUNsaWNrZWQoKVxuICB9XG5cbiAgcmVmbGVjdGlvbnNXaXRoTW9kZWxDbGFzcyhyZWZsZWN0aW9ucykge1xuICAgIHJldHVybiByZWZsZWN0aW9ucy5maWx0ZXIoKHJlZmxlY3Rpb24pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlZmxlY3Rpb24ubW9kZWxDbGFzcygpXG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBzb3J0ZWRBdHRyaWJ1dGVzQnlOYW1lKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlcy5zb3J0KChhLCBiKSA9PlxuICAgICAgZGlnZyhhLCBcImh1bWFuTmFtZVwiKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAubG9jYWxlQ29tcGFyZShcbiAgICAgICAgICBkaWdnKGIsIFwiaHVtYW5OYW1lXCIpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKVxuICAgIClcbiAgfVxuXG4gIHNvcnRlZFJlZmxlY3Rpb25zQnlOYW1lKHJlZmxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb25zLnNvcnQoKGEsIGIpID0+XG4gICAgICBkaWdnKGEsIFwiaHVtYW5OYW1lXCIpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5sb2NhbGVDb21wYXJlKFxuICAgICAgICAgIGRpZ2coYiwgXCJodW1hbk5hbWVcIikudG9Mb3dlckNhc2UoKVxuICAgICAgICApXG4gICAgKVxuICB9XG59KSlcbiJdfQ==
@@ -1,37 +1,42 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Pressable, View } from "react-native";
3
- import BaseComponent from "../../base-component.js";
4
- import Icon from "../../utils/icon";
5
- import PropTypes from "prop-types";
6
- import PropTypesExact from "prop-types-exact";
7
- import memo from "set-state-compare/build/memo.js";
8
- import React from "react";
9
- import { shapeComponent } from "set-state-compare/build/shape-component.js";
10
- import Text from "../../utils/text";
11
- export default memo(shapeComponent(class ApiMakerTableFilter extends BaseComponent {
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_native_1 = require("react-native");
8
+ const base_component_js_1 = __importDefault(require("../../base-component.js"));
9
+ const icon_1 = __importDefault(require("../../utils/icon"));
10
+ const prop_types_1 = __importDefault(require("prop-types"));
11
+ const prop_types_exact_1 = __importDefault(require("prop-types-exact"));
12
+ const memo_js_1 = __importDefault(require("set-state-compare/build/memo.js"));
13
+ const react_1 = __importDefault(require("react"));
14
+ const shape_component_js_1 = require("set-state-compare/build/shape-component.js");
15
+ const text_1 = __importDefault(require("../../utils/text"));
16
+ exports.default = (0, memo_js_1.default)((0, shape_component_js_1.shapeComponent)(class ApiMakerTableFilter extends base_component_js_1.default {
12
17
  static defaultProps = {
13
18
  a: null,
14
19
  pre: null
15
20
  };
16
- static propTypes = PropTypesExact({
17
- a: PropTypes.string,
18
- filterIndex: PropTypes.number.isRequired,
19
- onClick: PropTypes.func.isRequired,
20
- onRemoveClicked: PropTypes.func.isRequired,
21
- p: PropTypes.array.isRequired,
22
- pre: PropTypes.string,
23
- sc: PropTypes.string,
24
- v: PropTypes.string.isRequired
21
+ static propTypes = (0, prop_types_exact_1.default)({
22
+ a: prop_types_1.default.string,
23
+ filterIndex: prop_types_1.default.number.isRequired,
24
+ onClick: prop_types_1.default.func.isRequired,
25
+ onRemoveClicked: prop_types_1.default.func.isRequired,
26
+ p: prop_types_1.default.array.isRequired,
27
+ pre: prop_types_1.default.string,
28
+ sc: prop_types_1.default.string,
29
+ v: prop_types_1.default.string.isRequired
25
30
  });
26
31
  render() {
27
32
  const { p, v } = this.p;
28
33
  const { a, pre, sc } = this.props;
29
- return (_jsxs(View, { style: this.rootViewStyle ||= { alignItems: "center", flexDirection: "row", backgroundColor: "grey", paddingVertical: 10, paddingHorizontal: 6 }, children: [_jsx(Pressable, { dataSet: {
34
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: this.rootViewStyle ||= { alignItems: "center", flexDirection: "row", backgroundColor: "grey", paddingVertical: 10, paddingHorizontal: 6 }, children: [(0, jsx_runtime_1.jsx)(react_native_1.Pressable, { dataSet: {
30
35
  attribute: a,
31
36
  class: "filter-label",
32
37
  scope: sc
33
- }, onPress: this.tt.onFilterPressed, children: _jsxs(Text, { children: [p.length > 0 &&
34
- `${p.join(".")}.`, a, " ", sc, " ", pre, " ", v] }) }), _jsx(Pressable, { dataSet: this.removeFilterButtonDataSet ||= { class: "remove-filter-button" }, onPress: this.tt.onRemoveFilterPressed, style: this.removeFilterButtonStyle ||= { marginLeft: 6 }, children: _jsx(Icon, { name: "remove" }) })] }));
38
+ }, onPress: this.tt.onFilterPressed, children: (0, jsx_runtime_1.jsxs)(text_1.default, { children: [p.length > 0 &&
39
+ `${p.join(".")}.`, a, " ", sc, " ", pre, " ", v] }) }), (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { dataSet: this.removeFilterButtonDataSet ||= { class: "remove-filter-button" }, onPress: this.tt.onRemoveFilterPressed, style: this.removeFilterButtonStyle ||= { marginLeft: 6 }, children: (0, jsx_runtime_1.jsx)(icon_1.default, { name: "remove" }) })] }));
35
40
  }
36
41
  onFilterPressed = (e) => {
37
42
  e.preventDefault();
@@ -44,4 +49,4 @@ export default memo(shapeComponent(class ApiMakerTableFilter extends BaseCompone
44
49
  this.props.onRemoveClicked({ filterIndex: this.p.filterIndex });
45
50
  };
46
51
  }));
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJ0YWJsZS9maWx0ZXJzL2ZpbHRlci5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzVDLE9BQU8sYUFBYSxNQUFNLHlCQUF5QixDQUFBO0FBQ25ELE9BQU8sSUFBSSxNQUFNLGtCQUFrQixDQUFBO0FBQ25DLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFDekIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pFLE9BQU8sSUFBSSxNQUFNLGtCQUFrQixDQUFBO0FBRW5DLGVBQWUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLG1CQUFvQixTQUFRLGFBQWE7SUFDaEYsTUFBTSxDQUFDLFlBQVksR0FBRztRQUNwQixDQUFDLEVBQUUsSUFBSTtRQUNQLEdBQUcsRUFBRSxJQUFJO0tBQ1YsQ0FBQTtJQUVELE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTTtRQUNuQixXQUFXLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ3hDLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDbEMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUMxQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQzdCLEdBQUcsRUFBRSxTQUFTLENBQUMsTUFBTTtRQUNyQixFQUFFLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDcEIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtLQUMvQixDQUFDLENBQUE7SUFFRixNQUFNO1FBQ0osTUFBTSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3JCLE1BQU0sRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFFL0IsT0FBTyxDQUNMLE1BQUMsSUFBSSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxLQUFLLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUMsYUFDbEosS0FBQyxTQUFTLElBQ1IsT0FBTyxFQUFFO3dCQUNQLFNBQVMsRUFBRSxDQUFDO3dCQUNaLEtBQUssRUFBRSxjQUFjO3dCQUNyQixLQUFLLEVBQUUsRUFBRTtxQkFDVixFQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsWUFFaEMsTUFBQyxJQUFJLGVBQ0YsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dDQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUVsQixDQUFDLE9BQUcsRUFBRSxPQUFHLEdBQUcsT0FBRyxDQUFDLElBQ1osR0FDRyxFQUNaLEtBQUMsU0FBUyxJQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMseUJBQXlCLEtBQUssRUFBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUMsRUFDM0UsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLEVBQ3RDLEtBQUssRUFBRSxJQUFJLENBQUMsdUJBQXVCLEtBQUssRUFBQyxVQUFVLEVBQUUsQ0FBQyxFQUFDLFlBRXZELEtBQUMsSUFBSSxJQUFDLElBQUksRUFBQyxRQUFRLEdBQUcsR0FDWixJQUNQLENBQ1IsQ0FBQTtJQUNILENBQUM7SUFFRCxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUN0QixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUE7UUFFbEIsTUFBTSxFQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sRUFBQyxFQUFFLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBRXZCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFBO0lBQ3JELENBQUMsQ0FBQTtJQUVELHFCQUFxQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBRWxCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDLENBQUE7Q0FDRixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHJlc3NhYmxlLCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gXCIuLi8uLi9iYXNlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vLi4vdXRpbHMvaWNvblwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBQcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvbWVtby5qc1wiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IFRleHQgZnJvbSBcIi4uLy4uL3V0aWxzL3RleHRcIlxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIEFwaU1ha2VyVGFibGVGaWx0ZXIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhOiBudWxsLFxuICAgIHByZTogbnVsbFxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IFByb3BUeXBlc0V4YWN0KHtcbiAgICBhOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpbHRlckluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUNsaWNrZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcDogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgcHJlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNjOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHY6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICB9KVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7cCwgdn0gPSB0aGlzLnBcbiAgICBjb25zdCB7YSwgcHJlLCBzY30gPSB0aGlzLnByb3BzXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3RoaXMucm9vdFZpZXdTdHlsZSB8fD0ge2FsaWduSXRlbXM6IFwiY2VudGVyXCIsIGZsZXhEaXJlY3Rpb246IFwicm93XCIsIGJhY2tncm91bmRDb2xvcjogXCJncmV5XCIsIHBhZGRpbmdWZXJ0aWNhbDogMTAsIHBhZGRpbmdIb3Jpem9udGFsOiA2fX0+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBkYXRhU2V0PXt7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGEsXG4gICAgICAgICAgICBjbGFzczogXCJmaWx0ZXItbGFiZWxcIixcbiAgICAgICAgICAgIHNjb3BlOiBzY1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vbkZpbHRlclByZXNzZWR9XG4gICAgICAgID5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHtwLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgYCR7cC5qb2luKFwiLlwiKX0uYFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2F9IHtzY30ge3ByZX0ge3Z9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMucmVtb3ZlRmlsdGVyQnV0dG9uRGF0YVNldCB8fD0ge2NsYXNzOiBcInJlbW92ZS1maWx0ZXItYnV0dG9uXCJ9fVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25SZW1vdmVGaWx0ZXJQcmVzc2VkfVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnJlbW92ZUZpbHRlckJ1dHRvblN0eWxlIHx8PSB7bWFyZ2luTGVmdDogNn19XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwicmVtb3ZlXCIgLz5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgb25GaWx0ZXJQcmVzc2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIGNvbnN0IHthLCBmaWx0ZXJJbmRleCwgcCwgcHJlLCB2fSA9IHRoaXMucFxuICAgIGNvbnN0IHtzY30gPSB0aGlzLnByb3BzXG5cbiAgICB0aGlzLnByb3BzLm9uQ2xpY2soe2EsIGZpbHRlckluZGV4LCBwLCBwcmUsIHNjLCB2fSlcbiAgfVxuXG4gIG9uUmVtb3ZlRmlsdGVyUHJlc3NlZCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICB0aGlzLnByb3BzLm9uUmVtb3ZlQ2xpY2tlZCh7ZmlsdGVySW5kZXg6IHRoaXMucC5maWx0ZXJJbmRleH0pXG4gIH1cbn0pKVxuIl19
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJ0YWJsZS9maWx0ZXJzL2ZpbHRlci5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0NBQTRDO0FBQzVDLGdGQUFtRDtBQUNuRCw0REFBbUM7QUFDbkMsNERBQWtDO0FBQ2xDLHdFQUE2QztBQUM3Qyw4RUFBa0Q7QUFDbEQsa0RBQXlCO0FBQ3pCLG1GQUF5RTtBQUN6RSw0REFBbUM7QUFFbkMsa0JBQWUsSUFBQSxpQkFBSSxFQUFDLElBQUEsbUNBQWMsRUFBQyxNQUFNLG1CQUFvQixTQUFRLDJCQUFhO0lBQ2hGLE1BQU0sQ0FBQyxZQUFZLEdBQUc7UUFDcEIsQ0FBQyxFQUFFLElBQUk7UUFDUCxHQUFHLEVBQUUsSUFBSTtLQUNWLENBQUE7SUFFRCxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUEsMEJBQWMsRUFBQztRQUNoQyxDQUFDLEVBQUUsb0JBQVMsQ0FBQyxNQUFNO1FBQ25CLFdBQVcsRUFBRSxvQkFBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ3hDLE9BQU8sRUFBRSxvQkFBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ2xDLGVBQWUsRUFBRSxvQkFBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQzFDLENBQUMsRUFBRSxvQkFBUyxDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQzdCLEdBQUcsRUFBRSxvQkFBUyxDQUFDLE1BQU07UUFDckIsRUFBRSxFQUFFLG9CQUFTLENBQUMsTUFBTTtRQUNwQixDQUFDLEVBQUUsb0JBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtLQUMvQixDQUFDLENBQUE7SUFFRixNQUFNO1FBQ0osTUFBTSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3JCLE1BQU0sRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFFL0IsT0FBTyxDQUNMLHdCQUFDLG1CQUFJLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEtBQUssRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBQyxhQUNsSix1QkFBQyx3QkFBUyxJQUNSLE9BQU8sRUFBRTt3QkFDUCxTQUFTLEVBQUUsQ0FBQzt3QkFDWixLQUFLLEVBQUUsY0FBYzt3QkFDckIsS0FBSyxFQUFFLEVBQUU7cUJBQ1YsRUFDRCxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLFlBRWhDLHdCQUFDLGNBQUksZUFDRixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7Z0NBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBRWxCLENBQUMsT0FBRyxFQUFFLE9BQUcsR0FBRyxPQUFHLENBQUMsSUFDWixHQUNHLEVBQ1osdUJBQUMsd0JBQVMsSUFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixLQUFLLEVBQUMsS0FBSyxFQUFFLHNCQUFzQixFQUFDLEVBQzNFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUN0QyxLQUFLLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixLQUFLLEVBQUMsVUFBVSxFQUFFLENBQUMsRUFBQyxZQUV2RCx1QkFBQyxjQUFJLElBQUMsSUFBSSxFQUFDLFFBQVEsR0FBRyxHQUNaLElBQ1AsQ0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVELGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3RCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUVsQixNQUFNLEVBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDMUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFFdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUE7SUFDckQsQ0FBQyxDQUFBO0lBRUQscUJBQXFCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUM1QixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUE7UUFFbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFBO0lBQy9ELENBQUMsQ0FBQTtDQUNGLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQcmVzc2FibGUsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uLy4uL2Jhc2UtY29tcG9uZW50LmpzXCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi8uLi91dGlscy9pY29uXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vLi4vdXRpbHMvdGV4dFwiXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJUYWJsZUZpbHRlciBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGE6IG51bGwsXG4gICAgcHJlOiBudWxsXG4gIH1cblxuICBzdGF0aWMgcHJvcFR5cGVzID0gUHJvcFR5cGVzRXhhY3Qoe1xuICAgIGE6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZmlsdGVySW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlQ2xpY2tlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBwOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBwcmU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gIH0pXG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtwLCB2fSA9IHRoaXMucFxuICAgIGNvbnN0IHthLCBwcmUsIHNjfSA9IHRoaXMucHJvcHNcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17dGhpcy5yb290Vmlld1N0eWxlIHx8PSB7YWxpZ25JdGVtczogXCJjZW50ZXJcIiwgZmxleERpcmVjdGlvbjogXCJyb3dcIiwgYmFja2dyb3VuZENvbG9yOiBcImdyZXlcIiwgcGFkZGluZ1ZlcnRpY2FsOiAxMCwgcGFkZGluZ0hvcml6b250YWw6IDZ9fT5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIGRhdGFTZXQ9e3tcbiAgICAgICAgICAgIGF0dHJpYnV0ZTogYSxcbiAgICAgICAgICAgIGNsYXNzOiBcImZpbHRlci1sYWJlbFwiLFxuICAgICAgICAgICAgc2NvcGU6IHNjXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uRmlsdGVyUHJlc3NlZH1cbiAgICAgICAgPlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge3AubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICBgJHtwLmpvaW4oXCIuXCIpfS5gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7YX0ge3NjfSB7cHJlfSB7dn1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgZGF0YVNldD17dGhpcy5yZW1vdmVGaWx0ZXJCdXR0b25EYXRhU2V0IHx8PSB7Y2xhc3M6IFwicmVtb3ZlLWZpbHRlci1idXR0b25cIn19XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblJlbW92ZUZpbHRlclByZXNzZWR9XG4gICAgICAgICAgc3R5bGU9e3RoaXMucmVtb3ZlRmlsdGVyQnV0dG9uU3R5bGUgfHw9IHttYXJnaW5MZWZ0OiA2fX1cbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJyZW1vdmVcIiAvPlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICBvbkZpbHRlclByZXNzZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgY29uc3Qge2EsIGZpbHRlckluZGV4LCBwLCBwcmUsIHZ9ID0gdGhpcy5wXG4gICAgY29uc3Qge3NjfSA9IHRoaXMucHJvcHNcblxuICAgIHRoaXMucHJvcHMub25DbGljayh7YSwgZmlsdGVySW5kZXgsIHAsIHByZSwgc2MsIHZ9KVxuICB9XG5cbiAgb25SZW1vdmVGaWx0ZXJQcmVzc2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIHRoaXMucHJvcHMub25SZW1vdmVDbGlja2VkKHtmaWx0ZXJJbmRleDogdGhpcy5wLmZpbHRlckluZGV4fSlcbiAgfVxufSkpXG4iXX0=