@infrab4a/connect 3.11.1-beta1 → 3.11.1-beta3

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 (200) hide show
  1. package/bundles/infrab4a-connect.umd.js +1282 -344
  2. package/bundles/infrab4a-connect.umd.js.map +1 -1
  3. package/domain/catalog/helpers/index.d.ts +1 -0
  4. package/domain/catalog/helpers/round-product-price.helper.d.ts +4 -0
  5. package/domain/catalog/index.d.ts +1 -0
  6. package/domain/catalog/models/category-collection-children.d.ts +13 -0
  7. package/domain/catalog/models/category-filter.d.ts +5 -1
  8. package/domain/catalog/models/category.d.ts +5 -3
  9. package/domain/catalog/models/filter-option.d.ts +1 -2
  10. package/domain/catalog/models/filter.d.ts +1 -2
  11. package/domain/catalog/models/index.d.ts +1 -0
  12. package/domain/catalog/models/kit-product.d.ts +1 -1
  13. package/domain/catalog/models/product.d.ts +1 -2
  14. package/domain/catalog/models/types/category-product.d.ts +4 -0
  15. package/domain/catalog/models/types/index.d.ts +1 -0
  16. package/domain/catalog/models/types/shop-description.type.d.ts +1 -0
  17. package/domain/catalog/models/variant.d.ts +1 -2
  18. package/domain/catalog/repositories/category-collection-children.repository.d.ts +4 -0
  19. package/domain/catalog/repositories/category.repository.d.ts +3 -0
  20. package/domain/catalog/repositories/index.d.ts +1 -0
  21. package/domain/catalog/repositories/product.repository.d.ts +3 -1
  22. package/domain/generic/model/base.model.d.ts +9 -5
  23. package/domain/generic/model/types/base-model-builder.type.d.ts +4 -2
  24. package/domain/generic/model/types/identifier-model.type.d.ts +6 -5
  25. package/domain/generic/model/types/model-base-structure.type.d.ts +9 -3
  26. package/domain/generic/model/types/non-function-property-name.type.d.ts +12 -3
  27. package/domain/generic/repository/find.repository.d.ts +3 -1
  28. package/domain/generic/repository/get.repository.d.ts +2 -2
  29. package/domain/generic/repository/types/repository-find-filters.type.d.ts +3 -3
  30. package/domain/generic/repository/types/repository-find-result.type.d.ts +8 -1
  31. package/domain/generic/repository/types/repository-order-by-list.type.d.ts +2 -2
  32. package/domain/generic/repository/types/repository-update-params.type.d.ts +2 -2
  33. package/domain/location/models/address.d.ts +5 -3
  34. package/domain/shopping/models/checkout.d.ts +5 -6
  35. package/domain/shopping/models/coupons/coupon.d.ts +34 -6
  36. package/domain/shopping/models/order.d.ts +1 -0
  37. package/domain/shopping/models/shipping-method.d.ts +1 -0
  38. package/domain/shopping/models/subscription/checkout.d.ts +3 -4
  39. package/domain/users/models/subscription/subscription-materialization.d.ts +6 -5
  40. package/domain/users/models/subscription/subscription.d.ts +3 -3
  41. package/domain/users/models/user-address.d.ts +1 -1
  42. package/domain/users/models/user.d.ts +3 -4
  43. package/esm2015/domain/catalog/helpers/index.js +2 -0
  44. package/esm2015/domain/catalog/helpers/round-product-price.helper.js +15 -0
  45. package/esm2015/domain/catalog/index.js +2 -1
  46. package/esm2015/domain/catalog/models/category-collection-children.js +13 -0
  47. package/esm2015/domain/catalog/models/category-filter.js +14 -5
  48. package/esm2015/domain/catalog/models/category.js +6 -4
  49. package/esm2015/domain/catalog/models/filter-option.js +1 -4
  50. package/esm2015/domain/catalog/models/filter.js +1 -4
  51. package/esm2015/domain/catalog/models/index.js +2 -1
  52. package/esm2015/domain/catalog/models/kit-product.js +2 -2
  53. package/esm2015/domain/catalog/models/product.js +1 -4
  54. package/esm2015/domain/catalog/models/types/category-product.js +2 -0
  55. package/esm2015/domain/catalog/models/types/index.js +2 -1
  56. package/esm2015/domain/catalog/models/types/shop-description.type.js +1 -1
  57. package/esm2015/domain/catalog/models/variant.js +1 -4
  58. package/esm2015/domain/catalog/repositories/category-collection-children.repository.js +2 -0
  59. package/esm2015/domain/catalog/repositories/category.repository.js +1 -1
  60. package/esm2015/domain/catalog/repositories/index.js +2 -1
  61. package/esm2015/domain/catalog/repositories/product.repository.js +1 -1
  62. package/esm2015/domain/generic/model/base.model.js +3 -2
  63. package/esm2015/domain/generic/model/types/base-model-builder.type.js +1 -1
  64. package/esm2015/domain/generic/model/types/identifier-model.type.js +1 -1
  65. package/esm2015/domain/generic/model/types/model-base-structure.type.js +1 -1
  66. package/esm2015/domain/generic/model/types/non-function-property-name.type.js +1 -1
  67. package/esm2015/domain/generic/repository/find.repository.js +1 -1
  68. package/esm2015/domain/generic/repository/get.repository.js +1 -1
  69. package/esm2015/domain/generic/repository/types/repository-find-filters.type.js +1 -1
  70. package/esm2015/domain/generic/repository/types/repository-find-result.type.js +1 -1
  71. package/esm2015/domain/generic/repository/types/repository-order-by-list.type.js +1 -1
  72. package/esm2015/domain/generic/repository/types/repository-update-params.type.js +1 -1
  73. package/esm2015/domain/location/models/address.js +2 -2
  74. package/esm2015/domain/shopping/models/checkout.js +6 -7
  75. package/esm2015/domain/shopping/models/coupons/coupon.js +16 -16
  76. package/esm2015/domain/shopping/models/order.js +1 -1
  77. package/esm2015/domain/shopping/models/shipping-method.js +1 -1
  78. package/esm2015/domain/shopping/models/subscription/checkout.js +6 -6
  79. package/esm2015/domain/users/models/subscription/subscription-materialization.js +6 -6
  80. package/esm2015/domain/users/models/subscription/subscription.js +6 -6
  81. package/esm2015/domain/users/models/user-address.js +1 -1
  82. package/esm2015/domain/users/models/user.js +2 -2
  83. package/esm2015/infra/elasticsearch/adapters/axios.adapter.js +1 -1
  84. package/esm2015/infra/elasticsearch/indexes/products-index.js +8 -3
  85. package/esm2015/infra/firebase/firestore/mixins/with-create-firestore.mixin.js +3 -3
  86. package/esm2015/infra/firebase/firestore/mixins/with-crud-firestore.mixin.js +1 -1
  87. package/esm2015/infra/firebase/firestore/mixins/with-delete-firestore.mixin.js +1 -1
  88. package/esm2015/infra/firebase/firestore/mixins/with-find-firestore.mixin.js +1 -1
  89. package/esm2015/infra/firebase/firestore/mixins/with-firestore.mixin.js +17 -2
  90. package/esm2015/infra/firebase/firestore/mixins/with-get-firestore.mixin.js +2 -2
  91. package/esm2015/infra/firebase/firestore/mixins/with-helpers.mixin.js +1 -1
  92. package/esm2015/infra/firebase/firestore/mixins/with-sub-collection.mixin.js +1 -1
  93. package/esm2015/infra/firebase/firestore/mixins/with-update-firestore.mixin.js +1 -1
  94. package/esm2015/infra/firebase/firestore/repositories/catalog/category-firestore.repository.js +10 -1
  95. package/esm2015/infra/firebase/firestore/repositories/catalog/product-firestore.repository.js +5 -2
  96. package/esm2015/infra/firebase/firestore/repositories/users/user-address-firestore.repository.js +2 -2
  97. package/esm2015/infra/firebase/firestore/types/firestore-sub.repository.type.js +1 -1
  98. package/esm2015/infra/firebase/firestore/types/firestore.helpers.type.js +1 -1
  99. package/esm2015/infra/firebase/firestore/types/firestore.repository.type.js +1 -1
  100. package/esm2015/infra/hasura-graphql/mixins/helpers/attribute-option.helper.js +2 -2
  101. package/esm2015/infra/hasura-graphql/mixins/helpers/bind-filter-query.helper.js +20 -15
  102. package/esm2015/infra/hasura-graphql/mixins/helpers/filter-option.helper.js +1 -1
  103. package/esm2015/infra/hasura-graphql/mixins/helpers/graphql-field.helper.js +23 -18
  104. package/esm2015/infra/hasura-graphql/mixins/with-create-hasura-graphql.mixin.js +19 -3
  105. package/esm2015/infra/hasura-graphql/mixins/with-crud-hasura-graphql.mixin.js +2 -2
  106. package/esm2015/infra/hasura-graphql/mixins/with-delete-hasura-graphql.mixin.js +5 -3
  107. package/esm2015/infra/hasura-graphql/mixins/with-find-hasura-graphql.mixin.js +67 -8
  108. package/esm2015/infra/hasura-graphql/mixins/with-get-hasura-graphql.mixin.js +5 -3
  109. package/esm2015/infra/hasura-graphql/mixins/with-hasura-graphql.mixin.js +7 -4
  110. package/esm2015/infra/hasura-graphql/mixins/with-update-hasura-graphql.mixin.js +7 -5
  111. package/esm2015/infra/hasura-graphql/models/product-hasura-graphql.js +1 -1
  112. package/esm2015/infra/hasura-graphql/models/variant-hasura-graphql.js +1 -1
  113. package/esm2015/infra/hasura-graphql/repositories/catalog/category-collection-children-hasura-graphql.repository.js +38 -0
  114. package/esm2015/infra/hasura-graphql/repositories/catalog/category-filter-hasura-graphql.repository.js +75 -2
  115. package/esm2015/infra/hasura-graphql/repositories/catalog/category-hasura-graphql.repository.js +46 -2
  116. package/esm2015/infra/hasura-graphql/repositories/catalog/index.js +2 -1
  117. package/esm2015/infra/hasura-graphql/repositories/catalog/product-hasura-graphql.repository.js +27 -10
  118. package/esm2015/infra/hasura-graphql/repositories/catalog/variant-hasura-graphql.repository.js +2 -1
  119. package/esm2015/infra/hasura-graphql/types/graphql.repository.type.js +1 -1
  120. package/esm2015/infra/hasura-graphql/types/hasura-graphql-fields.type.js +1 -1
  121. package/esm2015/utils/decorators/debug.class.decorator.js +7 -0
  122. package/esm2015/utils/decorators/index.js +3 -0
  123. package/esm2015/utils/decorators/trace.method.decorator.js +81 -0
  124. package/esm2015/utils/helpers/class-name.helper.js +15 -0
  125. package/esm2015/utils/helpers/debug-decorator.helper.js +18 -0
  126. package/esm2015/utils/helpers/debug.helper.js +150 -0
  127. package/esm2015/utils/helpers/index.js +5 -0
  128. package/esm2015/utils/helpers/reflect.helper.js +165 -0
  129. package/esm2015/utils/index.js +9 -6
  130. package/esm2015/utils/log.utils.js +9 -0
  131. package/fesm2015/infrab4a-connect.js +911 -162
  132. package/fesm2015/infrab4a-connect.js.map +1 -1
  133. package/infra/elasticsearch/adapters/axios.adapter.d.ts +2 -2
  134. package/infra/firebase/firestore/mixins/with-create-firestore.mixin.d.ts +2 -2
  135. package/infra/firebase/firestore/mixins/with-crud-firestore.mixin.d.ts +3 -3
  136. package/infra/firebase/firestore/mixins/with-delete-firestore.mixin.d.ts +3 -3
  137. package/infra/firebase/firestore/mixins/with-find-firestore.mixin.d.ts +2 -2
  138. package/infra/firebase/firestore/mixins/with-firestore.mixin.d.ts +1 -1
  139. package/infra/firebase/firestore/mixins/with-get-firestore.mixin.d.ts +3 -3
  140. package/infra/firebase/firestore/mixins/with-helpers.mixin.d.ts +4 -4
  141. package/infra/firebase/firestore/mixins/with-sub-collection.mixin.d.ts +4 -4
  142. package/infra/firebase/firestore/mixins/with-update-firestore.mixin.d.ts +3 -3
  143. package/infra/firebase/firestore/repositories/catalog/category-firestore.repository.d.ts +4 -1
  144. package/infra/firebase/firestore/repositories/catalog/product-firestore.repository.d.ts +3 -2
  145. package/infra/firebase/firestore/repositories/catalog/product-variant-firestore.repository.d.ts +1 -1
  146. package/infra/firebase/firestore/repositories/catalog/subscription-product-firestore.repository.d.ts +1 -1
  147. package/infra/firebase/firestore/repositories/shop-settings/home-firestore.repository.d.ts +1 -1
  148. package/infra/firebase/firestore/repositories/shop-settings/shop-menu-firestore.repository.d.ts +1 -1
  149. package/infra/firebase/firestore/repositories/shop-settings/shop-settings-firestore.repository.d.ts +1 -1
  150. package/infra/firebase/firestore/repositories/shopping/buy-2-win-firestore.repository.d.ts +1 -1
  151. package/infra/firebase/firestore/repositories/shopping/campaign-dashboard-firestore.repository.d.ts +1 -1
  152. package/infra/firebase/firestore/repositories/shopping/campaign-hashtag-firestore.repository.d.ts +1 -1
  153. package/infra/firebase/firestore/repositories/shopping/checkout-firestore.repository.d.ts +1 -1
  154. package/infra/firebase/firestore/repositories/shopping/checkout-subscription-firestore.repository.d.ts +1 -1
  155. package/infra/firebase/firestore/repositories/shopping/coupon-firestore.repository.d.ts +1 -1
  156. package/infra/firebase/firestore/repositories/shopping/order-firestore.repository.d.ts +1 -1
  157. package/infra/firebase/firestore/repositories/shopping/payment-firestore.repository.d.ts +1 -1
  158. package/infra/firebase/firestore/repositories/shopping/subscription-plan-firestore.repository.d.ts +1 -1
  159. package/infra/firebase/firestore/repositories/users/lead-firestore.repository.d.ts +1 -1
  160. package/infra/firebase/firestore/repositories/users/subscription-edition-firestore.repository.d.ts +1 -1
  161. package/infra/firebase/firestore/repositories/users/subscription-firestore.repository.d.ts +1 -1
  162. package/infra/firebase/firestore/repositories/users/subscription-materialization-firestore.repository.d.ts +1 -1
  163. package/infra/firebase/firestore/repositories/users/subscription-payment-firestore.repository.d.ts +1 -1
  164. package/infra/firebase/firestore/repositories/users/user-address-firestore.repository.d.ts +1 -1
  165. package/infra/firebase/firestore/repositories/users/user-beauty-profile-firestore.repository.d.ts +1 -1
  166. package/infra/firebase/firestore/repositories/users/user-firestore.repository.d.ts +1 -1
  167. package/infra/firebase/firestore/repositories/users/user-payment-method-firestore.repository.d.ts +1 -1
  168. package/infra/firebase/firestore/types/firestore-sub.repository.type.d.ts +3 -3
  169. package/infra/firebase/firestore/types/firestore.helpers.type.d.ts +5 -5
  170. package/infra/firebase/firestore/types/firestore.repository.type.d.ts +1 -1
  171. package/infra/hasura-graphql/mixins/helpers/attribute-option.helper.d.ts +5 -3
  172. package/infra/hasura-graphql/mixins/helpers/bind-filter-query.helper.d.ts +5 -5
  173. package/infra/hasura-graphql/mixins/helpers/filter-option.helper.d.ts +4 -2
  174. package/infra/hasura-graphql/mixins/helpers/graphql-field.helper.d.ts +6 -5
  175. package/infra/hasura-graphql/mixins/with-create-hasura-graphql.mixin.d.ts +2 -1
  176. package/infra/hasura-graphql/mixins/with-crud-hasura-graphql.mixin.d.ts +4 -4
  177. package/infra/hasura-graphql/mixins/with-delete-hasura-graphql.mixin.d.ts +2 -2
  178. package/infra/hasura-graphql/mixins/with-find-hasura-graphql.mixin.d.ts +22 -9
  179. package/infra/hasura-graphql/mixins/with-get-hasura-graphql.mixin.d.ts +5 -4
  180. package/infra/hasura-graphql/mixins/with-hasura-graphql.mixin.d.ts +2 -2
  181. package/infra/hasura-graphql/mixins/with-update-hasura-graphql.mixin.d.ts +2 -2
  182. package/infra/hasura-graphql/models/product-hasura-graphql.d.ts +3 -0
  183. package/infra/hasura-graphql/models/variant-hasura-graphql.d.ts +1 -0
  184. package/infra/hasura-graphql/repositories/catalog/category-collection-children-hasura-graphql.repository.d.ts +10 -0
  185. package/infra/hasura-graphql/repositories/catalog/category-hasura-graphql.repository.d.ts +3 -0
  186. package/infra/hasura-graphql/repositories/catalog/index.d.ts +1 -0
  187. package/infra/hasura-graphql/repositories/catalog/product-hasura-graphql.repository.d.ts +2 -1
  188. package/infra/hasura-graphql/types/graphql.repository.type.d.ts +5 -3
  189. package/infra/hasura-graphql/types/hasura-graphql-fields.type.d.ts +7 -3
  190. package/package.json +2 -1
  191. package/utils/decorators/debug.class.decorator.d.ts +2 -0
  192. package/utils/decorators/index.d.ts +2 -0
  193. package/utils/decorators/trace.method.decorator.d.ts +14 -0
  194. package/utils/helpers/class-name.helper.d.ts +3 -0
  195. package/utils/helpers/debug-decorator.helper.d.ts +9 -0
  196. package/utils/helpers/debug.helper.d.ts +60 -0
  197. package/utils/helpers/index.d.ts +4 -0
  198. package/utils/helpers/reflect.helper.d.ts +50 -0
  199. package/utils/index.d.ts +8 -5
  200. package/utils/log.utils.d.ts +7 -0
@@ -1,5 +1,5 @@
1
1
  import { __awaiter, __rest } from "tslib";
2
- import { Where, } from '../../../../domain';
2
+ import { RoundProductPricesHelper, Where, } from '../../../../domain';
3
3
  import { NotFoundError } from '../../../../errors';
4
4
  import { Base, isNil, omit } from '../../../../utils';
5
5
  import { HasuraGraphQLColumnType, HasuraGraphQLWhere } from '../../enums';
@@ -34,26 +34,29 @@ export class ProductHasuraGraphQLRepository extends withCrudHasuraGraphQL(withHa
34
34
  whoMustUse: data.who_must_use,
35
35
  howToUse: data.how_to_use,
36
36
  brand: data.brand_description,
37
+ ingredients: data.ingredients,
37
38
  }),
38
- bindFindFilter: (sentence) => {
39
- const filters = Object.values(sentence).shift();
40
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ((filters === null || filters === void 0 ? void 0 : filters.description) && { description: filters.description })), (filters.differentials && { differentials: filters.differentials })), (filters.whoMustUse && {
39
+ bindFindFilter: (filters) => {
40
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ((filters === null || filters === void 0 ? void 0 : filters.description) && { description: filters.description })), (filters.differentials && { differentials: filters.differentials })), (filters.whoMustUse && {
41
41
  who_must_use: filters.whoMustUse,
42
42
  })), (filters.howToUse && {
43
43
  how_to_use: filters.howToUse,
44
44
  })), (filters.brand && {
45
45
  brand_description: filters.brand,
46
+ })), (filters.ingredients && {
47
+ ingredients: filters.ingredients,
46
48
  }));
47
49
  },
48
- bindPersistData: (descriptionData) => (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ((descriptionData === null || descriptionData === void 0 ? void 0 : descriptionData.description) && { description: descriptionData.description })), (descriptionData.differentials && { differentials: descriptionData.differentials })), (descriptionData.whoMustUse && {
50
+ bindPersistData: (descriptionData) => (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ((descriptionData === null || descriptionData === void 0 ? void 0 : descriptionData.description) && { description: descriptionData.description })), (descriptionData.differentials && { differentials: descriptionData.differentials })), (descriptionData.whoMustUse && {
49
51
  who_must_use: descriptionData.whoMustUse,
50
- })), (descriptionData.howToUse && { how_to_use: descriptionData.howToUse })), (descriptionData.brand && { brand_description: descriptionData.brand }))),
52
+ })), (descriptionData.howToUse && { how_to_use: descriptionData.howToUse })), (descriptionData.brand && { brand_description: descriptionData.brand })), (descriptionData.ingredients && { ingredients: descriptionData.ingredients }))),
51
53
  },
52
54
  },
53
55
  { differentials: { columnName: 'differentials' } },
54
56
  { whoMustUse: { columnName: 'who_must_use' } },
55
57
  { howToUse: { columnName: 'how_to_use' } },
56
58
  { brandDescription: { columnName: 'brand_description' } },
59
+ { ingredients: { columnName: 'ingredients' } },
57
60
  { hasVariants: { columnName: 'has_variants' } },
58
61
  {
59
62
  images: {
@@ -77,8 +80,7 @@ export class ProductHasuraGraphQLRepository extends withCrudHasuraGraphQL(withHa
77
80
  subscriberDiscountPercentage: data.subscriber_discount_percentage,
78
81
  subscriberPrice: data.subscriber_price,
79
82
  }),
80
- bindFindFilter: (sentence) => {
81
- const filters = Object.values(sentence).shift();
83
+ bindFindFilter: (filters) => {
82
84
  return Object.assign(Object.assign(Object.assign(Object.assign({}, (((filters === null || filters === void 0 ? void 0 : filters.price) || (filters === null || filters === void 0 ? void 0 : filters.price) === 0) && { price: filters.price })), ((filters.fullPrice || filters.fullPrice === 0) && { full_price: filters.fullPrice })), ((filters.subscriberDiscountPercentage || filters.subscriberDiscountPercentage === 0) && {
83
85
  subscriber_discount_percentage: filters.subscriberDiscountPercentage,
84
86
  })), ((filters.subscriberPrice || filters.subscriberPrice === 0) && {
@@ -102,11 +104,13 @@ export class ProductHasuraGraphQLRepository extends withCrudHasuraGraphQL(withHa
102
104
  to: (value) => (isNil(value === null || value === void 0 ? void 0 : value.quantity) ? value : value === null || value === void 0 ? void 0 : value.quantity),
103
105
  },
104
106
  },
107
+ { hasStock: { columnName: 'has_stock' } },
105
108
  'slug',
106
109
  'type',
107
110
  'video',
108
111
  'weight',
109
112
  'gender',
113
+ { intGender: { columnName: 'int_gender' } },
110
114
  { tags: { columnName: 'tags', type: HasuraGraphQLColumnType.Jsonb } },
111
115
  { filters: { columnName: 'filters', type: HasuraGraphQLColumnType.Jsonb } },
112
116
  { isKit: { columnName: 'is_kit' } },
@@ -221,12 +225,19 @@ export class ProductHasuraGraphQLRepository extends withCrudHasuraGraphQL(withHa
221
225
  const _super = Object.create(null, {
222
226
  find: { get: () => super.find }
223
227
  });
228
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
224
229
  return __awaiter(this, void 0, void 0, function* () {
225
- const _a = params || {}, { filters, fields } = _a, options = __rest(_a, ["filters", "fields"]);
230
+ const _o = params || {}, { filters, fields } = _o, options = __rest(_o, ["filters", "fields"]);
226
231
  const bindFields = fields ||
227
232
  this.fields
228
233
  .map((field) => (typeof field === 'string' ? field : Object.keys(field).shift()))
229
234
  .filter((field) => field !== 'reviews');
235
+ if ((_b = (_a = options.options) === null || _a === void 0 ? void 0 : _a.minimal) === null || _b === void 0 ? void 0 : _b.includes('price'))
236
+ (_c = options.options) === null || _c === void 0 ? void 0 : _c.minimal.push('price.price', 'price.fullPrice', 'price.subscriberPrice');
237
+ if ((_e = (_d = options.options) === null || _d === void 0 ? void 0 : _d.maximum) === null || _e === void 0 ? void 0 : _e.includes('price'))
238
+ (_f = options.options) === null || _f === void 0 ? void 0 : _f.maximum.push('price.price', 'price.fullPrice', 'price.subscriberPrice');
239
+ (_h = (_g = options.options) === null || _g === void 0 ? void 0 : _g.minimal) === null || _h === void 0 ? void 0 : _h.splice((_j = options.options) === null || _j === void 0 ? void 0 : _j.minimal.indexOf('price'), 1);
240
+ (_l = (_k = options.options) === null || _k === void 0 ? void 0 : _k.maximum) === null || _l === void 0 ? void 0 : _l.splice((_m = options.options) === null || _m === void 0 ? void 0 : _m.maximum.indexOf('price'), 1);
230
241
  return _super.find.call(this, Object.assign(Object.assign({}, options), { filters: Object.assign(Object.assign({}, filters), { productId: { operator: Where.ISNULL } }), fields: [
231
242
  ...bindFields,
232
243
  ...(bindFields.includes('price')
@@ -252,6 +263,7 @@ export class ProductHasuraGraphQLRepository extends withCrudHasuraGraphQL(withHa
252
263
  },
253
264
  });
254
265
  const product = (_a = result === null || result === void 0 ? void 0 : result.data) === null || _a === void 0 ? void 0 : _a.shift();
266
+ RoundProductPricesHelper.roundProductPrices(product);
255
267
  return product;
256
268
  });
257
269
  }
@@ -291,6 +303,11 @@ export class ProductHasuraGraphQLRepository extends withCrudHasuraGraphQL(withHa
291
303
  ], []);
292
304
  });
293
305
  }
306
+ findCatalog(params, mainGender) {
307
+ return __awaiter(this, void 0, void 0, function* () {
308
+ return this.find(Object.assign(Object.assign({}, params), { filters: Object.assign(Object.assign({}, params.filters), { published: true }), orderBy: Object.assign({ hasStock: 'desc', intGender: mainGender === 'female' ? 'desc' : 'asc' }, omit(params.orderBy, ['hasStock', 'intGender'])) }));
309
+ });
310
+ }
294
311
  updateCategories(productId, { categories }) {
295
312
  return __awaiter(this, void 0, void 0, function* () {
296
313
  if ('action' in categories && categories.action === 'remove') {
@@ -486,4 +503,4 @@ export class ProductHasuraGraphQLRepository extends withCrudHasuraGraphQL(withHa
486
503
  });
487
504
  }
488
505
  }
489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1oYXN1cmEtZ3JhcGhxbC5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC9zcmMvaW5mcmEvaGFzdXJhLWdyYXBocWwvcmVwb3NpdG9yaWVzL2NhdGFsb2cvcHJvZHVjdC1oYXN1cmEtZ3JhcGhxbC5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBY0wsS0FBSyxHQUNOLE1BQU0sb0JBQW9CLENBQUE7QUFDM0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBb0JuRCxNQUFNLE9BQU8sOEJBQ1gsU0FBUSxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBdUIsSUFBSSxDQUFDLENBQUM7SUFzQjVFLFlBQVksUUFBZ0IsRUFBRSxXQUFxQztRQUNqRSxLQUFLLENBQUM7WUFDSixTQUFTLEVBQUUsU0FBUztZQUNwQixLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLFFBQVE7WUFDUixXQUFXO1lBQ1gsTUFBTSxFQUFFLEVBQUU7U0FDWCxDQUFDLENBQUE7UUFvaEJJLHNCQUFpQixHQUFHLENBQUMsS0FBMEIsRUFBaUIsRUFBRSxDQUFDLGlDQUN0RSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEtBQ25GLFNBQVMsRUFBRSxPQUFP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QUFBO1FBQzNELENBQUM7S0FBQTtJQWdCSyx5QkFBeUIsQ0FBQyxHQUFhOztZQUMzQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUM5RCxLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUM1QixJQUFJLEVBQUUsa0JBQWtCO29CQUN4QixRQUFRLEVBQUUsSUFBSTtpQkFDZjtnQkFDRCxJQUFJLEVBQUU7b0JBQ0osS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxFQUFFLG1CQUFtQjtpQkFDMUI7YUFDRixDQUFDLENBQUE7UUFDSixDQUFDO0tBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENyZWF0ZVJlcG9zaXRvcnlQYXJhbXMsXG4gIEZpbmRSZXBvc2l0b3J5UGFyYW1zLFxuICBHZXRSZXBvc2l0b3J5UGFyYW1zLFxuICBOb25GdW5jdGlvblByb3BlcnR5TmFtZXMsXG4gIFByb2R1Y3RNZXRhZGF0YSxcbiAgUHJvZHVjdFJlcG9zaXRvcnksXG4gIFByb2R1Y3RSZXZpZXcsXG4gIFJlcG9zaXRvcnlGaW5kUmVzdWx0LFxuICBSZXZpZXdTdGF0dXNQYXJhbXMsXG4gIFJldmlld1dpdGhQcm9kdWN0RGF0YSxcbiAgU2hvcFByaWNlLFxuICBTaG9wcyxcbiAgVXBkYXRlUmVwb3NpdG9yeVBhcmFtcyxcbiAgV2hlcmUsXG59IGZyb20gJy4uLy4uLy4uLy4uL2RvbWFpbidcbmltcG9ydCB7IE5vdEZvdW5kRXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi9lcnJvcnMnXG5pbXBvcnQgeyBCYXNlLCBpc05pbCwgb21pdCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgSGFzdXJhR3JhcGhRTENvbHVtblR5cGUsIEhhc3VyYUdyYXBoUUxXaGVyZSB9IGZyb20gJy4uLy4uL2VudW1zJ1xuaW1wb3J0IHsgd2l0aENydWRIYXN1cmFHcmFwaFFMLCB3aXRoSGFzdXJhR3JhcGhRTCB9IGZyb20gJy4uLy4uL21peGlucydcbmltcG9ydCB7IFByb2R1Y3RIYXN1cmFHcmFwaFFMIH0gZnJvbSAnLi4vLi4vbW9kZWxzJ1xuaW1wb3J0IHsgSGFzdXJhR3JhcGhRTEF1dGhPcHRpb25zLCBIYXN1cmFHcmFwaFFMRmllbGRzIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbnR5cGUgUHJvZHVjdFJldmlld0ZpZWxkcyA9IHtcbiAgaWQ/OiBzdHJpbmdcbiAgc2hvcDogU2hvcHNcbiAgcmF0ZTogbnVtYmVyXG4gIGF1dGhvcj86IHN0cmluZ1xuICBlbWFpbD86IHN0cmluZ1xuICBsb2NhdGlvbj86IHN0cmluZ1xuICByZXZpZXc/OiBzdHJpbmdcbiAgc3RhdHVzPzogYm9vbGVhblxuICB0aXRsZT86IHN0cmluZ1xuICBwZXJzb25JZD86IG51bWJlclxuICBwb2ludHM/OiBudW1iZXJcbiAgb3JkZXJJZD86IHN0cmluZ1xuICBjcmVhdGVkQXQ/OiBEYXRlXG4gIHVwZGF0ZWRBdD86IERhdGVcbn1cblxuZXhwb3J0IGNsYXNzIFByb2R1Y3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeVxuICBleHRlbmRzIHdpdGhDcnVkSGFzdXJhR3JhcGhRTCh3aXRoSGFzdXJhR3JhcGhRTDxQcm9kdWN0SGFzdXJhR3JhcGhRTD4oQmFzZSkpXG4gIGltcGxlbWVudHMgUHJvZHVjdFJlcG9zaXRvcnlcbntcbiAgcHJpdmF0ZSBnZXQgcmV2aWV3c0ZpZWxkcygpOiBhbnkge1xuICAgIHJldHVybiBbXG4gICAgICAnaWQnLFxuICAgICAgJ3Nob3AnLFxuICAgICAgJ3JhdGUnLFxuICAgICAgJ2F1dGhvcicsXG4gICAgICAnZW1haWwnLFxuICAgICAgJ2xvY2F0aW9uJyxcbiAgICAgICdyZXZpZXcnLFxuICAgICAgJ3N0YXR1cycsXG4gICAgICAndGl0bGUnLFxuICAgICAgeyBwZXJzb25JZDogeyBjb2x1bW5OYW1lOiAncGVyc29uX2lkJyB9IH0sXG4gICAgICAncG9pbnRzJyxcbiAgICAgIHsgb3JkZXJJZDogeyBjb2x1bW5OYW1lOiAnb3JkZXJfaWQnIH0gfSxcbiAgICAgIHsgY3JlYXRlZEF0OiB7IGNvbHVtbk5hbWU6ICdjcmVhdGVkX2F0JyB9IH0sXG4gICAgICB7IHVwZGF0ZWRBdDogeyBjb2x1bW5OYW1lOiAndXBkYXRlZF9hdCcgfSB9LFxuICAgIF1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGVuZHBvaW50OiBzdHJpbmcsIGF1dGhPcHRpb25zOiBIYXN1cmFHcmFwaFFMQXV0aE9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICB0YWJsZU5hbWU6ICdwcm9kdWN0JyxcbiAgICAgIG1vZGVsOiBQcm9kdWN0SGFzdXJhR3JhcGhRTCxcbiAgICAgIGVuZHBvaW50LFxuICAgICAgYXV0aE9wdGlvbnMsXG4gICAgICBmaWVsZHM6IFtdLFxuICAgIH0pXG5cbiAgICBjb25zdCBjb21tb25GaWVsZHM6IEhhc3VyYUdyYXBoUUxGaWVsZHM8UHJvZHVjdEhhc3VyYUdyYXBoUUw+ID0gW1xuICAgICAgeyBpZDogeyBjb2x1bW5OYW1lOiAnaWQnLCB0bzogKHZhbHVlKSA9PiArdmFsdWUsIGZyb206ICh2YWx1ZSkgPT4gdmFsdWUudG9TdHJpbmcoKSB9IH0sXG4gICAgICB7IGZpcmVzdG9yZUlkOiB7IGNvbHVtbk5hbWU6ICdmaXJlc3RvcmVfaWQnIH0gfSxcbiAgICAgIHsgcHJvZHVjdElkOiB7IGNvbHVtbk5hbWU6ICdtYWluX3Byb2R1Y3RfaWQnIH0gfSxcbiAgICAgIHsgQ0VTVDogeyBjb2x1bW5OYW1lOiAnY2VzdCcgfSB9LFxuICAgICAgeyBFQU46IHsgY29sdW1uTmFtZTogJ2VhbicgfSB9LFxuICAgICAgeyBOQ006IHsgY29sdW1uTmFtZTogJ25jbScgfSB9LFxuICAgICAgJ2JyYW5kJyxcbiAgICAgIHsgY29zdFByaWNlOiB7IGNvbHVtbk5hbWU6ICdjb3N0X3ByaWNlJyB9IH0sXG4gICAgICB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgY29sdW1uTmFtZTogJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICBmcm9tOiAoZGVzY3JpcHRpb24sIGRhdGEpID0+ICh7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGRpZmZlcmVudGlhbHM6IGRhdGEuZGlmZmVyZW50aWFscyxcbiAgICAgICAgICAgIHdob011c3RVc2U6IGRhdGEud2hvX211c3RfdXNlLFxuICAgICAgICAgICAgaG93VG9Vc2U6IGRhdGEuaG93X3RvX3VzZSxcbiAgICAgICAgICAgIGJyYW5kOiBkYXRhLmJyYW5kX2Rlc2NyaXB0aW9uLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGJpbmRGaW5kRmlsdGVyOiAoc2VudGVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QudmFsdWVzKHNlbnRlbmNlKS5zaGlmdCgpXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLihmaWx0ZXJzPy5kZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uOiBmaWx0ZXJzLmRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgICAuLi4oZmlsdGVycy5kaWZmZXJlbnRpYWxzICYmIHsgZGlmZmVyZW50aWFsczogZmlsdGVycy5kaWZmZXJlbnRpYWxzIH0pLFxuICAgICAgICAgICAgICAuLi4oZmlsdGVycy53aG9NdXN0VXNlICYmIHtcbiAgICAgICAgICAgICAgICB3aG9fbXVzdF91c2U6IGZpbHRlcnMud2hvTXVzdFVzZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC4uLihmaWx0ZXJzLmhvd1RvVXNlICYmIHtcbiAgICAgICAgICAgICAgICBob3dfdG9fdXNlOiBmaWx0ZXJzLmhvd1RvVXNlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLi4uKGZpbHRlcnMuYnJhbmQgJiYge1xuICAgICAgICAgICAgICAgIGJyYW5kX2Rlc2NyaXB0aW9uOiBmaWx0ZXJzLmJyYW5kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJpbmRQZXJzaXN0RGF0YTogKGRlc2NyaXB0aW9uRGF0YSkgPT4gKHtcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbkRhdGE/LmRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uRGF0YS5kZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbkRhdGEuZGlmZmVyZW50aWFscyAmJiB7IGRpZmZlcmVudGlhbHM6IGRlc2NyaXB0aW9uRGF0YS5kaWZmZXJlbnRpYWxzIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uRGF0YS53aG9NdXN0VXNlICYmIHtcbiAgICAgICAgICAgICAgd2hvX211c3RfdXNlOiBkZXNjcmlwdGlvbkRhdGEud2hvTXVzdFVzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uRGF0YS5ob3dUb1VzZSAmJiB7IGhvd190b191c2U6IGRlc2NyaXB0aW9uRGF0YS5ob3dUb1VzZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbkRhdGEuYnJhbmQgJiYgeyBicmFuZF9kZXNjcmlwdGlvbjogZGVzY3JpcHRpb25EYXRhLmJyYW5kIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHsgZGlmZmVyZW50aWFsczogeyBjb2x1bW5OYW1lOiAnZGlmZmVyZW50aWFscycgfSB9LFxuICAgICAgeyB3aG9NdXN0VXNlOiB7IGNvbHVtbk5hbWU6ICd3aG9fbXVzdF91c2UnIH0gfSxcbiAgICAgIHsgaG93VG9Vc2U6IHsgY29sdW1uTmFtZTogJ2hvd190b191c2UnIH0gfSxcbiAgICAgIHsgYnJhbmREZXNjcmlwdGlvbjogeyBjb2x1bW5OYW1lOiAnYnJhbmRfZGVzY3JpcHRpb24nIH0gfSxcbiAgICAgIHsgaGFzVmFyaWFudHM6IHsgY29sdW1uTmFtZTogJ2hhc192YXJpYW50cycgfSB9LFxuICAgICAge1xuICAgICAgICBpbWFnZXM6IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiAnaW1hZ2VzJyxcbiAgICAgICAgICB0bzogKHZhbHVlKSA9PiAodmFsdWU/Lmxlbmd0aCA+IDAgPyBge1wiJHt2YWx1ZT8uam9pbj8uKGBcIixcImApIHx8ICcnfVwifWAgOiBge31gKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1pbmlhdHVyZXM6IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiAnbWluaWF0dXJlcycsXG4gICAgICAgICAgdG86ICh2YWx1ZSkgPT4gKHZhbHVlPy5sZW5ndGggPiAwID8gYHtcIiR7dmFsdWU/LmpvaW4/LihgXCIsXCJgKSB8fCAnJ31cIn1gIDogYHt9YCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgJ25hbWUnLFxuICAgICAge1xuICAgICAgICBwcmljZToge1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdwcmljZScsXG4gICAgICAgICAgZnJvbTogKHByaWNlLCBkYXRhKTogU2hvcFByaWNlID0+ICh7XG4gICAgICAgICAgICBwcmljZSxcbiAgICAgICAgICAgIGZ1bGxQcmljZTogZGF0YS5mdWxsX3ByaWNlLFxuICAgICAgICAgICAgc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZTogZGF0YS5zdWJzY3JpYmVyX2Rpc2NvdW50X3BlcmNlbnRhZ2UsXG4gICAgICAgICAgICBzdWJzY3JpYmVyUHJpY2U6IGRhdGEuc3Vic2NyaWJlcl9wcmljZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBiaW5kRmluZEZpbHRlcjogKHNlbnRlbmNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LnZhbHVlcyhzZW50ZW5jZSkuc2hpZnQoKVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi4oKGZpbHRlcnM/LnByaWNlIHx8IGZpbHRlcnM/LnByaWNlID09PSAwKSAmJiB7IHByaWNlOiBmaWx0ZXJzLnByaWNlIH0pLFxuICAgICAgICAgICAgICAuLi4oKGZpbHRlcnMuZnVsbFByaWNlIHx8IGZpbHRlcnMuZnVsbFByaWNlID09PSAwKSAmJiB7IGZ1bGxfcHJpY2U6IGZpbHRlcnMuZnVsbFByaWNlIH0pLFxuICAgICAgICAgICAgICAuLi4oKGZpbHRlcnMuc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZSB8fCBmaWx0ZXJzLnN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2UgPT09IDApICYmIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyX2Rpc2NvdW50X3BlcmNlbnRhZ2U6IGZpbHRlcnMuc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC4uLigoZmlsdGVycy5zdWJzY3JpYmVyUHJpY2UgfHwgZmlsdGVycy5zdWJzY3JpYmVyUHJpY2UgPT09IDApICYmIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyX3ByaWNlOiBmaWx0ZXJzLnN1YnNjcmliZXJQcmljZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBiaW5kUGVyc2lzdERhdGE6IChwcmljZURhdGEpID0+ICh7XG4gICAgICAgICAgICAuLi4ocHJpY2VEYXRhPy5wcmljZSA+PSAwICYmIHsgcHJpY2U6IHByaWNlRGF0YS5wcmljZSB9KSxcbiAgICAgICAgICAgIC4uLihwcmljZURhdGEuZnVsbFByaWNlID49IDAgJiYgeyBmdWxsX3ByaWNlOiBwcmljZURhdGEuZnVsbFByaWNlIH0pLFxuICAgICAgICAgICAgLi4uKHByaWNlRGF0YS5zdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlID49IDAgJiYge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyX2Rpc2NvdW50X3BlcmNlbnRhZ2U6IHByaWNlRGF0YS5zdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4ocHJpY2VEYXRhLnN1YnNjcmliZXJQcmljZSA+PSAwICYmIHsgc3Vic2NyaWJlcl9wcmljZTogcHJpY2VEYXRhLnN1YnNjcmliZXJQcmljZSB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7IGZ1bGxQcmljZTogeyBjb2x1bW5OYW1lOiAnZnVsbF9wcmljZScgfSB9LFxuICAgICAgeyBzdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlOiB7IGNvbHVtbk5hbWU6ICdzdWJzY3JpYmVyX2Rpc2NvdW50X3BlcmNlbnRhZ2UnIH0gfSxcbiAgICAgIHsgc3Vic2NyaWJlclByaWNlOiB7IGNvbHVtbk5hbWU6ICdzdWJzY3JpYmVyX3ByaWNlJyB9IH0sXG4gICAgICAncHVibGlzaGVkJyxcbiAgICAgICdza3UnLFxuICAgICAge1xuICAgICAgICBzdG9jazoge1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdzdG9jaycsXG4gICAgICAgICAgZnJvbTogKHF1YW50aXR5OiBudW1iZXIpID0+ICh7IHF1YW50aXR5IH0pLFxuICAgICAgICAgIHRvOiAodmFsdWUpID0+IChpc05pbCh2YWx1ZT8ucXVhbnRpdHkpID8gdmFsdWUgOiB2YWx1ZT8ucXVhbnRpdHkpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgICdzbHVnJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICd2aWRlbycsXG4gICAgICAnd2VpZ2h0JyxcbiAgICAgICdnZW5kZXInLFxuICAgICAgeyB0YWdzOiB7IGNvbHVtbk5hbWU6ICd0YWdzJywgdHlwZTogSGFzdXJhR3JhcGhRTENvbHVtblR5cGUuSnNvbmIgfSB9LFxuICAgICAgeyBmaWx0ZXJzOiB7IGNvbHVtbk5hbWU6ICdmaWx0ZXJzJywgdHlwZTogSGFzdXJhR3JhcGhRTENvbHVtblR5cGUuSnNvbmIgfSB9LFxuICAgICAgeyBpc0tpdDogeyBjb2x1bW5OYW1lOiAnaXNfa2l0JyB9IH0sXG4gICAgICB7IGNyZWF0ZWRBdDogeyBjb2x1bW5OYW1lOiAnY3JlYXRlZF9hdCcgfSB9LFxuICAgICAgeyB1cGRhdGVkQXQ6IHsgY29sdW1uTmFtZTogJ3VwZGF0ZWRfYXQnIH0gfSxcbiAgICAgIHsgcmF0ZTogeyBjb2x1bW5OYW1lOiAncmF0aW5nJyB9IH0sXG4gICAgICB7IHJldmlld3NUb3RhbDogeyBjb2x1bW5OYW1lOiAncmV2aWV3c190b3RhbCcgfSB9LFxuICAgICAgeyBzaG9wcGluZ0NvdW50OiB7IGNvbHVtbk5hbWU6ICdzaG9wcGluZ19jb3VudCcgfSB9LFxuICAgICAgeyBjYXRlZ29yeUlkOiB7IGNvbHVtbk5hbWU6ICdjYXRlZ29yeV9pZCcgfSB9LFxuICAgICAge1xuICAgICAgICBjYXRlZ29yeToge1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdjYXRlZ29yeScsXG4gICAgICAgICAgZm9yZWlnbktleUNvbHVtbjogeyBpZDogJ2NhdGVnb3J5SWQnIH0sXG4gICAgICAgICAgZmllbGRzOiBbJ2lkJywgJ25hbWUnLCAncmVmZXJlbmNlJywgJ3NsdWcnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXVxuXG4gICAgdGhpcy5maWVsZHMgPSBbXG4gICAgICAuLi5jb21tb25GaWVsZHMsXG4gICAgICB7XG4gICAgICAgIGNhdGVnb3JpZXM6IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiAnY2F0ZWdvcmllcycsXG4gICAgICAgICAgZmllbGRzOiBbJ2NhdGVnb3J5X2lkJ10sXG4gICAgICAgICAgYmluZFBlcnNpc3REYXRhOiAodmFsdWUpID0+ICh7XG4gICAgICAgICAgICBjYXRlZ29yaWVzOiB7IGRhdGE6IHZhbHVlLm1hcCgoY2F0ZWdvcnkpID0+ICh7IGNhdGVnb3J5X2lkOiArY2F0ZWdvcnkgfSkpIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdG86IChjYXRlZ29yaWVzKSA9PiBjYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnlJZCkgPT4gK2NhdGVnb3J5SWQpLFxuICAgICAgICAgIGZyb206IChjYXRlZ29yaWVzOiB7IGNhdGVnb3J5X2lkOiBudW1iZXIgfVtdKSA9PlxuICAgICAgICAgICAgY2F0ZWdvcmllcz8ubWFwKChjYXRlZ29yeSkgPT4gY2F0ZWdvcnk/LmNhdGVnb3J5X2lkPy50b1N0cmluZygpKSB8fCBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtpdFByb2R1Y3RzOiB7XG4gICAgICAgICAgY29sdW1uTmFtZTogJ2tpdF9wcm9kdWN0cycsXG4gICAgICAgICAgZm9yZWlnbktleUNvbHVtbjogeyBwcm9kdWN0SWQ6ICdpZCcgfSxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHsgcHJvZHVjdElkOiB7IGNvbHVtbk5hbWU6ICdwcm9kdWN0X2lkJyB9IH0sXG4gICAgICAgICAgICB7IGtpdFByb2R1Y3RJZDogeyBjb2x1bW5OYW1lOiAna2l0X3Byb2R1Y3RfaWQnIH0gfSxcbiAgICAgICAgICAgICdxdWFudGl0eScsXG4gICAgICAgICAgICB7IHByb2R1Y3Q6IHsgY29sdW1uTmFtZTogJ3Byb2R1Y3QnLCBmb3JlaWduS2V5Q29sdW1uOiB7IGlkOiAncHJvZHVjdF9pZCcgfSwgZmllbGRzOiBjb21tb25GaWVsZHMgfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZXZpZXdzOiB7XG4gICAgICAgICAgY29sdW1uTmFtZTogJ3Jldmlld3MnLFxuICAgICAgICAgIGZvcmVpZ25LZXlDb2x1bW46IHsgcHJvZHVjdF9pZDogJ2lkJyB9LFxuICAgICAgICAgIGZpZWxkczogdGhpcy5yZXZpZXdzRmllbGRzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiAnbWV0YWRhdGEnLFxuICAgICAgICAgIGZpZWxkczogWyd0aXRsZScsICdkZXNjcmlwdGlvbiddLFxuICAgICAgICAgIGJpbmRQZXJzaXN0RGF0YTogKHZhbHVlKSA9PiAoe1xuICAgICAgICAgICAgbWV0YWRhdGE6IHsgZGF0YTogdmFsdWUgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlKHBhcmFtczogQ3JlYXRlUmVwb3NpdG9yeVBhcmFtczxQcm9kdWN0SGFzdXJhR3JhcGhRTD4pOiBQcm9taXNlPFByb2R1Y3RIYXN1cmFHcmFwaFFMPiB7XG4gICAgY29uc3QgeyBtZXRhZGF0YSwgLi4uZGF0YSB9ID0gcGFyYW1zXG4gICAgY29uc3QgcHJvZHVjdCA9IGF3YWl0IHN1cGVyLmNyZWF0ZShcbiAgICAgIG9taXQoeyAuLi5kYXRhLCBtZXRhZGF0YTogbWV0YWRhdGEgfHwgeyBkZXNjcmlwdGlvbjogbnVsbCwgdGl0bGU6IG51bGwgfSB9LCBbJ3Jldmlld3MnXSksXG4gICAgKVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb2R1Y3QucmV2aWV3cyA9IGRhdGEucmV2aWV3cyAmJiAoYXdhaXQgdGhpcy51cGRhdGVSZXZpZXdzKCtwcm9kdWN0LmlkLCBkYXRhKSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGUoeyBpZDogcHJvZHVjdC5pZCB9KVxuXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiBwcm9kdWN0XG4gIH1cblxuICBhc3luYyBnZXQoaWRlbnRpZmllcnM6IEdldFJlcG9zaXRvcnlQYXJhbXM8UHJvZHVjdEhhc3VyYUdyYXBoUUw+KTogUHJvbWlzZTxQcm9kdWN0SGFzdXJhR3JhcGhRTD4ge1xuICAgIGNvbnN0IHByb2R1Y3QgPSBOdW1iZXIuaXNOYU4oK2lkZW50aWZpZXJzLmlkKVxuICAgICAgPyAoYXdhaXQgdGhpcy5maW5kKHsgZmlsdGVyczogeyBmaXJlc3RvcmVJZDogaWRlbnRpZmllcnMuaWQgfSwgb3B0aW9uczogeyBlbmFibGVDb3VudDogZmFsc2UgfSB9KSkuZGF0YT8uWzBdXG4gICAgICA6IGF3YWl0IHN1cGVyLmdldChpZGVudGlmaWVycylcblxuICAgIGlmIChwcm9kdWN0LnByb2R1Y3RJZCkgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoJ1Byb2R1Y3Qgbm90IGZvdW5kLCBpdCBpcyBhIHZhcmlhbnQnKVxuXG4gICAgcHJvZHVjdC5yZXZpZXdzID0gcHJvZHVjdC5yZXZpZXdzIHx8IChhd2FpdCB0aGlzLmZpbmRSZXZpZXdzQnlQcm9kdWN0KCtwcm9kdWN0LmlkKSlcblxuICAgIHJldHVybiBwcm9kdWN0XG4gIH1cblxuICBhc3luYyBmaW5kKHBhcmFtcz86IEZpbmRSZXBvc2l0b3J5UGFyYW1zPFByb2R1Y3RIYXN1cmFHcmFwaFFMPik6IFByb21pc2U8UmVwb3NpdG9yeUZpbmRSZXN1bHQ8UHJvZHVjdEhhc3VyYUdyYXBoUUw+PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzLCBmaWVsZHMsIC4uLm9wdGlvbnMgfSA9IHBhcmFtcyB8fCB7fVxuICAgIGNvbnN0IGJpbmRGaWVsZHMgPVxuICAgICAgZmllbGRzIHx8XG4gICAgICAodGhpcy5maWVsZHNcbiAgICAgICAgLm1hcCgoZmllbGQpID0+ICh0eXBlb2YgZmllbGQgPT09ICdzdHJpbmcnID8gZmllbGQgOiBPYmplY3Qua2V5cyhmaWVsZCkuc2hpZnQoKSkpXG4gICAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZCAhPT0gJ3Jldmlld3MnKSBhcyBOb25GdW5jdGlvblByb3BlcnR5TmFtZXM8XG4gICAgICAgIFByb2R1Y3RIYXN1cmFHcmFwaFFMLFxuICAgICAgICBrZXlvZiBQcm9kdWN0SGFzdXJhR3JhcGhRTFxuICAgICAgPltdKVxuXG4gICAgcmV0dXJuIHN1cGVyLmZpbmQoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGZpbHRlcnM6IHsgLi4uZmlsdGVycywgcHJvZHVjdElkOiB7IG9wZXJhdG9yOiBXaGVyZS5JU05VTEwgfSB9LFxuICAgICAgZmllbGRzOiBbXG4gICAgICAgIC4uLmJpbmRGaWVsZHMsXG4gICAgICAgIC4uLihiaW5kRmllbGRzLmluY2x1ZGVzKCdwcmljZScpXG4gICAgICAgICAgPyAoW1xuICAgICAgICAgICAgICAnc3Vic2NyaWJlclByaWNlJyxcbiAgICAgICAgICAgICAgJ3N1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2UnLFxuICAgICAgICAgICAgICAnZnVsbFByaWNlJyxcbiAgICAgICAgICAgIF0gYXMgTm9uRnVuY3Rpb25Qcm9wZXJ0eU5hbWVzPFByb2R1Y3RIYXN1cmFHcmFwaFFMPltdKVxuICAgICAgICAgIDogW10pLFxuICAgICAgXSxcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgZ2V0QnlTbHVnKHNsdWc6IHN0cmluZyk6IFByb21pc2U8UHJvZHVjdEhhc3VyYUdyYXBoUUw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmZpbmQoe1xuICAgICAgZmlsdGVyczoge1xuICAgICAgICBzbHVnLFxuICAgICAgfSxcbiAgICAgIGZpZWxkczogdGhpcy5maWVsZHMubWFwKChmaWVsZCkgPT5cbiAgICAgICAgdHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJyA/IGZpZWxkIDogT2JqZWN0LmtleXMoZmllbGQpLnNoaWZ0KCksXG4gICAgICApIGFzIE5vbkZ1bmN0aW9uUHJvcGVydHlOYW1lczxQcm9kdWN0SGFzdXJhR3JhcGhRTCwga2V5b2YgUHJvZHVjdEhhc3VyYUdyYXBoUUw+W10sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGVuYWJsZUNvdW50OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGNvbnN0IHByb2R1Y3QgPSByZXN1bHQ/LmRhdGE/LnNoaWZ0KClcblxuICAgIHJldHVybiBwcm9kdWN0XG4gIH1cblxuICBhc3luYyB1cGRhdGUocGFyYW1zOiBVcGRhdGVSZXBvc2l0b3J5UGFyYW1zPFByb2R1Y3RIYXN1cmFHcmFwaFFMPik6IFByb21pc2U8UHJvZHVjdEhhc3VyYUdyYXBoUUw+IHtcbiAgICBjb25zdCB7IGNhdGVnb3JpZXMsIGtpdFByb2R1Y3RzLCByZXZpZXdzLCBpZDogY2hlY2tJZCwgcmF0ZSwgbWV0YWRhdGEsIC4uLmRhdGEgfSA9IHBhcmFtc1xuICAgIGNvbnN0IHBsYWluRGF0YSA9IHRoaXMucGFyYW1zVG9QbGFpbih7IGlkOiBjaGVja0lkIH0pXG4gICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLmdldElkKHBsYWluRGF0YS5pZClcbiAgICBjb25zdCBwcm9kdWN0ID0gYXdhaXQgc3VwZXIudXBkYXRlKHsgaWQsIC4uLmRhdGEgfSlcblxuICAgIHByb2R1Y3QuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXMgJiYgKGF3YWl0IHRoaXMudXBkYXRlQ2F0ZWdvcmllcygraWQsIHsgY2F0ZWdvcmllcyB9KSlcbiAgICBwcm9kdWN0LmtpdFByb2R1Y3RzID0ga2l0UHJvZHVjdHMgJiYgKGF3YWl0IHRoaXMudXBkYXRlS2l0UHJvZHVjdHMoK2lkLCB7IGtpdFByb2R1Y3RzIH0pKVxuICAgIHByb2R1Y3QucmV2aWV3cyA9IHJldmlld3MgJiYgKGF3YWl0IHRoaXMudXBkYXRlUmV2aWV3cygraWQsIHsgcmV2aWV3cyB9KSlcbiAgICBwcm9kdWN0Lm1ldGFkYXRhID0gbWV0YWRhdGEgJiYgKGF3YWl0IHRoaXMudXBkYXRlTWV0YWRhdGEoK2lkLCB7IG1ldGFkYXRhIH0pKVxuXG4gICAgcmV0dXJuIHByb2R1Y3RcbiAgfVxuXG4gIGFzeW5jIGZldGNoUmV2aWV3cyhzdGF0dXM6IFJldmlld1N0YXR1c1BhcmFtcyk6IFByb21pc2U8UmV2aWV3V2l0aFByb2R1Y3REYXRhW10+IHtcbiAgICBjb25zdCByZXZpZXdzRXhwcmVzc2lvbiA9IHtcbiAgICAgIHN0YXR1czpcbiAgICAgICAgc3RhdHVzID09PSAncGVuZGluZydcbiAgICAgICAgICA/IHsgW0hhc3VyYUdyYXBoUUxXaGVyZS5JU05VTExdOiB0cnVlIH1cbiAgICAgICAgICA6IHsgW0hhc3VyYUdyYXBoUUxXaGVyZS5FUVVBTFNdOiBzdGF0dXMgPT09ICdhcHByb3ZlZCcgfSxcbiAgICB9XG4gICAgY29uc3QgeyBwcm9kdWN0OiBkYXRhIH0gPSBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgJ3Byb2R1Y3QnLFxuICAgICAgWydpZCcsICduYW1lJywgJ3NrdScsIHsgcmV2aWV3czogeyBjb2x1bW5OYW1lOiAncmV2aWV3cycsIGZpZWxkczogdGhpcy5yZXZpZXdzRmllbGRzIH0gfV0sXG4gICAgICB7XG4gICAgICAgIHdoZXJlOiB7IHZhbHVlOiB7IHJldmlld3M6IHJldmlld3NFeHByZXNzaW9uIH0sIHR5cGU6ICdwcm9kdWN0X2Jvb2xfZXhwJywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgcmV0dXJuIGRhdGEucmVkdWNlKFxuICAgICAgKHJldmlld3MsIHByb2R1Y3QpID0+IFtcbiAgICAgICAgLi4ucmV2aWV3cyxcbiAgICAgICAgLi4ucHJvZHVjdC5yZXZpZXdzXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChyZXZpZXcpID0+XG4gICAgICAgICAgICAgIChzdGF0dXMgPT09ICdwZW5kaW5nJyAmJiBbdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyhyZXZpZXcuc3RhdHVzKSkgfHxcbiAgICAgICAgICAgICAgKHN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJiByZXZpZXcuc3RhdHVzID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgICAoc3RhdHVzID09PSAncmVqZWN0ZWQnICYmIHJldmlldy5zdGF0dXMgPT09IGZhbHNlKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgocmV2aWV3KSA9PiAoe1xuICAgICAgICAgICAgLi4udGhpcy5iaW5kUmV2aWV3VG9Nb2RlbChyZXZpZXcpLFxuICAgICAgICAgICAgcHJvZHVjdElkOiBwcm9kdWN0LmlkLFxuICAgICAgICAgICAgcHJvZHVjdE5hbWU6IHByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgIHByb2R1Y3RTa3U6IHByb2R1Y3Quc2t1LFxuICAgICAgICAgIH0pKSxcbiAgICAgIF0sXG4gICAgICBbXSBhcyBSZXZpZXdXaXRoUHJvZHVjdERhdGFbXSxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNhdGVnb3JpZXMoXG4gICAgcHJvZHVjdElkOiBudW1iZXIsXG4gICAgeyBjYXRlZ29yaWVzIH06IFBpY2s8VXBkYXRlUmVwb3NpdG9yeVBhcmFtczxQcm9kdWN0SGFzdXJhR3JhcGhRTD4sICdjYXRlZ29yaWVzJz4sXG4gICk6IFByb21pc2U8UHJvZHVjdEhhc3VyYUdyYXBoUUxbJ2NhdGVnb3JpZXMnXT4ge1xuICAgIGlmICgnYWN0aW9uJyBpbiBjYXRlZ29yaWVzICYmIGNhdGVnb3JpZXMuYWN0aW9uID09PSAncmVtb3ZlJykge1xuICAgICAgYXdhaXQgdGhpcy5tdXRhdGlvbignZGVsZXRlX2NhdGVnb3J5X3Byb2R1Y3QnLCBbJ2FmZmVjdGVkX3Jvd3MnXSwge1xuICAgICAgICB3aGVyZToge1xuICAgICAgICAgIHR5cGU6ICdjYXRlZ29yeV9wcm9kdWN0X2Jvb2xfZXhwJyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogeyBwcm9kdWN0X2lkOiB7IF9lcTogcHJvZHVjdElkIH0gfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIGNvbnN0IHBsYWluRGF0YSA9IHRoaXMucGFyYW1zVG9QbGFpbih7IGNhdGVnb3JpZXMgfSlcblxuICAgIGlmICghcGxhaW5EYXRhLmNhdGVnb3JpZXMgfHwgcGxhaW5EYXRhLmNhdGVnb3JpZXMubGVuZ3RoIDw9IDApIHJldHVybiBbXVxuXG4gICAgYXdhaXQgdGhpcy5tdXRhdGlvbignZGVsZXRlX2NhdGVnb3J5X3Byb2R1Y3QnLCBbJ2FmZmVjdGVkX3Jvd3MnXSwge1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgdHlwZTogJ2NhdGVnb3J5X3Byb2R1Y3RfYm9vbF9leHAnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHsgcHJvZHVjdF9pZDogeyBfZXE6IHByb2R1Y3RJZCB9IH0sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLm11dGF0aW9uKCdpbnNlcnRfY2F0ZWdvcnlfcHJvZHVjdCcsIFsnYWZmZWN0ZWRfcm93cyddLCB7XG4gICAgICBvYmplY3RzOiB7XG4gICAgICAgIHR5cGU6ICdbY2F0ZWdvcnlfcHJvZHVjdF9pbnNlcnRfaW5wdXQhXScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogcGxhaW5EYXRhLmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeUlkKSA9PiAoeyBjYXRlZ29yeV9pZDogY2F0ZWdvcnlJZCwgcHJvZHVjdF9pZDogcHJvZHVjdElkIH0pKSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHJldHVybiBwbGFpbkRhdGEuY2F0ZWdvcmllc1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVLaXRQcm9kdWN0cyhcbiAgICBwcm9kdWN0SWQ6IG51bWJlcixcbiAgICB7IGtpdFByb2R1Y3RzIH06IFBpY2s8VXBkYXRlUmVwb3NpdG9yeVBhcmFtczxQcm9kdWN0SGFzdXJhR3JhcGhRTD4sICdraXRQcm9kdWN0cyc+LFxuICApOiBQcm9taXNlPFByb2R1Y3RIYXN1cmFHcmFwaFFMWydraXRQcm9kdWN0cyddPiB7XG4gICAgY29uc3QgcGxhaW5EYXRhID0gdGhpcy5wYXJhbXNUb1BsYWluKHsga2l0UHJvZHVjdHMgfSlcblxuICAgIGF3YWl0IHRoaXMubXV0YXRpb24oJ2RlbGV0ZV9wcm9kdWN0X2tpdCcsIFsnYWZmZWN0ZWRfcm93cyddLCB7XG4gICAgICB3aGVyZToge1xuICAgICAgICB0eXBlOiAncHJvZHVjdF9raXRfYm9vbF9leHAnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHsga2l0X3Byb2R1Y3RfaWQ6IHsgX2VxOiBwcm9kdWN0SWQgfSB9LFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgYXdhaXQgdGhpcy5tdXRhdGlvbignaW5zZXJ0X3Byb2R1Y3Rfa2l0JywgWydhZmZlY3RlZF9yb3dzJ10sIHtcbiAgICAgIG9iamVjdHM6IHtcbiAgICAgICAgdHlwZTogJ1twcm9kdWN0X2tpdF9pbnNlcnRfaW5wdXQhXScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogcGxhaW5EYXRhLmtpdFByb2R1Y3RzLm1hcCgoa2l0UHJvZHVjdCkgPT4gKHtcbiAgICAgICAgICBraXRfcHJvZHVjdF9pZDogcHJvZHVjdElkLFxuICAgICAgICAgIHByb2R1Y3RfaWQ6IGtpdFByb2R1Y3QucHJvZHVjdElkIHx8IGtpdFByb2R1Y3QucHJvZHVjdC5pZCxcbiAgICAgICAgICBxdWFudGl0eToga2l0UHJvZHVjdC5xdWFudGl0eSxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHBsYWluRGF0YS5raXRQcm9kdWN0c1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVSZXZpZXdzKFxuICAgIHByb2R1Y3RJZDogbnVtYmVyLFxuICAgIHsgcmV2aWV3cyB9OiBQaWNrPFVwZGF0ZVJlcG9zaXRvcnlQYXJhbXM8UHJvZHVjdEhhc3VyYUdyYXBoUUw+LCAncmV2aWV3cyc+LFxuICApOiBQcm9taXNlPFByb2R1Y3RSZXZpZXdbXT4ge1xuICAgIGlmICghcmV2aWV3cykgcmV0dXJuIFtdXG4gICAgaWYgKCdhY3Rpb24nIGluIHJldmlld3MgJiYgcmV2aWV3cy5hY3Rpb24gPT09ICdyZW1vdmUnKSB7XG4gICAgICBjb25zdCByZXZpZXdJZHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmV2aWV3cy52YWx1ZS5tYXAoYXN5bmMgKHJldmlld0RhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCByZXZpZXcgPSBhd2FpdCB0aGlzLmZpbmRSZXZpZXcocmV2aWV3RGF0YSwgcHJvZHVjdElkKVxuXG4gICAgICAgICAgcmV0dXJuIHJldmlldz8uaWRcbiAgICAgICAgfSksXG4gICAgICApXG5cbiAgICAgIGF3YWl0IHRoaXMubXV0YXRpb24oJ2RlbGV0ZV9wcm9kdWN0X3JldmlldycsIFsnYWZmZWN0ZWRfcm93cyddLCB7XG4gICAgICAgIHdoZXJlOiB7IHZhbHVlOiB7IGlkOiB7IF9pbjogcmV2aWV3SWRzLmZpbHRlcihCb29sZWFuKSB9IH0sIHR5cGU6ICdwcm9kdWN0X3Jldmlld19ib29sX2V4cCcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gcmV2aWV3cy52YWx1ZS5tYXAoKHJldmlldywgaW5kZXgpID0+ICFyZXZpZXdJZHNbaW5kZXhdICYmIHJldmlldykuZmlsdGVyKEJvb2xlYW4pXG4gICAgfVxuXG4gICAgY29uc3QgcGxhaW5EYXRhID0gdGhpcy5wYXJhbXNUb1BsYWluKHsgcmV2aWV3cyB9KVxuXG4gICAgaWYgKCFwbGFpbkRhdGEucmV2aWV3cyB8fCBwbGFpbkRhdGEucmV2aWV3cy5sZW5ndGggPD0gMCkgcmV0dXJuIFtdXG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBwbGFpbkRhdGEucmV2aWV3cy5tYXAoYXN5bmMgKHJldmlld0RhdGEpID0+IHtcbiAgICAgICAgY29uc3QgcmV2aWV3ID0gYXdhaXQgdGhpcy5maW5kUmV2aWV3KHJldmlld0RhdGEsIHByb2R1Y3RJZClcblxuICAgICAgICBpZiAocmV2aWV3LmlkKVxuICAgICAgICAgIHJldHVybiB0aGlzLmJpbmRSZXZpZXdUb01vZGVsKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLm11dGF0aW9uKCd1cGRhdGVfcHJvZHVjdF9yZXZpZXdfYnlfcGsnLCB0aGlzLnJldmlld3NGaWVsZHMsIHtcbiAgICAgICAgICAgICAgICBwa19jb2x1bW5zOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogeyBpZDogcmV2aWV3LmlkIH0sXG4gICAgICAgICAgICAgICAgICB0eXBlOiAncHJvZHVjdF9yZXZpZXdfcGtfY29sdW1uc19pbnB1dCcsXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF9zZXQ6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBvbWl0KHRoaXMuYmluZFJldmlld1RvSGFzdXJhKHJldmlld0RhdGEpLCBbJ2lkJywgJ3Byb2R1Y3RfaWQnXSksXG4gICAgICAgICAgICAgICAgICB0eXBlOiAncHJvZHVjdF9yZXZpZXdfc2V0X2lucHV0JyxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLnVwZGF0ZV9wcm9kdWN0X3Jldmlld19ieV9wayxcbiAgICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYmluZFJldmlld1RvTW9kZWwoXG4gICAgICAgICAgKFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tdXRhdGlvbignaW5zZXJ0X3Byb2R1Y3RfcmV2aWV3X29uZScsIHRoaXMucmV2aWV3c0ZpZWxkcywge1xuICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogb21pdCh7IC4uLnRoaXMuYmluZFJldmlld1RvSGFzdXJhKHJldmlld0RhdGEpLCBwcm9kdWN0X2lkOiBwcm9kdWN0SWQgfSwgWydpZCddKSxcbiAgICAgICAgICAgICAgICB0eXBlOiAncHJvZHVjdF9yZXZpZXdfaW5zZXJ0X2lucHV0JyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS5pbnNlcnRfcHJvZHVjdF9yZXZpZXdfb25lLFxuICAgICAgICApXG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZU1ldGFkYXRhKFxuICAgIHByb2R1Y3RJZDogbnVtYmVyLFxuICAgIHsgbWV0YWRhdGEgfTogUGljazxVcGRhdGVSZXBvc2l0b3J5UGFyYW1zPFByb2R1Y3RIYXN1cmFHcmFwaFFMPiwgJ21ldGFkYXRhJz4sXG4gICk6IFByb21pc2U8UHJvZHVjdE1ldGFkYXRhPiB7XG4gICAgY29uc3QgcGxhaW5EYXRhID0gdGhpcy5wYXJhbXNUb1BsYWluKHsgbWV0YWRhdGEgfSlcblxuICAgIGlmICghcGxhaW5EYXRhLm1ldGFkYXRhKSByZXR1cm5cblxuICAgIGF3YWl0IHRoaXMubXV0YXRpb24oJ3VwZGF0ZV9wcm9kdWN0X21ldGFkYXRhX2J5X3BrJywgWydwcm9kdWN0X2lkJ10sIHtcbiAgICAgIHBrX2NvbHVtbnM6IHtcbiAgICAgICAgdmFsdWU6IHsgcHJvZHVjdF9pZDogcHJvZHVjdElkIH0sXG4gICAgICAgIHR5cGU6ICdwcm9kdWN0X21ldGFkYXRhX3BrX2NvbHVtbnNfaW5wdXQnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBfc2V0OiB7XG4gICAgICAgIHZhbHVlOiBvbWl0KG1ldGFkYXRhLCBbJ3Byb2R1Y3RfaWQnXSksXG4gICAgICAgIHR5cGU6ICdwcm9kdWN0X21ldGFkYXRhX3NldF9pbnB1dCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHBsYWluRGF0YS5tZXRhZGF0YVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRJZChpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIU51bWJlci5pc05hTigraWQpKSByZXR1cm4gaWRcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5maW5kKHsgZmlsdGVyczogeyBmaXJlc3RvcmVJZDogaWQgfSwgb3B0aW9uczogeyBlbmFibGVDb3VudDogZmFsc2UgfSB9KVxuXG4gICAgaWYgKGRhdGE/LlswXT8uaWQpIHJldHVybiBkYXRhPy5bMF0/LmlkXG5cbiAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgUHJvZHVjdCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZGApXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRSZXZpZXdzQnlQcm9kdWN0KHByb2R1Y3RJZDogbnVtYmVyKTogUHJvbWlzZTxQcm9kdWN0UmV2aWV3W10+IHtcbiAgICBjb25zdCB7IHByb2R1Y3RfcmV2aWV3OiBkYXRhIH0gPSBhd2FpdCB0aGlzLnF1ZXJ5KCdwcm9kdWN0X3JldmlldycsIHRoaXMucmV2aWV3c0ZpZWxkcywge1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBwcm9kdWN0X2lkOiB7IF9lcTogcHJvZHVjdElkIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdwcm9kdWN0X3Jldmlld19ib29sX2V4cCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIGRhdGEgJiYgZGF0YS5tYXAoKHJldmlldykgPT4gdGhpcy5iaW5kUmV2aWV3VG9Nb2RlbChyZXZpZXcpKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kUmV2aWV3KHJldmlldzogUHJvZHVjdFJldmlldywgcHJvZHVjdElkOiBudW1iZXIpOiBQcm9taXNlPFByb2R1Y3RSZXZpZXc+IHtcbiAgICBpZiAocmV2aWV3LmlkKSByZXR1cm4gcmV2aWV3XG5cbiAgICBsZXQgbG9hZGVkUmV2aWV3OiBQcm9kdWN0UmV2aWV3XG5cbiAgICBpZiAocmV2aWV3LnBlcnNvbklkKSBsb2FkZWRSZXZpZXcgPSBhd2FpdCB0aGlzLmdldFJldmlld0J5UGVyc29uSWQocmV2aWV3LnBlcnNvbklkLCBwcm9kdWN0SWQsIHJldmlldy5vcmRlcklkKVxuICAgIGlmICghbG9hZGVkUmV2aWV3ICYmIHJldmlldy5hdXRob3IgJiYgcmV2aWV3LmVtYWlsKVxuICAgICAgbG9hZGVkUmV2aWV3ID0gYXdhaXQgdGhpcy5nZXRSZXZpZXdCeUF1dGhvckFuZEVtYWlsKHJldmlldy5hdXRob3IsIHJldmlldy5lbWFpbCwgcHJvZHVjdElkLCByZXZpZXcub3JkZXJJZClcblxuICAgIHJldHVybiBsb2FkZWRSZXZpZXcgfHwgcmV2aWV3XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJldmlld0J5UGVyc29uSWQocGVyc29uSWQ6IG51bWJlciwgcHJvZHVjdElkOiBudW1iZXIsIG9yZGVySWQ/OiBzdHJpbmcpOiBQcm9taXNlPFByb2R1Y3RSZXZpZXc+IHtcbiAgICBjb25zdCB7IHByb2R1Y3RfcmV2aWV3OiBkYXRhIH0gPSBhd2FpdCB0aGlzLnF1ZXJ5KCdwcm9kdWN0X3JldmlldycsIHRoaXMucmV2aWV3c0ZpZWxkcywge1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBwcm9kdWN0X2lkOiB7IF9lcTogcHJvZHVjdElkIH0sXG4gICAgICAgICAgcGVyc29uX2lkOiB7IF9lcTogcGVyc29uSWQgfSxcbiAgICAgICAgICAuLi4ob3JkZXJJZCAmJiB7IG9yZGVyX2lkOiB7IF9lcTogb3JkZXJJZCB9IH0pLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBgcHJvZHVjdF9yZXZpZXdfYm9vbF9leHBgLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHJldHVybiBkYXRhICYmIGRhdGFbMF0gJiYgdGhpcy5iaW5kUmV2aWV3VG9Nb2RlbChkYXRhWzBdKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXZpZXdCeUF1dGhvckFuZEVtYWlsKFxuICAgIGF1dGhvcjogc3RyaW5nLFxuICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgcHJvZHVjdElkOiBudW1iZXIsXG4gICAgb3JkZXJJZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxQcm9kdWN0UmV2aWV3PiB7XG4gICAgY29uc3QgeyBwcm9kdWN0X3JldmlldzogZGF0YSB9ID0gYXdhaXQgdGhpcy5xdWVyeSgncHJvZHVjdF9yZXZpZXcnLCB0aGlzLnJldmlld3NGaWVsZHMsIHtcbiAgICAgIHdoZXJlOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgcHJvZHVjdF9pZDogeyBfZXE6IHByb2R1Y3RJZCB9LFxuICAgICAgICAgIGF1dGhvcjogeyBfZXE6IGF1dGhvciB9LFxuICAgICAgICAgIGVtYWlsOiB7IF9lcTogZW1haWwgfSxcbiAgICAgICAgICAuLi4ob3JkZXJJZCAmJiB7IG9yZGVyX2lkOiB7IF9lcTogb3JkZXJJZCB9IH0pLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBgcHJvZHVjdF9yZXZpZXdfYm9vbF9leHBgLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHJldHVybiBkYXRhICYmIGRhdGFbMF0gJiYgdGhpcy5iaW5kUmV2aWV3VG9Nb2RlbChkYXRhWzBdKVxuICB9XG5cbiAgcHJpdmF0ZSBiaW5kUmV2aWV3VG9Nb2RlbCA9IChwbGFpbjogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb2R1Y3RSZXZpZXcgPT4gKHtcbiAgICAuLi5vbWl0KHBsYWluLCBbJ3Byb2R1Y3RfaWQnLCAnY3JlYXRlZF9hdCcsICd1cGRhdGVkX2F0JywgJ3BlcnNvbl9pZCcsICdvcmRlcl9pZCddKSxcbiAgICBjcmVhdGVkQXQ6IHR5cGVvZiBwbGFpbi5jcmVhdGVkX2F0ID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHBsYWluLmNyZWF0ZWRfYXQpIDogcGxhaW4uY3JlYXRlZF9hdCxcbiAgICB1cGRhdGVkQXQ6IHR5cGVvZiBwbGFpbi51cGRhdGVkX2F0ID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHBsYWluLnVwZGF0ZWRfYXQpIDogcGxhaW4udXBkYXRlZF9hdCxcbiAgICBwZXJzb25JZDogcGxhaW4ucGVyc29uX2lkLFxuICAgIG9yZGVySWQ6IHBsYWluLm9yZGVyX2lkLFxuICB9KVxuXG4gIHByaXZhdGUgYmluZFJldmlld1RvSGFzdXJhID0gKHJldmlldzogUHJvZHVjdFJldmlldyk6IFByb2R1Y3RSZXZpZXdGaWVsZHMgPT4gKHtcbiAgICAuLi5vbWl0KHJldmlldywgWydwcm9kdWN0SWQnLCAnY3JlYXRlZEF0JywgJ3VwZGF0ZWRBdCcsICdwZXJzb25JZCcsICdvcmRlcklkJ10pLFxuICAgIHBlcnNvbl9pZDogcmV2aWV3LnBlcnNvbklkLFxuICAgIG9yZGVyX2lkOiByZXZpZXcub3JkZXJJZCxcbiAgfSlcblxuICBhc3luYyBjbGVhblNob3BwaW5nQ291bnRGcm9tSWRzKGlkczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tdXRhdGlvbigndXBkYXRlX3Byb2R1Y3QnLCBbJ2FmZmVjdGVkX3Jvd3MnXSwge1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgdmFsdWU6IHsgaWQ6IHsgX25pbjogaWRzIH0gfSxcbiAgICAgICAgdHlwZTogJ3Byb2R1Y3RfYm9vbF9leHAnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBfc2V0OiB7XG4gICAgICAgIHZhbHVlOiB7IHNob3BwaW5nX2NvdW50OiAwIH0sXG4gICAgICAgIHR5cGU6ICdwcm9kdWN0X3NldF9pbnB1dCcsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
506
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1oYXN1cmEtZ3JhcGhxbC5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC9zcmMvaW5mcmEvaGFzdXJhLWdyYXBocWwvcmVwb3NpdG9yaWVzL2NhdGFsb2cvcHJvZHVjdC1oYXN1cmEtZ3JhcGhxbC5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBWUwsd0JBQXdCLEVBSXhCLEtBQUssR0FDTixNQUFNLG9CQUFvQixDQUFBO0FBQzNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQW9CbkQsTUFBTSxPQUFPLDhCQUNYLFNBQVEscUJBQXFCLENBQUMsaUJBQWlCLENBQXVCLElBQUksQ0FBQyxDQUFDO0lBc0I1RSxZQUFZLFFBQWdCLEVBQUUsV0FBcUM7UUFDakUsS0FBSyxDQUFDO1lBQ0osU0FBUyxFQUFFLFNBQVM7WUFDcEIsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixRQUFRO1lBQ1IsV0FBVztZQUNYLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQyxDQUFBO1FBaWpCSSxzQkFBaUIsR0FBRyxDQUFDLEtBQTBCLEVBQWlCLEVBQUUsQ0FBQyxpQ0FDdEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxLQUNuRixT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RUFBRSxLQUFLLEVBQUUsSUFDbEIsQ0FBQyxPQUFPLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUMvQztvQkFDRCxJQUFJLEVBQUUseUJBQXlCO29CQUMvQixRQUFRLEVBQUUsSUFBSTtpQkFDZjthQUNGLENBQUMsQ0FBQTtZQUVGLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDM0QsQ0FBQztLQUFBO0lBZ0JLLHlCQUF5QixDQUFDLEdBQWE7O1lBQzNDLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQzlELEtBQUssRUFBRTtvQkFDTCxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7b0JBQzVCLElBQUksRUFBRSxrQkFBa0I7b0JBQ3hCLFFBQVEsRUFBRSxJQUFJO2lCQUNmO2dCQUNELElBQUksRUFBRTtvQkFDSixLQUFLLEVBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFO29CQUM1QixJQUFJLEVBQUUsbUJBQW1CO2lCQUMxQjthQUNGLENBQUMsQ0FBQTtRQUNKLENBQUM7S0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ3JlYXRlUmVwb3NpdG9yeVBhcmFtcyxcbiAgRmluZFJlcG9zaXRvcnlQYXJhbXMsXG4gIEdldFJlcG9zaXRvcnlQYXJhbXMsXG4gIE5vbkZ1bmN0aW9uUHJvcGVydHlOYW1lcyxcbiAgUHJvZHVjdEdlbmRlcixcbiAgUHJvZHVjdE1ldGFkYXRhLFxuICBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgUHJvZHVjdFJldmlldyxcbiAgUmVwb3NpdG9yeUZpbmRSZXN1bHQsXG4gIFJldmlld1N0YXR1c1BhcmFtcyxcbiAgUmV2aWV3V2l0aFByb2R1Y3REYXRhLFxuICBSb3VuZFByb2R1Y3RQcmljZXNIZWxwZXIsXG4gIFNob3BQcmljZSxcbiAgU2hvcHMsXG4gIFVwZGF0ZVJlcG9zaXRvcnlQYXJhbXMsXG4gIFdoZXJlLFxufSBmcm9tICcuLi8uLi8uLi8uLi9kb21haW4nXG5pbXBvcnQgeyBOb3RGb3VuZEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vZXJyb3JzJ1xuaW1wb3J0IHsgQmFzZSwgaXNOaWwsIG9taXQgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscydcbmltcG9ydCB7IEhhc3VyYUdyYXBoUUxDb2x1bW5UeXBlLCBIYXN1cmFHcmFwaFFMV2hlcmUgfSBmcm9tICcuLi8uLi9lbnVtcydcbmltcG9ydCB7IHdpdGhDcnVkSGFzdXJhR3JhcGhRTCwgd2l0aEhhc3VyYUdyYXBoUUwgfSBmcm9tICcuLi8uLi9taXhpbnMnXG5pbXBvcnQgeyBQcm9kdWN0SGFzdXJhR3JhcGhRTCB9IGZyb20gJy4uLy4uL21vZGVscydcbmltcG9ydCB7IEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9ucywgSGFzdXJhR3JhcGhRTEZpZWxkcyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG50eXBlIFByb2R1Y3RSZXZpZXdGaWVsZHMgPSB7XG4gIGlkPzogc3RyaW5nXG4gIHNob3A6IFNob3BzXG4gIHJhdGU6IG51bWJlclxuICBhdXRob3I/OiBzdHJpbmdcbiAgZW1haWw/OiBzdHJpbmdcbiAgbG9jYXRpb24/OiBzdHJpbmdcbiAgcmV2aWV3Pzogc3RyaW5nXG4gIHN0YXR1cz86IGJvb2xlYW5cbiAgdGl0bGU/OiBzdHJpbmdcbiAgcGVyc29uSWQ/OiBudW1iZXJcbiAgcG9pbnRzPzogbnVtYmVyXG4gIG9yZGVySWQ/OiBzdHJpbmdcbiAgY3JlYXRlZEF0PzogRGF0ZVxuICB1cGRhdGVkQXQ/OiBEYXRlXG59XG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnlcbiAgZXh0ZW5kcyB3aXRoQ3J1ZEhhc3VyYUdyYXBoUUwod2l0aEhhc3VyYUdyYXBoUUw8UHJvZHVjdEhhc3VyYUdyYXBoUUw+KEJhc2UpKVxuICBpbXBsZW1lbnRzIFByb2R1Y3RSZXBvc2l0b3J5XG57XG4gIHByaXZhdGUgZ2V0IHJldmlld3NGaWVsZHMoKTogYW55IHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2lkJyxcbiAgICAgICdzaG9wJyxcbiAgICAgICdyYXRlJyxcbiAgICAgICdhdXRob3InLFxuICAgICAgJ2VtYWlsJyxcbiAgICAgICdsb2NhdGlvbicsXG4gICAgICAncmV2aWV3JyxcbiAgICAgICdzdGF0dXMnLFxuICAgICAgJ3RpdGxlJyxcbiAgICAgIHsgcGVyc29uSWQ6IHsgY29sdW1uTmFtZTogJ3BlcnNvbl9pZCcgfSB9LFxuICAgICAgJ3BvaW50cycsXG4gICAgICB7IG9yZGVySWQ6IHsgY29sdW1uTmFtZTogJ29yZGVyX2lkJyB9IH0sXG4gICAgICB7IGNyZWF0ZWRBdDogeyBjb2x1bW5OYW1lOiAnY3JlYXRlZF9hdCcgfSB9LFxuICAgICAgeyB1cGRhdGVkQXQ6IHsgY29sdW1uTmFtZTogJ3VwZGF0ZWRfYXQnIH0gfSxcbiAgICBdXG4gIH1cblxuICBjb25zdHJ1Y3RvcihlbmRwb2ludDogc3RyaW5nLCBhdXRoT3B0aW9uczogSGFzdXJhR3JhcGhRTEF1dGhPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdGFibGVOYW1lOiAncHJvZHVjdCcsXG4gICAgICBtb2RlbDogUHJvZHVjdEhhc3VyYUdyYXBoUUwsXG4gICAgICBlbmRwb2ludCxcbiAgICAgIGF1dGhPcHRpb25zLFxuICAgICAgZmllbGRzOiBbXSxcbiAgICB9KVxuXG4gICAgY29uc3QgY29tbW9uRmllbGRzOiBIYXN1cmFHcmFwaFFMRmllbGRzPFByb2R1Y3RIYXN1cmFHcmFwaFFMPiA9IFtcbiAgICAgIHsgaWQ6IHsgY29sdW1uTmFtZTogJ2lkJywgdG86ICh2YWx1ZSkgPT4gK3ZhbHVlLCBmcm9tOiAodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKCkgfSB9LFxuICAgICAgeyBmaXJlc3RvcmVJZDogeyBjb2x1bW5OYW1lOiAnZmlyZXN0b3JlX2lkJyB9IH0sXG4gICAgICB7IHByb2R1Y3RJZDogeyBjb2x1bW5OYW1lOiAnbWFpbl9wcm9kdWN0X2lkJyB9IH0sXG4gICAgICB7IENFU1Q6IHsgY29sdW1uTmFtZTogJ2Nlc3QnIH0gfSxcbiAgICAgIHsgRUFOOiB7IGNvbHVtbk5hbWU6ICdlYW4nIH0gfSxcbiAgICAgIHsgTkNNOiB7IGNvbHVtbk5hbWU6ICduY20nIH0gfSxcbiAgICAgICdicmFuZCcsXG4gICAgICB7IGNvc3RQcmljZTogeyBjb2x1bW5OYW1lOiAnY29zdF9wcmljZScgfSB9LFxuICAgICAge1xuICAgICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgZnJvbTogKGRlc2NyaXB0aW9uLCBkYXRhKSA9PiAoe1xuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBkaWZmZXJlbnRpYWxzOiBkYXRhLmRpZmZlcmVudGlhbHMsXG4gICAgICAgICAgICB3aG9NdXN0VXNlOiBkYXRhLndob19tdXN0X3VzZSxcbiAgICAgICAgICAgIGhvd1RvVXNlOiBkYXRhLmhvd190b191c2UsXG4gICAgICAgICAgICBicmFuZDogZGF0YS5icmFuZF9kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGluZ3JlZGllbnRzOiBkYXRhLmluZ3JlZGllbnRzLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGJpbmRGaW5kRmlsdGVyOiAoZmlsdGVyczogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi4oZmlsdGVycz8uZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbjogZmlsdGVycy5kZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgICAgLi4uKGZpbHRlcnMuZGlmZmVyZW50aWFscyAmJiB7IGRpZmZlcmVudGlhbHM6IGZpbHRlcnMuZGlmZmVyZW50aWFscyB9KSxcbiAgICAgICAgICAgICAgLi4uKGZpbHRlcnMud2hvTXVzdFVzZSAmJiB7XG4gICAgICAgICAgICAgICAgd2hvX211c3RfdXNlOiBmaWx0ZXJzLndob011c3RVc2UsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAuLi4oZmlsdGVycy5ob3dUb1VzZSAmJiB7XG4gICAgICAgICAgICAgICAgaG93X3RvX3VzZTogZmlsdGVycy5ob3dUb1VzZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC4uLihmaWx0ZXJzLmJyYW5kICYmIHtcbiAgICAgICAgICAgICAgICBicmFuZF9kZXNjcmlwdGlvbjogZmlsdGVycy5icmFuZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC4uLihmaWx0ZXJzLmluZ3JlZGllbnRzICYmIHtcbiAgICAgICAgICAgICAgICBpbmdyZWRpZW50czogZmlsdGVycy5pbmdyZWRpZW50cyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBiaW5kUGVyc2lzdERhdGE6IChkZXNjcmlwdGlvbkRhdGEpID0+ICh7XG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb25EYXRhPy5kZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbkRhdGEuZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb25EYXRhLmRpZmZlcmVudGlhbHMgJiYgeyBkaWZmZXJlbnRpYWxzOiBkZXNjcmlwdGlvbkRhdGEuZGlmZmVyZW50aWFscyB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbkRhdGEud2hvTXVzdFVzZSAmJiB7XG4gICAgICAgICAgICAgIHdob19tdXN0X3VzZTogZGVzY3JpcHRpb25EYXRhLndob011c3RVc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbkRhdGEuaG93VG9Vc2UgJiYgeyBob3dfdG9fdXNlOiBkZXNjcmlwdGlvbkRhdGEuaG93VG9Vc2UgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb25EYXRhLmJyYW5kICYmIHsgYnJhbmRfZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uRGF0YS5icmFuZCB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbkRhdGEuaW5ncmVkaWVudHMgJiYgeyBpbmdyZWRpZW50czogZGVzY3JpcHRpb25EYXRhLmluZ3JlZGllbnRzIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHsgZGlmZmVyZW50aWFsczogeyBjb2x1bW5OYW1lOiAnZGlmZmVyZW50aWFscycgfSB9LFxuICAgICAgeyB3aG9NdXN0VXNlOiB7IGNvbHVtbk5hbWU6ICd3aG9fbXVzdF91c2UnIH0gfSxcbiAgICAgIHsgaG93VG9Vc2U6IHsgY29sdW1uTmFtZTogJ2hvd190b191c2UnIH0gfSxcbiAgICAgIHsgYnJhbmREZXNjcmlwdGlvbjogeyBjb2x1bW5OYW1lOiAnYnJhbmRfZGVzY3JpcHRpb24nIH0gfSxcbiAgICAgIHsgaW5ncmVkaWVudHM6IHsgY29sdW1uTmFtZTogJ2luZ3JlZGllbnRzJyB9IH0sXG4gICAgICB7IGhhc1ZhcmlhbnRzOiB7IGNvbHVtbk5hbWU6ICdoYXNfdmFyaWFudHMnIH0gfSxcbiAgICAgIHtcbiAgICAgICAgaW1hZ2VzOiB7XG4gICAgICAgICAgY29sdW1uTmFtZTogJ2ltYWdlcycsXG4gICAgICAgICAgdG86ICh2YWx1ZSkgPT4gKHZhbHVlPy5sZW5ndGggPiAwID8gYHtcIiR7dmFsdWU/LmpvaW4/LihgXCIsXCJgKSB8fCAnJ31cIn1gIDogYHt9YCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtaW5pYXR1cmVzOiB7XG4gICAgICAgICAgY29sdW1uTmFtZTogJ21pbmlhdHVyZXMnLFxuICAgICAgICAgIHRvOiAodmFsdWUpID0+ICh2YWx1ZT8ubGVuZ3RoID4gMCA/IGB7XCIke3ZhbHVlPy5qb2luPy4oYFwiLFwiYCkgfHwgJyd9XCJ9YCA6IGB7fWApLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgICduYW1lJyxcbiAgICAgIHtcbiAgICAgICAgcHJpY2U6IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiAncHJpY2UnLFxuICAgICAgICAgIGZyb206IChwcmljZSwgZGF0YSk6IFNob3BQcmljZSA9PiAoe1xuICAgICAgICAgICAgcHJpY2UsXG4gICAgICAgICAgICBmdWxsUHJpY2U6IGRhdGEuZnVsbF9wcmljZSxcbiAgICAgICAgICAgIHN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2U6IGRhdGEuc3Vic2NyaWJlcl9kaXNjb3VudF9wZXJjZW50YWdlLFxuICAgICAgICAgICAgc3Vic2NyaWJlclByaWNlOiBkYXRhLnN1YnNjcmliZXJfcHJpY2UsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgYmluZEZpbmRGaWx0ZXI6IChmaWx0ZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLigoZmlsdGVycz8ucHJpY2UgfHwgZmlsdGVycz8ucHJpY2UgPT09IDApICYmIHsgcHJpY2U6IGZpbHRlcnMucHJpY2UgfSksXG4gICAgICAgICAgICAgIC4uLigoZmlsdGVycy5mdWxsUHJpY2UgfHwgZmlsdGVycy5mdWxsUHJpY2UgPT09IDApICYmIHsgZnVsbF9wcmljZTogZmlsdGVycy5mdWxsUHJpY2UgfSksXG4gICAgICAgICAgICAgIC4uLigoZmlsdGVycy5zdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlIHx8IGZpbHRlcnMuc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZSA9PT0gMCkgJiYge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXJfZGlzY291bnRfcGVyY2VudGFnZTogZmlsdGVycy5zdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLi4uKChmaWx0ZXJzLnN1YnNjcmliZXJQcmljZSB8fCBmaWx0ZXJzLnN1YnNjcmliZXJQcmljZSA9PT0gMCkgJiYge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXJfcHJpY2U6IGZpbHRlcnMuc3Vic2NyaWJlclByaWNlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJpbmRQZXJzaXN0RGF0YTogKHByaWNlRGF0YSkgPT4gKHtcbiAgICAgICAgICAgIC4uLihwcmljZURhdGE/LnByaWNlID49IDAgJiYgeyBwcmljZTogcHJpY2VEYXRhLnByaWNlIH0pLFxuICAgICAgICAgICAgLi4uKHByaWNlRGF0YS5mdWxsUHJpY2UgPj0gMCAmJiB7IGZ1bGxfcHJpY2U6IHByaWNlRGF0YS5mdWxsUHJpY2UgfSksXG4gICAgICAgICAgICAuLi4ocHJpY2VEYXRhLnN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2UgPj0gMCAmJiB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXJfZGlzY291bnRfcGVyY2VudGFnZTogcHJpY2VEYXRhLnN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihwcmljZURhdGEuc3Vic2NyaWJlclByaWNlID49IDAgJiYgeyBzdWJzY3JpYmVyX3ByaWNlOiBwcmljZURhdGEuc3Vic2NyaWJlclByaWNlIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHsgZnVsbFByaWNlOiB7IGNvbHVtbk5hbWU6ICdmdWxsX3ByaWNlJyB9IH0sXG4gICAgICB7IHN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2U6IHsgY29sdW1uTmFtZTogJ3N1YnNjcmliZXJfZGlzY291bnRfcGVyY2VudGFnZScgfSB9LFxuICAgICAgeyBzdWJzY3JpYmVyUHJpY2U6IHsgY29sdW1uTmFtZTogJ3N1YnNjcmliZXJfcHJpY2UnIH0gfSxcbiAgICAgICdwdWJsaXNoZWQnLFxuICAgICAgJ3NrdScsXG4gICAgICB7XG4gICAgICAgIHN0b2NrOiB7XG4gICAgICAgICAgY29sdW1uTmFtZTogJ3N0b2NrJyxcbiAgICAgICAgICBmcm9tOiAocXVhbnRpdHk6IG51bWJlcikgPT4gKHsgcXVhbnRpdHkgfSksXG4gICAgICAgICAgdG86ICh2YWx1ZSkgPT4gKGlzTmlsKHZhbHVlPy5xdWFudGl0eSkgPyB2YWx1ZSA6IHZhbHVlPy5xdWFudGl0eSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgeyBoYXNTdG9jazogeyBjb2x1bW5OYW1lOiAnaGFzX3N0b2NrJyB9IH0sXG4gICAgICAnc2x1ZycsXG4gICAgICAndHlwZScsXG4gICAgICAndmlkZW8nLFxuICAgICAgJ3dlaWdodCcsXG4gICAgICAnZ2VuZGVyJyxcbiAgICAgIHsgaW50R2VuZGVyOiB7IGNvbHVtbk5hbWU6ICdpbnRfZ2VuZGVyJyB9IH0sXG4gICAgICB7IHRhZ3M6IHsgY29sdW1uTmFtZTogJ3RhZ3MnLCB0eXBlOiBIYXN1cmFHcmFwaFFMQ29sdW1uVHlwZS5Kc29uYiB9IH0sXG4gICAgICB7IGZpbHRlcnM6IHsgY29sdW1uTmFtZTogJ2ZpbHRlcnMnLCB0eXBlOiBIYXN1cmFHcmFwaFFMQ29sdW1uVHlwZS5Kc29uYiB9IH0sXG4gICAgICB7IGlzS2l0OiB7IGNvbHVtbk5hbWU6ICdpc19raXQnIH0gfSxcbiAgICAgIHsgY3JlYXRlZEF0OiB7IGNvbHVtbk5hbWU6ICdjcmVhdGVkX2F0JyB9IH0sXG4gICAgICB7IHVwZGF0ZWRBdDogeyBjb2x1bW5OYW1lOiAndXBkYXRlZF9hdCcgfSB9LFxuICAgICAgeyByYXRlOiB7IGNvbHVtbk5hbWU6ICdyYXRpbmcnIH0gfSxcbiAgICAgIHsgcmV2aWV3c1RvdGFsOiB7IGNvbHVtbk5hbWU6ICdyZXZpZXdzX3RvdGFsJyB9IH0sXG4gICAgICB7IHNob3BwaW5nQ291bnQ6IHsgY29sdW1uTmFtZTogJ3Nob3BwaW5nX2NvdW50JyB9IH0sXG4gICAgICB7IGNhdGVnb3J5SWQ6IHsgY29sdW1uTmFtZTogJ2NhdGVnb3J5X2lkJyB9IH0sXG4gICAgICB7XG4gICAgICAgIGNhdGVnb3J5OiB7XG4gICAgICAgICAgY29sdW1uTmFtZTogJ2NhdGVnb3J5JyxcbiAgICAgICAgICBmb3JlaWduS2V5Q29sdW1uOiB7IGlkOiAnY2F0ZWdvcnlJZCcgfSxcbiAgICAgICAgICBmaWVsZHM6IFsnaWQnLCAnbmFtZScsICdyZWZlcmVuY2UnLCAnc2x1ZyddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdXG5cbiAgICB0aGlzLmZpZWxkcyA9IFtcbiAgICAgIC4uLmNvbW1vbkZpZWxkcyxcbiAgICAgIHtcbiAgICAgICAgY2F0ZWdvcmllczoge1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdjYXRlZ29yaWVzJyxcbiAgICAgICAgICBmaWVsZHM6IFsnY2F0ZWdvcnlfaWQnXSxcbiAgICAgICAgICBiaW5kUGVyc2lzdERhdGE6ICh2YWx1ZSkgPT4gKHtcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHsgZGF0YTogdmFsdWUubWFwKChjYXRlZ29yeSkgPT4gKHsgY2F0ZWdvcnlfaWQ6ICtjYXRlZ29yeSB9KSkgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0bzogKGNhdGVnb3JpZXMpID0+IGNhdGVnb3JpZXMubWFwKChjYXRlZ29yeUlkKSA9PiArY2F0ZWdvcnlJZCksXG4gICAgICAgICAgZnJvbTogKGNhdGVnb3JpZXM6IHsgY2F0ZWdvcnlfaWQ6IG51bWJlciB9W10pID0+XG4gICAgICAgICAgICBjYXRlZ29yaWVzPy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeT8uY2F0ZWdvcnlfaWQ/LnRvU3RyaW5nKCkpIHx8IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2l0UHJvZHVjdHM6IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiAna2l0X3Byb2R1Y3RzJyxcbiAgICAgICAgICBmb3JlaWduS2V5Q29sdW1uOiB7IHByb2R1Y3RJZDogJ2lkJyB9LFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgeyBwcm9kdWN0SWQ6IHsgY29sdW1uTmFtZTogJ3Byb2R1Y3RfaWQnIH0gfSxcbiAgICAgICAgICAgIHsga2l0UHJvZHVjdElkOiB7IGNvbHVtbk5hbWU6ICdraXRfcHJvZHVjdF9pZCcgfSB9LFxuICAgICAgICAgICAgJ3F1YW50aXR5JyxcbiAgICAgICAgICAgIHsgcHJvZHVjdDogeyBjb2x1bW5OYW1lOiAncHJvZHVjdCcsIGZvcmVpZ25LZXlDb2x1bW46IHsgaWQ6ICdwcm9kdWN0X2lkJyB9LCBmaWVsZHM6IGNvbW1vbkZpZWxkcyB9IH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJldmlld3M6IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiAncmV2aWV3cycsXG4gICAgICAgICAgZm9yZWlnbktleUNvbHVtbjogeyBwcm9kdWN0X2lkOiAnaWQnIH0sXG4gICAgICAgICAgZmllbGRzOiB0aGlzLnJldmlld3NGaWVsZHMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdtZXRhZGF0YScsXG4gICAgICAgICAgZmllbGRzOiBbJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgYmluZFBlcnNpc3REYXRhOiAodmFsdWUpID0+ICh7XG4gICAgICAgICAgICBtZXRhZGF0YTogeyBkYXRhOiB2YWx1ZSB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdXG4gIH1cblxuICBhc3luYyBjcmVhdGUocGFyYW1zOiBDcmVhdGVSZXBvc2l0b3J5UGFyYW1zPFByb2R1Y3RIYXN1cmFHcmFwaFFMPik6IFByb21pc2U8UHJvZHVjdEhhc3VyYUdyYXBoUUw+IHtcbiAgICBjb25zdCB7IG1ldGFkYXRhLCAuLi5kYXRhIH0gPSBwYXJhbXNcbiAgICBjb25zdCBwcm9kdWN0ID0gYXdhaXQgc3VwZXIuY3JlYXRlKFxuICAgICAgb21pdCh7IC4uLmRhdGEsIG1ldGFkYXRhOiBtZXRhZGF0YSB8fCB7IGRlc2NyaXB0aW9uOiBudWxsLCB0aXRsZTogbnVsbCB9IH0sIFsncmV2aWV3cyddKSxcbiAgICApXG5cbiAgICB0cnkge1xuICAgICAgcHJvZHVjdC5yZXZpZXdzID0gZGF0YS5yZXZpZXdzICYmIChhd2FpdCB0aGlzLnVwZGF0ZVJldmlld3MoK3Byb2R1Y3QuaWQsIGRhdGEpKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZSh7IGlkOiBwcm9kdWN0LmlkIH0pXG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2R1Y3RcbiAgfVxuXG4gIGFzeW5jIGdldChpZGVudGlmaWVyczogR2V0UmVwb3NpdG9yeVBhcmFtczxQcm9kdWN0SGFzdXJhR3JhcGhRTD4pOiBQcm9taXNlPFByb2R1Y3RIYXN1cmFHcmFwaFFMPiB7XG4gICAgY29uc3QgcHJvZHVjdCA9IE51bWJlci5pc05hTigraWRlbnRpZmllcnMuaWQpXG4gICAgICA/IChhd2FpdCB0aGlzLmZpbmQoeyBmaWx0ZXJzOiB7IGZpcmVzdG9yZUlkOiBpZGVudGlmaWVycy5pZCB9LCBvcHRpb25zOiB7IGVuYWJsZUNvdW50OiBmYWxzZSB9IH0pKS5kYXRhPy5bMF1cbiAgICAgIDogYXdhaXQgc3VwZXIuZ2V0KGlkZW50aWZpZXJzKVxuXG4gICAgaWYgKHByb2R1Y3QucHJvZHVjdElkKSB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcignUHJvZHVjdCBub3QgZm91bmQsIGl0IGlzIGEgdmFyaWFudCcpXG5cbiAgICBwcm9kdWN0LnJldmlld3MgPSBwcm9kdWN0LnJldmlld3MgfHwgKGF3YWl0IHRoaXMuZmluZFJldmlld3NCeVByb2R1Y3QoK3Byb2R1Y3QuaWQpKVxuXG4gICAgcmV0dXJuIHByb2R1Y3RcbiAgfVxuXG4gIGFzeW5jIGZpbmQocGFyYW1zPzogRmluZFJlcG9zaXRvcnlQYXJhbXM8UHJvZHVjdEhhc3VyYUdyYXBoUUw+KTogUHJvbWlzZTxSZXBvc2l0b3J5RmluZFJlc3VsdDxQcm9kdWN0SGFzdXJhR3JhcGhRTD4+IHtcbiAgICBjb25zdCB7IGZpbHRlcnMsIGZpZWxkcywgLi4ub3B0aW9ucyB9ID0gcGFyYW1zIHx8IHt9XG4gICAgY29uc3QgYmluZEZpZWxkcyA9XG4gICAgICBmaWVsZHMgfHxcbiAgICAgICh0aGlzLmZpZWxkc1xuICAgICAgICAubWFwKChmaWVsZCkgPT4gKHR5cGVvZiBmaWVsZCA9PT0gJ3N0cmluZycgPyBmaWVsZCA6IE9iamVjdC5rZXlzKGZpZWxkKS5zaGlmdCgpKSlcbiAgICAgICAgLmZpbHRlcigoZmllbGQpID0+IGZpZWxkICE9PSAncmV2aWV3cycpIGFzIE5vbkZ1bmN0aW9uUHJvcGVydHlOYW1lczxcbiAgICAgICAgUHJvZHVjdEhhc3VyYUdyYXBoUUwsXG4gICAgICAgIGtleW9mIFByb2R1Y3RIYXN1cmFHcmFwaFFMXG4gICAgICA+W10pXG5cbiAgICBpZiAob3B0aW9ucy5vcHRpb25zPy5taW5pbWFsPy5pbmNsdWRlcygncHJpY2UnKSlcbiAgICAgIG9wdGlvbnMub3B0aW9ucz8ubWluaW1hbC5wdXNoKCdwcmljZS5wcmljZScsICdwcmljZS5mdWxsUHJpY2UnLCAncHJpY2Uuc3Vic2NyaWJlclByaWNlJylcbiAgICBpZiAob3B0aW9ucy5vcHRpb25zPy5tYXhpbXVtPy5pbmNsdWRlcygncHJpY2UnKSlcbiAgICAgIG9wdGlvbnMub3B0aW9ucz8ubWF4aW11bS5wdXNoKCdwcmljZS5wcmljZScsICdwcmljZS5mdWxsUHJpY2UnLCAncHJpY2Uuc3Vic2NyaWJlclByaWNlJylcblxuICAgIG9wdGlvbnMub3B0aW9ucz8ubWluaW1hbD8uc3BsaWNlKG9wdGlvbnMub3B0aW9ucz8ubWluaW1hbC5pbmRleE9mKCdwcmljZScpLCAxKVxuICAgIG9wdGlvbnMub3B0aW9ucz8ubWF4aW11bT8uc3BsaWNlKG9wdGlvbnMub3B0aW9ucz8ubWF4aW11bS5pbmRleE9mKCdwcmljZScpLCAxKVxuXG4gICAgcmV0dXJuIHN1cGVyLmZpbmQoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGZpbHRlcnM6IHsgLi4uZmlsdGVycywgcHJvZHVjdElkOiB7IG9wZXJhdG9yOiBXaGVyZS5JU05VTEwgfSB9LFxuICAgICAgZmllbGRzOiBbXG4gICAgICAgIC4uLmJpbmRGaWVsZHMsXG4gICAgICAgIC4uLihiaW5kRmllbGRzLmluY2x1ZGVzKCdwcmljZScpXG4gICAgICAgICAgPyAoW1xuICAgICAgICAgICAgICAnc3Vic2NyaWJlclByaWNlJyxcbiAgICAgICAgICAgICAgJ3N1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2UnLFxuICAgICAgICAgICAgICAnZnVsbFByaWNlJyxcbiAgICAgICAgICAgIF0gYXMgTm9uRnVuY3Rpb25Qcm9wZXJ0eU5hbWVzPFByb2R1Y3RIYXN1cmFHcmFwaFFMPltdKVxuICAgICAgICAgIDogW10pLFxuICAgICAgXSxcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgZ2V0QnlTbHVnKHNsdWc6IHN0cmluZyk6IFByb21pc2U8UHJvZHVjdEhhc3VyYUdyYXBoUUw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmZpbmQoe1xuICAgICAgZmlsdGVyczoge1xuICAgICAgICBzbHVnLFxuICAgICAgfSxcbiAgICAgIGZpZWxkczogdGhpcy5maWVsZHMubWFwKChmaWVsZCkgPT5cbiAgICAgICAgdHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJyA/IGZpZWxkIDogT2JqZWN0LmtleXMoZmllbGQpLnNoaWZ0KCksXG4gICAgICApIGFzIE5vbkZ1bmN0aW9uUHJvcGVydHlOYW1lczxQcm9kdWN0SGFzdXJhR3JhcGhRTCwga2V5b2YgUHJvZHVjdEhhc3VyYUdyYXBoUUw+W10sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGVuYWJsZUNvdW50OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGNvbnN0IHByb2R1Y3QgPSByZXN1bHQ/LmRhdGE/LnNoaWZ0KClcblxuICAgIFJvdW5kUHJvZHVjdFByaWNlc0hlbHBlci5yb3VuZFByb2R1Y3RQcmljZXMocHJvZHVjdClcblxuICAgIHJldHVybiBwcm9kdWN0XG4gIH1cblxuICBhc3luYyB1cGRhdGUocGFyYW1zOiBVcGRhdGVSZXBvc2l0b3J5UGFyYW1zPFByb2R1Y3RIYXN1cmFHcmFwaFFMPik6IFByb21pc2U8UHJvZHVjdEhhc3VyYUdyYXBoUUw+IHtcbiAgICBjb25zdCB7IGNhdGVnb3JpZXMsIGtpdFByb2R1Y3RzLCByZXZpZXdzLCBpZDogY2hlY2tJZCwgcmF0ZSwgbWV0YWRhdGEsIC4uLmRhdGEgfSA9IHBhcmFtc1xuICAgIGNvbnN0IHBsYWluRGF0YSA9IHRoaXMucGFyYW1zVG9QbGFpbih7IGlkOiBjaGVja0lkIH0pXG4gICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLmdldElkKHBsYWluRGF0YS5pZClcbiAgICBjb25zdCBwcm9kdWN0ID0gYXdhaXQgc3VwZXIudXBkYXRlKHsgaWQsIC4uLmRhdGEgfSlcblxuICAgIHByb2R1Y3QuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXMgJiYgKGF3YWl0IHRoaXMudXBkYXRlQ2F0ZWdvcmllcygraWQsIHsgY2F0ZWdvcmllcyB9KSlcbiAgICBwcm9kdWN0LmtpdFByb2R1Y3RzID0ga2l0UHJvZHVjdHMgJiYgKGF3YWl0IHRoaXMudXBkYXRlS2l0UHJvZHVjdHMoK2lkLCB7IGtpdFByb2R1Y3RzIH0pKVxuICAgIHByb2R1Y3QucmV2aWV3cyA9IHJldmlld3MgJiYgKGF3YWl0IHRoaXMudXBkYXRlUmV2aWV3cygraWQsIHsgcmV2aWV3cyB9KSlcbiAgICBwcm9kdWN0Lm1ldGFkYXRhID0gbWV0YWRhdGEgJiYgKGF3YWl0IHRoaXMudXBkYXRlTWV0YWRhdGEoK2lkLCB7IG1ldGFkYXRhIH0pKVxuXG4gICAgcmV0dXJuIHByb2R1Y3RcbiAgfVxuXG4gIGFzeW5jIGZldGNoUmV2aWV3cyhzdGF0dXM6IFJldmlld1N0YXR1c1BhcmFtcyk6IFByb21pc2U8UmV2aWV3V2l0aFByb2R1Y3REYXRhW10+IHtcbiAgICBjb25zdCByZXZpZXdzRXhwcmVzc2lvbiA9IHtcbiAgICAgIHN0YXR1czpcbiAgICAgICAgc3RhdHVzID09PSAncGVuZGluZydcbiAgICAgICAgICA/IHsgW0hhc3VyYUdyYXBoUUxXaGVyZS5JU05VTExdOiB0cnVlIH1cbiAgICAgICAgICA6IHsgW0hhc3VyYUdyYXBoUUxXaGVyZS5FUVVBTFNdOiBzdGF0dXMgPT09ICdhcHByb3ZlZCcgfSxcbiAgICB9XG4gICAgY29uc3QgeyBwcm9kdWN0OiBkYXRhIH0gPSBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgJ3Byb2R1Y3QnLFxuICAgICAgWydpZCcsICduYW1lJywgJ3NrdScsIHsgcmV2aWV3czogeyBjb2x1bW5OYW1lOiAncmV2aWV3cycsIGZpZWxkczogdGhpcy5yZXZpZXdzRmllbGRzIH0gfV0sXG4gICAgICB7XG4gICAgICAgIHdoZXJlOiB7IHZhbHVlOiB7IHJldmlld3M6IHJldmlld3NFeHByZXNzaW9uIH0sIHR5cGU6ICdwcm9kdWN0X2Jvb2xfZXhwJywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgcmV0dXJuIGRhdGEucmVkdWNlKFxuICAgICAgKHJldmlld3MsIHByb2R1Y3QpID0+IFtcbiAgICAgICAgLi4ucmV2aWV3cyxcbiAgICAgICAgLi4ucHJvZHVjdC5yZXZpZXdzXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChyZXZpZXcpID0+XG4gICAgICAgICAgICAgIChzdGF0dXMgPT09ICdwZW5kaW5nJyAmJiBbdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyhyZXZpZXcuc3RhdHVzKSkgfHxcbiAgICAgICAgICAgICAgKHN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJiByZXZpZXcuc3RhdHVzID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgICAoc3RhdHVzID09PSAncmVqZWN0ZWQnICYmIHJldmlldy5zdGF0dXMgPT09IGZhbHNlKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgocmV2aWV3KSA9PiAoe1xuICAgICAgICAgICAgLi4udGhpcy5iaW5kUmV2aWV3VG9Nb2RlbChyZXZpZXcpLFxuICAgICAgICAgICAgcHJvZHVjdElkOiBwcm9kdWN0LmlkLFxuICAgICAgICAgICAgcHJvZHVjdE5hbWU6IHByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgIHByb2R1Y3RTa3U6IHByb2R1Y3Quc2t1LFxuICAgICAgICAgIH0pKSxcbiAgICAgIF0sXG4gICAgICBbXSBhcyBSZXZpZXdXaXRoUHJvZHVjdERhdGFbXSxcbiAgICApXG4gIH1cblxuICBhc3luYyBmaW5kQ2F0YWxvZyhcbiAgICBwYXJhbXM6IEZpbmRSZXBvc2l0b3J5UGFyYW1zPFByb2R1Y3RIYXN1cmFHcmFwaFFMPixcbiAgICBtYWluR2VuZGVyPzogRXh0cmFjdDxQcm9kdWN0R2VuZGVyLCAnZmVtYWxlJyB8ICdtYWxlJz4sXG4gICk6IFByb21pc2U8UmVwb3NpdG9yeUZpbmRSZXN1bHQ8UHJvZHVjdEhhc3VyYUdyYXBoUUw+PiB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBmaWx0ZXJzOiB7IC4uLnBhcmFtcy5maWx0ZXJzLCBwdWJsaXNoZWQ6IHRydWUgfSxcbiAgICAgIG9yZGVyQnk6IHtcbiAgICAgICAgaGFzU3RvY2s6ICdkZXNjJyxcbiAgICAgICAgaW50R2VuZGVyOiBtYWluR2VuZGVyID09PSAnZmVtYWxlJyA/ICdkZXNjJyA6ICdhc2MnLFxuICAgICAgICAuLi5vbWl0KHBhcmFtcy5vcmRlckJ5LCBbJ2hhc1N0b2NrJywgJ2ludEdlbmRlciddKSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQ2F0ZWdvcmllcyhcbiAgICBwcm9kdWN0SWQ6IG51bWJlcixcbiAgICB7IGNhdGVnb3JpZXMgfTogUGljazxVcGRhdGVSZXBvc2l0b3J5UGFyYW1zPFByb2R1Y3RIYXN1cmFHcmFwaFFMPiwgJ2NhdGVnb3JpZXMnPixcbiAgKTogUHJvbWlzZTxQcm9kdWN0SGFzdXJhR3JhcGhRTFsnY2F0ZWdvcmllcyddPiB7XG4gICAgaWYgKCdhY3Rpb24nIGluIGNhdGVnb3JpZXMgJiYgY2F0ZWdvcmllcy5hY3Rpb24gPT09ICdyZW1vdmUnKSB7XG4gICAgICBhd2FpdCB0aGlzLm11dGF0aW9uKCdkZWxldGVfY2F0ZWdvcnlfcHJvZHVjdCcsIFsnYWZmZWN0ZWRfcm93cyddLCB7XG4gICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgdHlwZTogJ2NhdGVnb3J5X3Byb2R1Y3RfYm9vbF9leHAnLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB7IHByb2R1Y3RfaWQ6IHsgX2VxOiBwcm9kdWN0SWQgfSB9LFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgY29uc3QgcGxhaW5EYXRhID0gdGhpcy5wYXJhbXNUb1BsYWluKHsgY2F0ZWdvcmllcyB9KVxuXG4gICAgaWYgKCFwbGFpbkRhdGEuY2F0ZWdvcmllcyB8fCBwbGFpbkRhdGEuY2F0ZWdvcmllcy5sZW5ndGggPD0gMCkgcmV0dXJuIFtdXG5cbiAgICBhd2FpdCB0aGlzLm11dGF0aW9uKCdkZWxldGVfY2F0ZWdvcnlfcHJvZHVjdCcsIFsnYWZmZWN0ZWRfcm93cyddLCB7XG4gICAgICB3aGVyZToge1xuICAgICAgICB0eXBlOiAnY2F0ZWdvcnlfcHJvZHVjdF9ib29sX2V4cCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogeyBwcm9kdWN0X2lkOiB7IF9lcTogcHJvZHVjdElkIH0gfSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGF3YWl0IHRoaXMubXV0YXRpb24oJ2luc2VydF9jYXRlZ29yeV9wcm9kdWN0JywgWydhZmZlY3RlZF9yb3dzJ10sIHtcbiAgICAgIG9iamVjdHM6IHtcbiAgICAgICAgdHlwZTogJ1tjYXRlZ29yeV9wcm9kdWN0X2luc2VydF9pbnB1dCFdJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBwbGFpbkRhdGEuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5SWQpID0+ICh7IGNhdGVnb3J5X2lkOiBjYXRlZ29yeUlkLCBwcm9kdWN0X2lkOiBwcm9kdWN0SWQgfSkpLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHBsYWluRGF0YS5jYXRlZ29yaWVzXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUtpdFByb2R1Y3RzKFxuICAgIHByb2R1Y3RJZDogbnVtYmVyLFxuICAgIHsga2l0UHJvZHVjdHMgfTogUGljazxVcGRhdGVSZXBvc2l0b3J5UGFyYW1zPFByb2R1Y3RIYXN1cmFHcmFwaFFMPiwgJ2tpdFByb2R1Y3RzJz4sXG4gICk6IFByb21pc2U8UHJvZHVjdEhhc3VyYUdyYXBoUUxbJ2tpdFByb2R1Y3RzJ10+IHtcbiAgICBjb25zdCBwbGFpbkRhdGEgPSB0aGlzLnBhcmFtc1RvUGxhaW4oeyBraXRQcm9kdWN0cyB9KVxuXG4gICAgYXdhaXQgdGhpcy5tdXRhdGlvbignZGVsZXRlX3Byb2R1Y3Rfa2l0JywgWydhZmZlY3RlZF9yb3dzJ10sIHtcbiAgICAgIHdoZXJlOiB7XG4gICAgICAgIHR5cGU6ICdwcm9kdWN0X2tpdF9ib29sX2V4cCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogeyBraXRfcHJvZHVjdF9pZDogeyBfZXE6IHByb2R1Y3RJZCB9IH0sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLm11dGF0aW9uKCdpbnNlcnRfcHJvZHVjdF9raXQnLCBbJ2FmZmVjdGVkX3Jvd3MnXSwge1xuICAgICAgb2JqZWN0czoge1xuICAgICAgICB0eXBlOiAnW3Byb2R1Y3Rfa2l0X2luc2VydF9pbnB1dCFdJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBwbGFpbkRhdGEua2l0UHJvZHVjdHMubWFwKChraXRQcm9kdWN0KSA9PiAoe1xuICAgICAgICAgIGtpdF9wcm9kdWN0X2lkOiBwcm9kdWN0SWQsXG4gICAgICAgICAgcHJvZHVjdF9pZDoga2l0UHJvZHVjdC5wcm9kdWN0SWQgfHwga2l0UHJvZHVjdC5wcm9kdWN0LmlkLFxuICAgICAgICAgIHF1YW50aXR5OiBraXRQcm9kdWN0LnF1YW50aXR5LFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4gcGxhaW5EYXRhLmtpdFByb2R1Y3RzXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVJldmlld3MoXG4gICAgcHJvZHVjdElkOiBudW1iZXIsXG4gICAgeyByZXZpZXdzIH06IFBpY2s8VXBkYXRlUmVwb3NpdG9yeVBhcmFtczxQcm9kdWN0SGFzdXJhR3JhcGhRTD4sICdyZXZpZXdzJz4sXG4gICk6IFByb21pc2U8UHJvZHVjdFJldmlld1tdPiB7XG4gICAgaWYgKCFyZXZpZXdzKSByZXR1cm4gW11cbiAgICBpZiAoJ2FjdGlvbicgaW4gcmV2aWV3cyAmJiByZXZpZXdzLmFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIGNvbnN0IHJldmlld0lkcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICByZXZpZXdzLnZhbHVlLm1hcChhc3luYyAocmV2aWV3RGF0YSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJldmlldyA9IGF3YWl0IHRoaXMuZmluZFJldmlldyhyZXZpZXdEYXRhLCBwcm9kdWN0SWQpXG5cbiAgICAgICAgICByZXR1cm4gcmV2aWV3Py5pZFxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgYXdhaXQgdGhpcy5tdXRhdGlvbignZGVsZXRlX3Byb2R1Y3RfcmV2aWV3JywgWydhZmZlY3RlZF9yb3dzJ10sIHtcbiAgICAgICAgd2hlcmU6IHsgdmFsdWU6IHsgaWQ6IHsgX2luOiByZXZpZXdJZHMuZmlsdGVyKEJvb2xlYW4pIH0gfSwgdHlwZTogJ3Byb2R1Y3RfcmV2aWV3X2Jvb2xfZXhwJywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiByZXZpZXdzLnZhbHVlLm1hcCgocmV2aWV3LCBpbmRleCkgPT4gIXJldmlld0lkc1tpbmRleF0gJiYgcmV2aWV3KS5maWx0ZXIoQm9vbGVhbilcbiAgICB9XG5cbiAgICBjb25zdCBwbGFpbkRhdGEgPSB0aGlzLnBhcmFtc1RvUGxhaW4oeyByZXZpZXdzIH0pXG5cbiAgICBpZiAoIXBsYWluRGF0YS5yZXZpZXdzIHx8IHBsYWluRGF0YS5yZXZpZXdzLmxlbmd0aCA8PSAwKSByZXR1cm4gW11cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIHBsYWluRGF0YS5yZXZpZXdzLm1hcChhc3luYyAocmV2aWV3RGF0YSkgPT4ge1xuICAgICAgICBjb25zdCByZXZpZXcgPSBhd2FpdCB0aGlzLmZpbmRSZXZpZXcocmV2aWV3RGF0YSwgcHJvZHVjdElkKVxuXG4gICAgICAgIGlmIChyZXZpZXcuaWQpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmluZFJldmlld1RvTW9kZWwoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMubXV0YXRpb24oJ3VwZGF0ZV9wcm9kdWN0X3Jldmlld19ieV9waycsIHRoaXMucmV2aWV3c0ZpZWxkcywge1xuICAgICAgICAgICAgICAgIHBrX2NvbHVtbnM6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IGlkOiByZXZpZXcuaWQgfSxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdwcm9kdWN0X3Jldmlld19wa19jb2x1bW5zX2lucHV0JyxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgX3NldDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IG9taXQodGhpcy5iaW5kUmV2aWV3VG9IYXN1cmEocmV2aWV3RGF0YSksIFsnaWQnLCAncHJvZHVjdF9pZCddKSxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdwcm9kdWN0X3Jldmlld19zZXRfaW5wdXQnLFxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkudXBkYXRlX3Byb2R1Y3RfcmV2aWV3X2J5X3BrLFxuICAgICAgICAgIClcblxuICAgICAgICByZXR1cm4gdGhpcy5iaW5kUmV2aWV3VG9Nb2RlbChcbiAgICAgICAgICAoXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm11dGF0aW9uKCdpbnNlcnRfcHJvZHVjdF9yZXZpZXdfb25lJywgdGhpcy5yZXZpZXdzRmllbGRzLCB7XG4gICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBvbWl0KHsgLi4udGhpcy5iaW5kUmV2aWV3VG9IYXN1cmEocmV2aWV3RGF0YSksIHByb2R1Y3RfaWQ6IHByb2R1Y3RJZCB9LCBbJ2lkJ10pLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdwcm9kdWN0X3Jldmlld19pbnNlcnRfaW5wdXQnLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLmluc2VydF9wcm9kdWN0X3Jldmlld19vbmUsXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTWV0YWRhdGEoXG4gICAgcHJvZHVjdElkOiBudW1iZXIsXG4gICAgeyBtZXRhZGF0YSB9OiBQaWNrPFVwZGF0ZVJlcG9zaXRvcnlQYXJhbXM8UHJvZHVjdEhhc3VyYUdyYXBoUUw+LCAnbWV0YWRhdGEnPixcbiAgKTogUHJvbWlzZTxQcm9kdWN0TWV0YWRhdGE+IHtcbiAgICBjb25zdCBwbGFpbkRhdGEgPSB0aGlzLnBhcmFtc1RvUGxhaW4oeyBtZXRhZGF0YSB9KVxuXG4gICAgaWYgKCFwbGFpbkRhdGEubWV0YWRhdGEpIHJldHVyblxuXG4gICAgYXdhaXQgdGhpcy5tdXRhdGlvbigndXBkYXRlX3Byb2R1Y3RfbWV0YWRhdGFfYnlfcGsnLCBbJ3Byb2R1Y3RfaWQnXSwge1xuICAgICAgcGtfY29sdW1uczoge1xuICAgICAgICB2YWx1ZTogeyBwcm9kdWN0X2lkOiBwcm9kdWN0SWQgfSxcbiAgICAgICAgdHlwZTogJ3Byb2R1Y3RfbWV0YWRhdGFfcGtfY29sdW1uc19pbnB1dCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIF9zZXQ6IHtcbiAgICAgICAgdmFsdWU6IG9taXQobWV0YWRhdGEsIFsncHJvZHVjdF9pZCddKSxcbiAgICAgICAgdHlwZTogJ3Byb2R1Y3RfbWV0YWRhdGFfc2V0X2lucHV0JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4gcGxhaW5EYXRhLm1ldGFkYXRhXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldElkKGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghTnVtYmVyLmlzTmFOKCtpZCkpIHJldHVybiBpZFxuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmZpbmQoeyBmaWx0ZXJzOiB7IGZpcmVzdG9yZUlkOiBpZCB9LCBvcHRpb25zOiB7IGVuYWJsZUNvdW50OiBmYWxzZSB9IH0pXG5cbiAgICBpZiAoZGF0YT8uWzBdPy5pZCkgcmV0dXJuIGRhdGE/LlswXT8uaWRcblxuICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGBQcm9kdWN0IHdpdGggaWQgJHtpZH0gbm90IGZvdW5kYClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZFJldmlld3NCeVByb2R1Y3QocHJvZHVjdElkOiBudW1iZXIpOiBQcm9taXNlPFByb2R1Y3RSZXZpZXdbXT4ge1xuICAgIGNvbnN0IHsgcHJvZHVjdF9yZXZpZXc6IGRhdGEgfSA9IGF3YWl0IHRoaXMucXVlcnkoJ3Byb2R1Y3RfcmV2aWV3JywgdGhpcy5yZXZpZXdzRmllbGRzLCB7XG4gICAgICB3aGVyZToge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHByb2R1Y3RfaWQ6IHsgX2VxOiBwcm9kdWN0SWQgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ3Byb2R1Y3RfcmV2aWV3X2Jvb2xfZXhwJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4gZGF0YSAmJiBkYXRhLm1hcCgocmV2aWV3KSA9PiB0aGlzLmJpbmRSZXZpZXdUb01vZGVsKHJldmlldykpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRSZXZpZXcocmV2aWV3OiBQcm9kdWN0UmV2aWV3LCBwcm9kdWN0SWQ6IG51bWJlcik6IFByb21pc2U8UHJvZHVjdFJldmlldz4ge1xuICAgIGlmIChyZXZpZXcuaWQpIHJldHVybiByZXZpZXdcblxuICAgIGxldCBsb2FkZWRSZXZpZXc6IFByb2R1Y3RSZXZpZXdcblxuICAgIGlmIChyZXZpZXcucGVyc29uSWQpIGxvYWRlZFJldmlldyA9IGF3YWl0IHRoaXMuZ2V0UmV2aWV3QnlQZXJzb25JZChyZXZpZXcucGVyc29uSWQsIHByb2R1Y3RJZCwgcmV2aWV3Lm9yZGVySWQpXG4gICAgaWYgKCFsb2FkZWRSZXZpZXcgJiYgcmV2aWV3LmF1dGhvciAmJiByZXZpZXcuZW1haWwpXG4gICAgICBsb2FkZWRSZXZpZXcgPSBhd2FpdCB0aGlzLmdldFJldmlld0J5QXV0aG9yQW5kRW1haWwocmV2aWV3LmF1dGhvciwgcmV2aWV3LmVtYWlsLCBwcm9kdWN0SWQsIHJldmlldy5vcmRlcklkKVxuXG4gICAgcmV0dXJuIGxvYWRlZFJldmlldyB8fCByZXZpZXdcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmV2aWV3QnlQZXJzb25JZChwZXJzb25JZDogbnVtYmVyLCBwcm9kdWN0SWQ6IG51bWJlciwgb3JkZXJJZD86IHN0cmluZyk6IFByb21pc2U8UHJvZHVjdFJldmlldz4ge1xuICAgIGNvbnN0IHsgcHJvZHVjdF9yZXZpZXc6IGRhdGEgfSA9IGF3YWl0IHRoaXMucXVlcnkoJ3Byb2R1Y3RfcmV2aWV3JywgdGhpcy5yZXZpZXdzRmllbGRzLCB7XG4gICAgICB3aGVyZToge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHByb2R1Y3RfaWQ6IHsgX2VxOiBwcm9kdWN0SWQgfSxcbiAgICAgICAgICBwZXJzb25faWQ6IHsgX2VxOiBwZXJzb25JZCB9LFxuICAgICAgICAgIC4uLihvcmRlcklkICYmIHsgb3JkZXJfaWQ6IHsgX2VxOiBvcmRlcklkIH0gfSksXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IGBwcm9kdWN0X3Jldmlld19ib29sX2V4cGAsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIGRhdGEgJiYgZGF0YVswXSAmJiB0aGlzLmJpbmRSZXZpZXdUb01vZGVsKGRhdGFbMF0pXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJldmlld0J5QXV0aG9yQW5kRW1haWwoXG4gICAgYXV0aG9yOiBzdHJpbmcsXG4gICAgZW1haWw6IHN0cmluZyxcbiAgICBwcm9kdWN0SWQ6IG51bWJlcixcbiAgICBvcmRlcklkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPFByb2R1Y3RSZXZpZXc+IHtcbiAgICBjb25zdCB7IHByb2R1Y3RfcmV2aWV3OiBkYXRhIH0gPSBhd2FpdCB0aGlzLnF1ZXJ5KCdwcm9kdWN0X3JldmlldycsIHRoaXMucmV2aWV3c0ZpZWxkcywge1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBwcm9kdWN0X2lkOiB7IF9lcTogcHJvZHVjdElkIH0sXG4gICAgICAgICAgYXV0aG9yOiB7IF9lcTogYXV0aG9yIH0sXG4gICAgICAgICAgZW1haWw6IHsgX2VxOiBlbWFpbCB9LFxuICAgICAgICAgIC4uLihvcmRlcklkICYmIHsgb3JkZXJfaWQ6IHsgX2VxOiBvcmRlcklkIH0gfSksXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IGBwcm9kdWN0X3Jldmlld19ib29sX2V4cGAsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIGRhdGEgJiYgZGF0YVswXSAmJiB0aGlzLmJpbmRSZXZpZXdUb01vZGVsKGRhdGFbMF0pXG4gIH1cblxuICBwcml2YXRlIGJpbmRSZXZpZXdUb01vZGVsID0gKHBsYWluOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUHJvZHVjdFJldmlldyA9PiAoe1xuICAgIC4uLm9taXQocGxhaW4sIFsncHJvZHVjdF9pZCcsICdjcmVhdGVkX2F0JywgJ3VwZGF0ZWRfYXQnLCAncGVyc29uX2lkJywgJ29yZGVyX2lkJ10pLFxuICAgIGNyZWF0ZWRBdDogdHlwZW9mIHBsYWluLmNyZWF0ZWRfYXQgPT09ICdzdHJpbmcnID8gbmV3IERhdGUocGxhaW4uY3JlYXRlZF9hdCkgOiBwbGFpbi5jcmVhdGVkX2F0LFxuICAgIHVwZGF0ZWRBdDogdHlwZW9mIHBsYWluLnVwZGF0ZWRfYXQgPT09ICdzdHJpbmcnID8gbmV3IERhdGUocGxhaW4udXBkYXRlZF9hdCkgOiBwbGFpbi51cGRhdGVkX2F0LFxuICAgIHBlcnNvbklkOiBwbGFpbi5wZXJzb25faWQsXG4gICAgb3JkZXJJZDogcGxhaW4ub3JkZXJfaWQsXG4gIH0pXG5cbiAgcHJpdmF0ZSBiaW5kUmV2aWV3VG9IYXN1cmEgPSAocmV2aWV3OiBQcm9kdWN0UmV2aWV3KTogUHJvZHVjdFJldmlld0ZpZWxkcyA9PiAoe1xuICAgIC4uLm9taXQocmV2aWV3LCBbJ3Byb2R1Y3RJZCcsICdjcmVhdGVkQXQnLCAndXBkYXRlZEF0JywgJ3BlcnNvbklkJywgJ29yZGVySWQnXSksXG4gICAgcGVyc29uX2lkOiByZXZpZXcucGVyc29uSWQsXG4gICAgb3JkZXJfaWQ6IHJldmlldy5vcmRlcklkLFxuICB9KVxuXG4gIGFzeW5jIGNsZWFuU2hvcHBpbmdDb3VudEZyb21JZHMoaWRzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm11dGF0aW9uKCd1cGRhdGVfcHJvZHVjdCcsIFsnYWZmZWN0ZWRfcm93cyddLCB7XG4gICAgICB3aGVyZToge1xuICAgICAgICB2YWx1ZTogeyBpZDogeyBfbmluOiBpZHMgfSB9LFxuICAgICAgICB0eXBlOiAncHJvZHVjdF9ib29sX2V4cCcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIF9zZXQ6IHtcbiAgICAgICAgdmFsdWU6IHsgc2hvcHBpbmdfY291bnQ6IDAgfSxcbiAgICAgICAgdHlwZTogJ3Byb2R1Y3Rfc2V0X2lucHV0JyxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxufVxuIl19
@@ -51,6 +51,7 @@ export class VariantHasuraGraphQLRepository extends withCrudHasuraGraphQL(withHa
51
51
  to: (value) => (isNil(value === null || value === void 0 ? void 0 : value.quantity) ? value : value === null || value === void 0 ? void 0 : value.quantity),
52
52
  },
53
53
  },
54
+ { hasStock: { columnName: 'has_stock' } },
54
55
  'weight',
55
56
  { name: { to: () => '', from: () => undefined } },
56
57
  { hasVariants: { columnName: 'has_variants', to: () => false, from: () => undefined } },
@@ -113,4 +114,4 @@ export class VariantHasuraGraphQLRepository extends withCrudHasuraGraphQL(withHa
113
114
  });
114
115
  }
115
116
  }
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFudC1oYXN1cmEtZ3JhcGhxbC5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC9zcmMvaW5mcmEvaGFzdXJhLWdyYXBocWwvcmVwb3NpdG9yaWVzL2NhdGFsb2cvdmFyaWFudC1oYXN1cmEtZ3JhcGhxbC5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBT0wsS0FBSyxHQUNOLE1BQU0sb0JBQW9CLENBQUE7QUFDM0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFHbkQsTUFBTSxPQUFPLDhCQUNYLFNBQVEscUJBQXFCLENBQUMsaUJBQWlCLENBQXVCLElBQUksQ0FBQyxDQUFDO0lBRzVFLFlBQVksUUFBZ0IsRUFBRSxXQUFxQztRQUNqRSxLQUFLLENBQUM7WUFDSixTQUFTLEVBQUUsU0FBUztZQUNwQixLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLFFBQVE7WUFDUixXQUFXO1lBQ1gsTUFBTSxFQUFFO2dCQUNOLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUU7Z0JBQ3RGLEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFF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VTs7O1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUFFLE9BQU8sRUFBRSxDQUFBO1lBRWpDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUVuRyxJQUFJLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFHLENBQUMsQ0FBQywwQ0FBRSxFQUFFO2dCQUFFLE9BQU8sTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUcsQ0FBQyxDQUFDLDBDQUFFLEVBQUUsQ0FBQTtZQUV2QyxNQUFNLElBQUksYUFBYSxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxDQUFBOztLQUMzRDtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRmluZFJlcG9zaXRvcnlQYXJhbXMsXG4gIEdldFJlcG9zaXRvcnlQYXJhbXMsXG4gIFJlcG9zaXRvcnlGaW5kUmVzdWx0LFxuICBTaG9wUHJpY2UsXG4gIFVwZGF0ZVJlcG9zaXRvcnlQYXJhbXMsXG4gIFZhcmlhbnRSZXBvc2l0b3J5LFxuICBXaGVyZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgTm90Rm91bmRFcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uL2Vycm9ycydcbmltcG9ydCB7IEJhc2UsIGlzTmlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBIYXN1cmFHcmFwaFFMQ29sdW1uVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zJ1xuaW1wb3J0IHsgd2l0aENydWRIYXN1cmFHcmFwaFFMLCB3aXRoSGFzdXJhR3JhcGhRTCB9IGZyb20gJy4uLy4uL21peGlucydcbmltcG9ydCB7IFZhcmlhbnRIYXN1cmFHcmFwaFFMIH0gZnJvbSAnLi4vLi4vbW9kZWxzJ1xuaW1wb3J0IHsgSGFzdXJhR3JhcGhRTEF1dGhPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmV4cG9ydCBjbGFzcyBWYXJpYW50SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnlcbiAgZXh0ZW5kcyB3aXRoQ3J1ZEhhc3VyYUdyYXBoUUwod2l0aEhhc3VyYUdyYXBoUUw8VmFyaWFudEhhc3VyYUdyYXBoUUw+KEJhc2UpKVxuICBpbXBsZW1lbnRzIFZhcmlhbnRSZXBvc2l0b3J5XG57XG4gIGNvbnN0cnVjdG9yKGVuZHBvaW50OiBzdHJpbmcsIGF1dGhPcHRpb25zOiBIYXN1cmFHcmFwaFFMQXV0aE9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICB0YWJsZU5hbWU6ICdwcm9kdWN0JyxcbiAgICAgIG1vZGVsOiBWYXJpYW50SGFzdXJhR3JhcGhRTCxcbiAgICAgIGVuZHBvaW50LFxuICAgICAgYXV0aE9wdGlvbnMsXG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBpZDogeyBjb2x1bW5OYW1lOiAnaWQnLCB0bzogKHZhbHVlKSA9PiArdmFsdWUsIGZyb206ICh2YWx1ZSkgPT4gdmFsdWUudG9TdHJpbmcoKSB9IH0sXG4gICAgICAgIHsgZmlyZXN0b3JlSWQ6IHsgY29sdW1uTmFtZTogJ2ZpcmVzdG9yZV9pZCcgfSB9LFxuICAgICAgICB7IHByb2R1Y3RJZDogeyBjb2x1bW5OYW1lOiAnbWFpbl9wcm9kdWN0X2lkJywgdG86ICh2YWx1ZSkgPT4gK3ZhbHVlLCBmcm9tOiAodmFsdWUpID0+IHZhbHVlPy50b1N0cmluZygpIH0gfSxcbiAgICAgICAgeyBFQU46IHsgY29sdW1uTmFtZTogJ2VhbicgfSB9LFxuICAgICAgICB7IGNvc3RQcmljZTogeyBjb2x1bW5OYW1lOiAnY29zdF9wcmljZScgfSB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJpY2U6IHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdwcmljZScsXG4gICAgICAgICAgICBmcm9tOiAocHJpY2UsIGRhdGEpOiBTaG9wUHJpY2UgPT4gKHtcbiAgICAgICAgICAgICAgcHJpY2UsXG4gICAgICAgICAgICAgIGZ1bGxQcmljZTogZGF0YS5mdWxsX3ByaWNlLFxuICAgICAgICAgICAgICBzdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlOiBkYXRhLnN1YnNjcmliZXJfZGlzY291bnRfcGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgc3Vic2NyaWJlclByaWNlOiBkYXRhLnN1YnNjcmliZXJfcHJpY2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGJpbmRGaW5kRmlsdGVyOiAoc2VudGVuY2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IE9iamVjdC52YWx1ZXMoc2VudGVuY2UpLnNoaWZ0KClcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLigoZmlsdGVycz8ucHJpY2UgfHwgZmlsdGVycz8ucHJpY2UgPT09IDApICYmIHsgcHJpY2U6IGZpbHRlcnMucHJpY2UgfSksXG4gICAgICAgICAgICAgICAgLi4uKChmaWx0ZXJzLmZ1bGxQcmljZSB8fCBmaWx0ZXJzLmZ1bGxQcmljZSA9PT0gMCkgJiYgeyBmdWxsX3ByaWNlOiBmaWx0ZXJzLmZ1bGxQcmljZSB9KSxcbiAgICAgICAgICAgICAgICAuLi4oKGZpbHRlcnMuc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZSB8fCBmaWx0ZXJzLnN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2UgPT09IDApICYmIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXJfZGlzY291bnRfcGVyY2VudGFnZTogZmlsdGVycy5zdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC4uLigoZmlsdGVycy5zdWJzY3JpYmVyUHJpY2UgfHwgZmlsdGVycy5zdWJzY3JpYmVyUHJpY2UgPT09IDApICYmIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXJfcHJpY2U6IGZpbHRlcnMuc3Vic2NyaWJlclByaWNlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmluZFBlcnNpc3REYXRhOiAocHJpY2VEYXRhKSA9PiAoe1xuICAgICAgICAgICAgICAuLi4ocHJpY2VEYXRhPy5wcmljZSA+PSAwICYmIHsgcHJpY2U6IHByaWNlRGF0YS5wcmljZSB9KSxcbiAgICAgICAgICAgICAgLi4uKHByaWNlRGF0YS5mdWxsUHJpY2UgPj0gMCAmJiB7IGZ1bGxfcHJpY2U6IHByaWNlRGF0YS5mdWxsUHJpY2UgfSksXG4gICAgICAgICAgICAgIC4uLihwcmljZURhdGEuc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZSA+PSAwICYmIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyX2Rpc2NvdW50X3BlcmNlbnRhZ2U6IHByaWNlRGF0YS5zdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLi4uKHByaWNlRGF0YS5zdWJzY3JpYmVyUHJpY2UgPj0gMCAmJiB7IHN1YnNjcmliZXJfcHJpY2U6IHByaWNlRGF0YS5zdWJzY3JpYmVyUHJpY2UgfSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IGZ1bGxQcmljZTogeyBjb2x1bW5OYW1lOiAnZnVsbF9wcmljZScgfSB9LFxuICAgICAgICB7IHN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2U6IHsgY29sdW1uTmFtZTogJ3N1YnNjcmliZXJfZGlzY291bnRfcGVyY2VudGFnZScgfSB9LFxuICAgICAgICB7IHN1YnNjcmliZXJQcmljZTogeyBjb2x1bW5OYW1lOiAnc3Vic2NyaWJlcl9wcmljZScgfSB9LFxuICAgICAgICAnc2t1JyxcbiAgICAgICAge1xuICAgICAgICAgIHN0b2NrOiB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lOiAnc3RvY2snLFxuICAgICAgICAgICAgZnJvbTogKHF1YW50aXR5OiBudW1iZXIpID0+ICh7IHF1YW50aXR5IH0pLFxuICAgICAgICAgICAgdG86ICh2YWx1ZSkgPT4gKGlzTmlsKHZhbHVlPy5xdWFudGl0eSkgPyB2YWx1ZSA6IHZhbHVlPy5xdWFudGl0eSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgIHsgbmFtZTogeyB0bzogKCkgPT4gJycsIGZyb206ICgpID0+IHVuZGVmaW5lZCB9IH0sXG4gICAgICAgIHsgaGFzVmFyaWFudHM6IHsgY29sdW1uTmFtZTogJ2hhc192YXJpYW50cycsIHRvOiAoKSA9PiBmYWxzZSwgZnJvbTogKCkgPT4gdW5kZWZpbmVkIH0gfSxcbiAgICAgICAgeyBjcmVhdGVkQXQ6IHsgY29sdW1uTmFtZTogJ2NyZWF0ZWRfYXQnIH0gfSxcbiAgICAgICAgeyB1cGRhdGVkQXQ6IHsgY29sdW1uTmFtZTogJ3VwZGF0ZWRfYXQnIH0gfSxcbiAgICAgICAge1xuICAgICAgICAgIGdyYWRlOiB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lOiAnZ3JhZGUnLFxuICAgICAgICAgICAgdHlwZTogSGFzdXJhR3JhcGhRTENvbHVtblR5cGUuSnNvbmIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldChpZGVudGlmaWVyczogR2V0UmVwb3NpdG9yeVBhcmFtczxWYXJpYW50SGFzdXJhR3JhcGhRTD4pOiBQcm9taXNlPFZhcmlhbnRIYXN1cmFHcmFwaFFMPiB7XG4gICAgY29uc3QgdmFyaWFudCA9IE51bWJlci5pc05hTigraWRlbnRpZmllcnMuaWQpXG4gICAgICA/IChhd2FpdCB0aGlzLmZpbmQoeyBmaWx0ZXJzOiB7IGZpcmVzdG9yZUlkOiBpZGVudGlmaWVycy5pZCB9IH0pKS5kYXRhPy5bMF1cbiAgICAgIDogYXdhaXQgc3VwZXIuZ2V0KGlkZW50aWZpZXJzKVxuXG4gICAgaWYgKCF2YXJpYW50LnByb2R1Y3RJZCkgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFZhcmlhbnQgbm90IGZvdW5kLCBpdCBpcyBhIHByb2R1Y3RgKVxuXG4gICAgcmV0dXJuIHZhcmlhbnRcbiAgfVxuXG4gIGFzeW5jIGZpbmQocGFyYW1zPzogRmluZFJlcG9zaXRvcnlQYXJhbXM8VmFyaWFudEhhc3VyYUdyYXBoUUw+KTogUHJvbWlzZTxSZXBvc2l0b3J5RmluZFJlc3VsdDxWYXJpYW50SGFzdXJhR3JhcGhRTD4+IHtcbiAgICBjb25zdCB7IGZpbHRlcnMsIC4uLm9wdGlvbnMgfSA9IHBhcmFtcyB8fCB7fVxuXG4gICAgcmV0dXJuIHN1cGVyLmZpbmQoeyAuLi5vcHRpb25zLCBmaWx0ZXJzOiB7IHByb2R1Y3RJZDogeyBvcGVyYXRvcjogV2hlcmUuSVNOT1ROVUxMIH0sIC4uLmZpbHRlcnMgfSB9KVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlKHBhcmFtczogVXBkYXRlUmVwb3NpdG9yeVBhcmFtczxWYXJpYW50SGFzdXJhR3JhcGhRTD4pOiBQcm9taXNlPFZhcmlhbnRIYXN1cmFHcmFwaFFMPiB7XG4gICAgY29uc3QgeyBwcm9kdWN0SWQsIGlkOiBjaGVja0lkLCAuLi5kYXRhIH0gPSBwYXJhbXNcbiAgICBjb25zdCBkYXRhV2l0aFByb2R1Y3RJZCA9IHRoaXMucGFyYW1zVG9QbGFpbih7IGlkOiBjaGVja0lkLCBwcm9kdWN0SWQgfSlcbiAgICBjb25zdCBpZCA9IGF3YWl0IHRoaXMuZ2V0SWQoZGF0YVdpdGhQcm9kdWN0SWQuaWQpXG4gICAgY29uc3QgcHJvZHVjdCA9IGF3YWl0IHN1cGVyLnVwZGF0ZSh7IGlkLCAuLi5kYXRhIH0pXG5cbiAgICBwcm9kdWN0LnByb2R1Y3RJZCA9IGRhdGFXaXRoUHJvZHVjdElkLnByb2R1Y3RJZFxuXG4gICAgcmV0dXJuIHByb2R1Y3RcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oK2lkKSkgcmV0dXJuIGlkXG5cbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuZmluZCh7IGZpbHRlcnM6IHsgZmlyZXN0b3JlSWQ6IGlkIH0sIG9wdGlvbnM6IHsgZW5hYmxlQ291bnQ6IGZhbHNlIH0gfSlcblxuICAgIGlmIChkYXRhPy5bMF0/LmlkKSByZXR1cm4gZGF0YT8uWzBdPy5pZFxuXG4gICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFByb2R1Y3Qgd2l0aCBpZCAke2lkfSBub3QgZm91bmRgKVxuICB9XG59XG4iXX0=
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFudC1oYXN1cmEtZ3JhcGhxbC5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC9zcmMvaW5mcmEvaGFzdXJhLWdyYXBocWwvcmVwb3NpdG9yaWVzL2NhdGFsb2cvdmFyaWFudC1oYXN1cmEtZ3JhcGhxbC5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBT0wsS0FBSyxHQUNOLE1BQU0sb0JBQW9CLENBQUE7QUFDM0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFHbkQsTUFBTSxPQUFPLDhCQUNYLFNBQVEscUJBQXFCLENBQUMsaUJBQWlCLENBQXVCLElBQUksQ0FBQyxDQUFDO0lBRzVFLFlBQVksUUFBZ0IsRUFBRSxXQUFxQztRQUNqRSxLQUFLLENBQUM7WUFDSixTQUFTLEVBQUUsU0FBUztZQUNwQixLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLFFBQVE7WUFDUixXQUFXO1lBQ1gsTUFBTSxFQUFFO2dCQUNOLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUU7Z0JBQ3RGLEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFF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L0MsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztLQUFBO0lBRWEsS0FBSyxDQUFDLEVBQVU7OztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQTtZQUVqQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFFbkcsSUFBSSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRyxDQUFDLENBQUMsMENBQUUsRUFBRTtnQkFBRSxPQUFPLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFHLENBQUMsQ0FBQywwQ0FBRSxFQUFFLENBQUE7WUFFdkMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQTs7S0FDM0Q7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEZpbmRSZXBvc2l0b3J5UGFyYW1zLFxuICBHZXRSZXBvc2l0b3J5UGFyYW1zLFxuICBSZXBvc2l0b3J5RmluZFJlc3VsdCxcbiAgU2hvcFByaWNlLFxuICBVcGRhdGVSZXBvc2l0b3J5UGFyYW1zLFxuICBWYXJpYW50UmVwb3NpdG9yeSxcbiAgV2hlcmUsXG59IGZyb20gJy4uLy4uLy4uLy4uL2RvbWFpbidcbmltcG9ydCB7IE5vdEZvdW5kRXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi9lcnJvcnMnXG5pbXBvcnQgeyBCYXNlLCBpc05pbCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgSGFzdXJhR3JhcGhRTENvbHVtblR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcydcbmltcG9ydCB7IHdpdGhDcnVkSGFzdXJhR3JhcGhRTCwgd2l0aEhhc3VyYUdyYXBoUUwgfSBmcm9tICcuLi8uLi9taXhpbnMnXG5pbXBvcnQgeyBWYXJpYW50SGFzdXJhR3JhcGhRTCB9IGZyb20gJy4uLy4uL21vZGVscydcbmltcG9ydCB7IEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5leHBvcnQgY2xhc3MgVmFyaWFudEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5XG4gIGV4dGVuZHMgd2l0aENydWRIYXN1cmFHcmFwaFFMKHdpdGhIYXN1cmFHcmFwaFFMPFZhcmlhbnRIYXN1cmFHcmFwaFFMPihCYXNlKSlcbiAgaW1wbGVtZW50cyBWYXJpYW50UmVwb3NpdG9yeVxue1xuICBjb25zdHJ1Y3RvcihlbmRwb2ludDogc3RyaW5nLCBhdXRoT3B0aW9uczogSGFzdXJhR3JhcGhRTEF1dGhPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdGFibGVOYW1lOiAncHJvZHVjdCcsXG4gICAgICBtb2RlbDogVmFyaWFudEhhc3VyYUdyYXBoUUwsXG4gICAgICBlbmRwb2ludCxcbiAgICAgIGF1dGhPcHRpb25zLFxuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHsgaWQ6IHsgY29sdW1uTmFtZTogJ2lkJywgdG86ICh2YWx1ZSkgPT4gK3ZhbHVlLCBmcm9tOiAodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKCkgfSB9LFxuICAgICAgICB7IGZpcmVzdG9yZUlkOiB7IGNvbHVtbk5hbWU6ICdmaXJlc3RvcmVfaWQnIH0gfSxcbiAgICAgICAgeyBwcm9kdWN0SWQ6IHsgY29sdW1uTmFtZTogJ21haW5fcHJvZHVjdF9pZCcsIHRvOiAodmFsdWUpID0+ICt2YWx1ZSwgZnJvbTogKHZhbHVlKSA9PiB2YWx1ZT8udG9TdHJpbmcoKSB9IH0sXG4gICAgICAgIHsgRUFOOiB7IGNvbHVtbk5hbWU6ICdlYW4nIH0gfSxcbiAgICAgICAgeyBjb3N0UHJpY2U6IHsgY29sdW1uTmFtZTogJ2Nvc3RfcHJpY2UnIH0gfSxcbiAgICAgICAge1xuICAgICAgICAgIHByaWNlOiB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lOiAncHJpY2UnLFxuICAgICAgICAgICAgZnJvbTogKHByaWNlLCBkYXRhKTogU2hvcFByaWNlID0+ICh7XG4gICAgICAgICAgICAgIHByaWNlLFxuICAgICAgICAgICAgICBmdWxsUHJpY2U6IGRhdGEuZnVsbF9wcmljZSxcbiAgICAgICAgICAgICAgc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZTogZGF0YS5zdWJzY3JpYmVyX2Rpc2NvdW50X3BlcmNlbnRhZ2UsXG4gICAgICAgICAgICAgIHN1YnNjcmliZXJQcmljZTogZGF0YS5zdWJzY3JpYmVyX3ByaWNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBiaW5kRmluZEZpbHRlcjogKHNlbnRlbmNlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QudmFsdWVzKHNlbnRlbmNlKS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi4oKGZpbHRlcnM/LnByaWNlIHx8IGZpbHRlcnM/LnByaWNlID09PSAwKSAmJiB7IHByaWNlOiBmaWx0ZXJzLnByaWNlIH0pLFxuICAgICAgICAgICAgICAgIC4uLigoZmlsdGVycy5mdWxsUHJpY2UgfHwgZmlsdGVycy5mdWxsUHJpY2UgPT09IDApICYmIHsgZnVsbF9wcmljZTogZmlsdGVycy5mdWxsUHJpY2UgfSksXG4gICAgICAgICAgICAgICAgLi4uKChmaWx0ZXJzLnN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2UgfHwgZmlsdGVycy5zdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlID09PSAwKSAmJiB7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyX2Rpc2NvdW50X3BlcmNlbnRhZ2U6IGZpbHRlcnMuc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAuLi4oKGZpbHRlcnMuc3Vic2NyaWJlclByaWNlIHx8IGZpbHRlcnMuc3Vic2NyaWJlclByaWNlID09PSAwKSAmJiB7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyX3ByaWNlOiBmaWx0ZXJzLnN1YnNjcmliZXJQcmljZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJpbmRQZXJzaXN0RGF0YTogKHByaWNlRGF0YSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uKHByaWNlRGF0YT8ucHJpY2UgPj0gMCAmJiB7IHByaWNlOiBwcmljZURhdGEucHJpY2UgfSksXG4gICAgICAgICAgICAgIC4uLihwcmljZURhdGEuZnVsbFByaWNlID49IDAgJiYgeyBmdWxsX3ByaWNlOiBwcmljZURhdGEuZnVsbFByaWNlIH0pLFxuICAgICAgICAgICAgICAuLi4ocHJpY2VEYXRhLnN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2UgPj0gMCAmJiB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlcl9kaXNjb3VudF9wZXJjZW50YWdlOiBwcmljZURhdGEuc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC4uLihwcmljZURhdGEuc3Vic2NyaWJlclByaWNlID49IDAgJiYgeyBzdWJzY3JpYmVyX3ByaWNlOiBwcmljZURhdGEuc3Vic2NyaWJlclByaWNlIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBmdWxsUHJpY2U6IHsgY29sdW1uTmFtZTogJ2Z1bGxfcHJpY2UnIH0gfSxcbiAgICAgICAgeyBzdWJzY3JpYmVyRGlzY291bnRQZXJjZW50YWdlOiB7IGNvbHVtbk5hbWU6ICdzdWJzY3JpYmVyX2Rpc2NvdW50X3BlcmNlbnRhZ2UnIH0gfSxcbiAgICAgICAgeyBzdWJzY3JpYmVyUHJpY2U6IHsgY29sdW1uTmFtZTogJ3N1YnNjcmliZXJfcHJpY2UnIH0gfSxcbiAgICAgICAgJ3NrdScsXG4gICAgICAgIHtcbiAgICAgICAgICBzdG9jazoge1xuICAgICAgICAgICAgY29sdW1uTmFtZTogJ3N0b2NrJyxcbiAgICAgICAgICAgIGZyb206IChxdWFudGl0eTogbnVtYmVyKSA9PiAoeyBxdWFudGl0eSB9KSxcbiAgICAgICAgICAgIHRvOiAodmFsdWUpID0+IChpc05pbCh2YWx1ZT8ucXVhbnRpdHkpID8gdmFsdWUgOiB2YWx1ZT8ucXVhbnRpdHkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgaGFzU3RvY2s6IHsgY29sdW1uTmFtZTogJ2hhc19zdG9jaycgfSB9LFxuICAgICAgICAnd2VpZ2h0JyxcbiAgICAgICAgeyBuYW1lOiB7IHRvOiAoKSA9PiAnJywgZnJvbTogKCkgPT4gdW5kZWZpbmVkIH0gfSxcbiAgICAgICAgeyBoYXNWYXJpYW50czogeyBjb2x1bW5OYW1lOiAnaGFzX3ZhcmlhbnRzJywgdG86ICgpID0+IGZhbHNlLCBmcm9tOiAoKSA9PiB1bmRlZmluZWQgfSB9LFxuICAgICAgICB7IGNyZWF0ZWRBdDogeyBjb2x1bW5OYW1lOiAnY3JlYXRlZF9hdCcgfSB9LFxuICAgICAgICB7IHVwZGF0ZWRBdDogeyBjb2x1bW5OYW1lOiAndXBkYXRlZF9hdCcgfSB9LFxuICAgICAgICB7XG4gICAgICAgICAgZ3JhZGU6IHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdncmFkZScsXG4gICAgICAgICAgICB0eXBlOiBIYXN1cmFHcmFwaFFMQ29sdW1uVHlwZS5Kc29uYixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgZ2V0KGlkZW50aWZpZXJzOiBHZXRSZXBvc2l0b3J5UGFyYW1zPFZhcmlhbnRIYXN1cmFHcmFwaFFMPik6IFByb21pc2U8VmFyaWFudEhhc3VyYUdyYXBoUUw+IHtcbiAgICBjb25zdCB2YXJpYW50ID0gTnVtYmVyLmlzTmFOKCtpZGVudGlmaWVycy5pZClcbiAgICAgID8gKGF3YWl0IHRoaXMuZmluZCh7IGZpbHRlcnM6IHsgZmlyZXN0b3JlSWQ6IGlkZW50aWZpZXJzLmlkIH0gfSkpLmRhdGE/LlswXVxuICAgICAgOiBhd2FpdCBzdXBlci5nZXQoaWRlbnRpZmllcnMpXG5cbiAgICBpZiAoIXZhcmlhbnQucHJvZHVjdElkKSB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgVmFyaWFudCBub3QgZm91bmQsIGl0IGlzIGEgcHJvZHVjdGApXG5cbiAgICByZXR1cm4gdmFyaWFudFxuICB9XG5cbiAgYXN5bmMgZmluZChwYXJhbXM/OiBGaW5kUmVwb3NpdG9yeVBhcmFtczxWYXJpYW50SGFzdXJhR3JhcGhRTD4pOiBQcm9taXNlPFJlcG9zaXRvcnlGaW5kUmVzdWx0PFZhcmlhbnRIYXN1cmFHcmFwaFFMPj4ge1xuICAgIGNvbnN0IHsgZmlsdGVycywgLi4ub3B0aW9ucyB9ID0gcGFyYW1zIHx8IHt9XG5cbiAgICByZXR1cm4gc3VwZXIuZmluZCh7IC4uLm9wdGlvbnMsIGZpbHRlcnM6IHsgcHJvZHVjdElkOiB7IG9wZXJhdG9yOiBXaGVyZS5JU05PVE5VTEwgfSwgLi4uZmlsdGVycyB9IH0pXG4gIH1cblxuICBhc3luYyB1cGRhdGUocGFyYW1zOiBVcGRhdGVSZXBvc2l0b3J5UGFyYW1zPFZhcmlhbnRIYXN1cmFHcmFwaFFMPik6IFByb21pc2U8VmFyaWFudEhhc3VyYUdyYXBoUUw+IHtcbiAgICBjb25zdCB7IHByb2R1Y3RJZCwgaWQ6IGNoZWNrSWQsIC4uLmRhdGEgfSA9IHBhcmFtc1xuICAgIGNvbnN0IGRhdGFXaXRoUHJvZHVjdElkID0gdGhpcy5wYXJhbXNUb1BsYWluKHsgaWQ6IGNoZWNrSWQsIHByb2R1Y3RJZCB9KVxuICAgIGNvbnN0IGlkID0gYXdhaXQgdGhpcy5nZXRJZChkYXRhV2l0aFByb2R1Y3RJZC5pZClcbiAgICBjb25zdCBwcm9kdWN0ID0gYXdhaXQgc3VwZXIudXBkYXRlKHsgaWQsIC4uLmRhdGEgfSlcblxuICAgIHByb2R1Y3QucHJvZHVjdElkID0gZGF0YVdpdGhQcm9kdWN0SWQucHJvZHVjdElkXG5cbiAgICByZXR1cm4gcHJvZHVjdFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRJZChpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIU51bWJlci5pc05hTigraWQpKSByZXR1cm4gaWRcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5maW5kKHsgZmlsdGVyczogeyBmaXJlc3RvcmVJZDogaWQgfSwgb3B0aW9uczogeyBlbmFibGVDb3VudDogZmFsc2UgfSB9KVxuXG4gICAgaWYgKGRhdGE/LlswXT8uaWQpIHJldHVybiBkYXRhPy5bMF0/LmlkXG5cbiAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgUHJvZHVjdCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZGApXG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5yZXBvc2l0b3J5LnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9pbmZyYS9oYXN1cmEtZ3JhcGhxbC90eXBlcy9ncmFwaHFsLnJlcG9zaXRvcnkudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZU1vZGVsQnVpbGRlciwgTW9kZWxCYXNlU3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJ1xuXG5pbXBvcnQgeyBIYXN1cmFHcmFwaFFMQXV0aE9wdGlvbnMgfSBmcm9tICcuL2hhc3VyYS1ncmFwaHFsLWF1dGgtb3B0aW9ucy50eXBlJ1xuaW1wb3J0IHsgSGFzdXJhR3JhcGhRTEZpZWxkcyB9IGZyb20gJy4vaGFzdXJhLWdyYXBocWwtZmllbGRzLnR5cGUnXG5pbXBvcnQgeyBWYXJpYWJsZU9wdGlvbnMgfSBmcm9tICcuL3ZhcmlhYmxlLW9wdGlvbnMudHlwZSdcblxuZXhwb3J0IHR5cGUgR3JhcGhRTFBhcmFtczxNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZT4gPSB7XG4gIG9wZXJhdGlvbjogc3RyaW5nXG4gIGZpZWxkcz86IEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+XG4gIHZhcmlhYmxlcz86IFZhcmlhYmxlT3B0aW9uc1xufVxuXG5leHBvcnQgdHlwZSBHcmFwaFFMUmVwb3NpdG9yeTxNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZT4gPSB7XG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIG1vZGVsOiBCYXNlTW9kZWxCdWlsZGVyPE1vZGVsPlxuICBmaWVsZHM6IEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+XG4gIGVuZHBvaW50OiBzdHJpbmdcbiAgYXV0aE9wdGlvbnM6IEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9uc1xuICBtdXRhdGlvbjogPFJldHVybkZpZWxkcyA9IGFueT4oXG4gICAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gICAgZmllbGRzPzogc3RyaW5nW10gfCBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPixcbiAgICB2YXJpYWJsZXM/OiBWYXJpYWJsZU9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxSZXR1cm5GaWVsZHM+XG4gIHF1ZXJ5OiA8UmV0dXJuRmllbGRzID0gYW55PihcbiAgICBvcGVyYXRpb246IHN0cmluZyB8IEdyYXBoUUxQYXJhbXM8TW9kZWw+W10sXG4gICAgZmllbGRzPzogc3RyaW5nW10gfCBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPixcbiAgICB2YXJpYWJsZXM/OiBWYXJpYWJsZU9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxSZXR1cm5GaWVsZHM+XG4gIGdldEF0dHJpYnV0ZUdyYXBoUUxUeXBlT2Y6IDxGaWVsZFZhbHVlPih2YWx1ZTogRmllbGRWYWx1ZSkgPT4gc3RyaW5nXG4gIGNvbnZlcnREYXRhRnJvbUhhc3VyYTogKGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4pID0+IE1vZGVsXG4gIGNvbnZlcnREYXRhVG9IYXN1cmEoaW5zdGFuY2U6IE1vZGVsLCB1cGRhdGU/OiBib29sZWFuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5yZXBvc2l0b3J5LnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9pbmZyYS9oYXN1cmEtZ3JhcGhxbC90eXBlcy9ncmFwaHFsLnJlcG9zaXRvcnkudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZU1vZGVsQnVpbGRlciwgTW9kZWxCYXNlU3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgRGVidWdIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscydcbmltcG9ydCB7IEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9ucyB9IGZyb20gJy4vaGFzdXJhLWdyYXBocWwtYXV0aC1vcHRpb25zLnR5cGUnXG5pbXBvcnQgeyBIYXN1cmFHcmFwaFFMRmllbGRzIH0gZnJvbSAnLi9oYXN1cmEtZ3JhcGhxbC1maWVsZHMudHlwZSdcbmltcG9ydCB7IFZhcmlhYmxlT3B0aW9ucyB9IGZyb20gJy4vdmFyaWFibGUtb3B0aW9ucy50eXBlJ1xuXG5leHBvcnQgdHlwZSBHcmFwaFFMUGFyYW1zPE1vZGVsIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlPE1vZGVsPj4gPSB7XG4gIG9wZXJhdGlvbjogc3RyaW5nXG4gIGZpZWxkcz86IEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+XG4gIHZhcmlhYmxlcz86IFZhcmlhYmxlT3B0aW9uc1xufVxuXG5leHBvcnQgdHlwZSBHcmFwaFFMUmVwb3NpdG9yeTxNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZTxNb2RlbD4+ID0ge1xuICB0YWJsZU5hbWU6IHN0cmluZ1xuICBtb2RlbDogQmFzZU1vZGVsQnVpbGRlcjxNb2RlbD5cbiAgZmllbGRzOiBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPlxuICBlbmRwb2ludDogc3RyaW5nXG4gIGF1dGhPcHRpb25zOiBIYXN1cmFHcmFwaFFMQXV0aE9wdGlvbnNcbiAgbG9nZ2VyOiBEZWJ1Z0hlbHBlclxuICBtdXRhdGlvbjogPFJldHVybkZpZWxkcyA9IGFueT4oXG4gICAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gICAgZmllbGRzPzogc3RyaW5nW10gfCBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPixcbiAgICB2YXJpYWJsZXM/OiBWYXJpYWJsZU9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxSZXR1cm5GaWVsZHM+XG4gIHF1ZXJ5OiA8UmV0dXJuRmllbGRzID0gYW55PihcbiAgICBvcGVyYXRpb246IHN0cmluZyB8IEdyYXBoUUxQYXJhbXM8TW9kZWw+W10sXG4gICAgZmllbGRzPzogc3RyaW5nW10gfCBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPixcbiAgICB2YXJpYWJsZXM/OiBWYXJpYWJsZU9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxSZXR1cm5GaWVsZHM+XG4gIGdldEF0dHJpYnV0ZUdyYXBoUUxUeXBlT2Y6IDxGaWVsZFZhbHVlPih2YWx1ZTogRmllbGRWYWx1ZSkgPT4gc3RyaW5nXG4gIGNvbnZlcnREYXRhRnJvbUhhc3VyYShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+LCBmaWVsZHM/OiBzdHJpbmdbXSB8IEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+KTogTW9kZWxcbiAgY29udmVydERhdGFUb0hhc3VyYShpbnN0YW5jZTogTW9kZWwsIHVwZGF0ZT86IGJvb2xlYW4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzdXJhLWdyYXBocWwtZmllbGRzLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9pbmZyYS9oYXN1cmEtZ3JhcGhxbC90eXBlcy9oYXN1cmEtZ3JhcGhxbC1maWVsZHMudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTW9kZWxCYXNlU3RydWN0dXJlLFxuICBOZXN0ZWRSZXBvc2l0b3J5RmluZEZpZWx0ZXJzT3B0aW9ucyxcbiAgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lcyxcbiAgUmVwb3NpdG9yeUZpbmRGaWVsZCxcbn0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgUHJvcFR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscydcbmltcG9ydCB7IEhhc3VyYUdyYXBoUUxDb2x1bW5UeXBlIH0gZnJvbSAnLi4vZW51bXMnXG5cbmV4cG9ydCB0eXBlIENvbHVtbk9wdGlvbnM8RmllbGRUeXBlLCBNb2RlbCwgVmFsdWVGcm9tID0gYW55PiA9IHtcbiAgdHlwZT86IEhhc3VyYUdyYXBoUUxDb2x1bW5UeXBlXG4gIGNvbHVtbk5hbWU/OiBzdHJpbmdcbiAgZmlsdGVycz86IHtcbiAgICBmaWx0ZXJUeXBlOiBIYXN1cmFHcmFwaFFMQ29sdW1uVHlwZSB8IHN0cmluZ1xuICAgIGZpbHRlcnM6IE5lc3RlZFJlcG9zaXRvcnlGaW5kRmllbHRlcnNPcHRpb25zPEZpZWxkVHlwZT5cbiAgfVxuICBmaWVsZHM/OiBIYXN1cmFHcmFwaFFMRmllbGRzPEZpZWxkVHlwZSBleHRlbmRzIGFueVtdID8gRmllbGRUeXBlW251bWJlcl0gOiBGaWVsZFR5cGU+XG4gIGZvcmVpZ25LZXlDb2x1bW4/OlxuICAgIHwgUGFydGlhbDxcbiAgICAgICAgUmVjb3JkPFxuICAgICAgICAgIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8RmllbGRUeXBlIGV4dGVuZHMgYW55W10gPyBGaWVsZFR5cGVbbnVtYmVyXSA6IEZpZWxkVHlwZT4sXG4gICAgICAgICAgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNb2RlbD4gfCAoc3RyaW5nICYge30pXG4gICAgICAgID5cbiAgICAgID5cbiAgICB8IHt9XG4gIGZyb20/OiAodmFsdWU6IFZhbHVlRnJvbSB8IFZhbHVlRnJvbVtdLCBkYXRhPzogYW55KSA9PiBGaWVsZFR5cGVcbiAgdG8/OiAodmFsdWU6IEZpZWxkVHlwZSwgaW5zdGFuY2U/OiBNb2RlbCkgPT4gVmFsdWVGcm9tXG4gIGJpbmRGaW5kRmlsdGVyPzogKFxuICAgIHNlbnRlbmNlOiBSZXBvc2l0b3J5RmluZEZpZWxkPE1vZGVsLCBrZXlvZiBNb2RlbD4sXG4gICkgPT4gUmVjb3JkPHN0cmluZywgUmVwb3NpdG9yeUZpbmRGaWVsZDxhbnksIGFueT4gfCBWYWx1ZUZyb20+IHwgUmVwb3NpdG9yeUZpbmRGaWVsZDxhbnksIGFueT4gfCBWYWx1ZUZyb21cbiAgYmluZFBlcnNpc3REYXRhPzogKHZhbHVlOiBGaWVsZFR5cGUsIGluc3RhbmNlPzogTW9kZWwpID0+IFJlY29yZDxzdHJpbmcsIFZhbHVlRnJvbT5cbn1cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0ZU9wdGlvbk5hbWVzID1cbiAgfCAnYXZnJ1xuICB8ICdjb3VudCdcbiAgfCAnbWF4J1xuICB8ICdtaW4nXG4gIHwgJ3N0ZGRldidcbiAgfCAnc3RkZGV2X3BvcCdcbiAgfCAnc3RkZGV2X3NhbXAnXG4gIHwgJ3N1bSdcbiAgfCAndmFyX3BvcCdcbiAgfCAndmFyX3NhbXAnXG4gIHwgJ3ZhcmlhbmNlJ1xuZXhwb3J0IHR5cGUgQWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBUeXBlLCBQcm9wZXJ0aWVzIGV4dGVuZHMga2V5b2YgTW9kZWwgPSBrZXlvZiBNb2RlbD4gPVxuICB8IHtcbiAgICAgIFtLIGluIFByb3BlcnRpZXNdOiBQcm9wVHlwZTxNb2RlbCwgSz4gZXh0ZW5kcyBUeXBlID8gSyA6IG5ldmVyXG4gICAgfVtQcm9wZXJ0aWVzXVxuICB8IHN0cmluZ1xuZXhwb3J0IHR5cGUgQWdncmVnYXRlT3B0aW9uczxNb2RlbD4gPSB7XG4gIGF2Zz86IEFycmF5PEFnZ3JlZ2F0ZU9wdGlvbkZpZWxkczxNb2RlbCwgbnVtYmVyPj5cbiAgbWF4PzogQXJyYXk8QWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBudW1iZXIgfCBEYXRlPj5cbiAgbWluPzogQXJyYXk8QWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBudW1iZXIgfCBEYXRlPj5cbiAgc3RkZGV2PzogQXJyYXk8QWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBudW1iZXI+PlxuICBzdGRkZXZfcG9wPzogQXJyYXk8QWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBudW1iZXI+PlxuICBzdGRkZXZfc2FtcD86IEFycmF5PEFnZ3JlZ2F0ZU9wdGlvbkZpZWxkczxNb2RlbCwgbnVtYmVyPj5cbiAgc3VtPzogQXJyYXk8QWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBudW1iZXI+PlxuICB2YXJfcG9wPzogQXJyYXk8QWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBudW1iZXI+PlxuICB2YXJfc2FtcD86IEFycmF5PEFnZ3JlZ2F0ZU9wdGlvbkZpZWxkczxNb2RlbCwgbnVtYmVyPj5cbiAgdmFyaWFuY2U/OiBBcnJheTxBZ2dyZWdhdGVPcHRpb25GaWVsZHM8TW9kZWwsIG51bWJlcj4+XG59XG5cbmV4cG9ydCB0eXBlIEhhc3VyYUdyYXBoUUxGaWVsZHM8TW9kZWw+ID0gKFxuICB8IChNb2RlbCBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZVxuICAgICAgP1xuICAgICAgICAgIHwgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNb2RlbD5cbiAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgW2tleSBpbiBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1vZGVsPl0/OiBQcm9wVHlwZTxNb2RlbCwga2V5PiBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZVxuICAgICAgICAgICAgICAgID8gSGFzdXJhR3JhcGhRTEZpZWxkczxQcm9wVHlwZTxNb2RlbCwga2V5Pj5cbiAgICAgICAgICAgICAgICA6IFByb3BUeXBlPE1vZGVsLCBrZXk+IGV4dGVuZHMgYW55W11cbiAgICAgICAgICAgICAgICA/IFByb3BUeXBlPE1vZGVsLCBrZXk+W10gZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmVbXVxuICAgICAgICAgICAgICAgICAgPyBIYXN1cmFHcmFwaFFMRmllbGRzPFByb3BUeXBlPE1vZGVsLCBrZXk+W10+XG4gICAgICAgICAgICAgICAgICA6IG5ldmVyXG4gICAgICAgICAgICAgICAgOiBuZXZlclxuICAgICAgICAgICAgfVxuICAgICAgICAgIHwge1xuICAgICAgICAgICAgICBba2V5IGluIE5vbkZ1bmN0aW9uQW5kSWRlbnRpZmllclByb3BlcnR5TmFtZXM8TW9kZWw+XT86IGtleSBleHRlbmRzICdhZ2dyZWdhdGUnXG4gICAgICAgICAgICAgICAgPyBuZXZlclxuICAgICAgICAgICAgICAgIDogUHJvcFR5cGU8TW9kZWwsIGtleT4gZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmVcbiAgICAgICAgICAgICAgICA/IENvbHVtbk9wdGlvbnM8UHJvcFR5cGU8TW9kZWwsIGtleT4sIE1vZGVsPlxuICAgICAgICAgICAgICAgIDogQ29sdW1uT3B0aW9uczxQcm9wVHlwZTxNb2RlbCwga2V5PiwgTW9kZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5PcHRpb25zPFByb3BUeXBlPE1vZGVsLCBhbnk+LCBNb2RlbD4+XG4gICAgICA6IHN0cmluZylcbiAgfCB7IGFnZ3JlZ2F0ZTogQXJyYXk8QWdncmVnYXRlT3B0aW9uczxNb2RlbD4gfCAnY291bnQnPiB9XG4gIHwgJ2FmZmVjdGVkX3Jvd3MnXG4pW11cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzdXJhLWdyYXBocWwtZmllbGRzLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9pbmZyYS9oYXN1cmEtZ3JhcGhxbC90eXBlcy9oYXN1cmEtZ3JhcGhxbC1maWVsZHMudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTW9kZWxCYXNlU3RydWN0dXJlLFxuICBOZXN0ZWRSZXBvc2l0b3J5RmluZEZpZWx0ZXJzT3B0aW9ucyxcbiAgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lcyxcbiAgUmVwb3NpdG9yeUZpbmRGaWVsZCxcbn0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgUHJvcFR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscydcbmltcG9ydCB7IEhhc3VyYUdyYXBoUUxDb2x1bW5UeXBlIH0gZnJvbSAnLi4vZW51bXMnXG5cbmV4cG9ydCB0eXBlIENvbHVtbk9wdGlvbnM8RmllbGRUeXBlLCBNb2RlbCwgVmFsdWVGcm9tID0gYW55PiA9IHtcbiAgdHlwZT86IEhhc3VyYUdyYXBoUUxDb2x1bW5UeXBlXG4gIGNvbHVtbk5hbWU/OiBzdHJpbmdcbiAgZmlsdGVycz86IHtcbiAgICBmaWx0ZXJUeXBlOiBIYXN1cmFHcmFwaFFMQ29sdW1uVHlwZSB8IHN0cmluZ1xuICAgIGZpbHRlcnM6IE5lc3RlZFJlcG9zaXRvcnlGaW5kRmllbHRlcnNPcHRpb25zPEZpZWxkVHlwZT5cbiAgfVxuICBmaWVsZHM/OiBIYXN1cmFHcmFwaFFMRmllbGRzPEZpZWxkVHlwZT5cbiAgZm9yZWlnbktleUNvbHVtbj86XG4gICAgfCBQYXJ0aWFsPFxuICAgICAgICBSZWNvcmQ8XG4gICAgICAgICAgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxGaWVsZFR5cGUgZXh0ZW5kcyBhbnlbXSA/IEZpZWxkVHlwZVtudW1iZXJdIDogRmllbGRUeXBlPixcbiAgICAgICAgICBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1vZGVsPiB8IChzdHJpbmcgJiB7fSlcbiAgICAgICAgPlxuICAgICAgPlxuICAgIHwge31cbiAgZnJvbT86ICh2YWx1ZTogVmFsdWVGcm9tIHwgVmFsdWVGcm9tW10sIGRhdGE/OiBhbnkpID0+IEZpZWxkVHlwZVxuICB0bz86ICh2YWx1ZTogRmllbGRUeXBlLCBpbnN0YW5jZT86IE1vZGVsKSA9PiBWYWx1ZUZyb21cbiAgYmluZEZpbmRGaWx0ZXI/OiAoXG4gICAgc2VudGVuY2U6IFJlcG9zaXRvcnlGaW5kRmllbGQ8TW9kZWwsIGtleW9mIE1vZGVsPixcbiAgKSA9PiBSZWNvcmQ8c3RyaW5nLCBSZXBvc2l0b3J5RmluZEZpZWxkPGFueSwgYW55PiB8IFZhbHVlRnJvbT4gfCBSZXBvc2l0b3J5RmluZEZpZWxkPGFueSwgYW55PiB8IFZhbHVlRnJvbVxuICBiaW5kUGVyc2lzdERhdGE/OiAodmFsdWU6IEZpZWxkVHlwZSwgaW5zdGFuY2U/OiBNb2RlbCkgPT4gUmVjb3JkPHN0cmluZywgVmFsdWVGcm9tPlxufVxuZXhwb3J0IHR5cGUgQWdncmVnYXRlT3B0aW9uTmFtZXMgPVxuICB8ICdhdmcnXG4gIHwgJ2NvdW50J1xuICB8ICdtYXgnXG4gIHwgJ21pbidcbiAgfCAnc3RkZGV2J1xuICB8ICdzdGRkZXZfcG9wJ1xuICB8ICdzdGRkZXZfc2FtcCdcbiAgfCAnc3VtJ1xuICB8ICd2YXJfcG9wJ1xuICB8ICd2YXJfc2FtcCdcbiAgfCAndmFyaWFuY2UnXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVPcHRpb25GaWVsZHM8TW9kZWwsIFR5cGUsIFByb3BlcnRpZXMgZXh0ZW5kcyBrZXlvZiBNb2RlbCA9IGtleW9mIE1vZGVsPiA9XG4gIHwge1xuICAgICAgW0sgaW4gUHJvcGVydGllc106IFByb3BUeXBlPE1vZGVsLCBLPiBleHRlbmRzIFR5cGUgPyBLIDogbmV2ZXJcbiAgICB9W1Byb3BlcnRpZXNdXG4gIHwgc3RyaW5nXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVPcHRpb25zPE1vZGVsPiA9IHtcbiAgYXZnPzogQXJyYXk8QWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBudW1iZXI+PlxuICBtYXg/OiBBcnJheTxBZ2dyZWdhdGVPcHRpb25GaWVsZHM8TW9kZWwsIG51bWJlciB8IERhdGU+PlxuICBtaW4/OiBBcnJheTxBZ2dyZWdhdGVPcHRpb25GaWVsZHM8TW9kZWwsIG51bWJlciB8IERhdGU+PlxuICBzdGRkZXY/OiBBcnJheTxBZ2dyZWdhdGVPcHRpb25GaWVsZHM8TW9kZWwsIG51bWJlcj4+XG4gIHN0ZGRldl9wb3A/OiBBcnJheTxBZ2dyZWdhdGVPcHRpb25GaWVsZHM8TW9kZWwsIG51bWJlcj4+XG4gIHN0ZGRldl9zYW1wPzogQXJyYXk8QWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBudW1iZXI+PlxuICBzdW0/OiBBcnJheTxBZ2dyZWdhdGVPcHRpb25GaWVsZHM8TW9kZWwsIG51bWJlcj4+XG4gIHZhcl9wb3A/OiBBcnJheTxBZ2dyZWdhdGVPcHRpb25GaWVsZHM8TW9kZWwsIG51bWJlcj4+XG4gIHZhcl9zYW1wPzogQXJyYXk8QWdncmVnYXRlT3B0aW9uRmllbGRzPE1vZGVsLCBudW1iZXI+PlxuICB2YXJpYW5jZT86IEFycmF5PEFnZ3JlZ2F0ZU9wdGlvbkZpZWxkczxNb2RlbCwgbnVtYmVyPj5cbn1cblxudHlwZSBNb2RlbEJhc2VIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPiA9IE1vZGVsIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlXG4gID9cbiAgICAgIHwgTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNb2RlbD5cbiAgICAgIHwge1xuICAgICAgICAgIFtrZXkgaW4gTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNb2RlbD5dPzogUHJvcFR5cGU8TW9kZWwsIGtleT4gZXh0ZW5kcyBNb2RlbEJhc2VTdHJ1Y3R1cmVcbiAgICAgICAgICAgID8gSGFzdXJhR3JhcGhRTEZpZWxkczxQcm9wVHlwZTxNb2RlbCwga2V5Pj5cbiAgICAgICAgICAgIDogUHJvcFR5cGU8TW9kZWwsIGtleT4gZXh0ZW5kcyBhbnlbXVxuICAgICAgICAgICAgPyBQcm9wVHlwZTxNb2RlbCwga2V5PltdIGV4dGVuZHMgTW9kZWxCYXNlU3RydWN0dXJlW11cbiAgICAgICAgICAgICAgPyBIYXN1cmFHcmFwaFFMRmllbGRzPFByb3BUeXBlPE1vZGVsLCBrZXk+W10+XG4gICAgICAgICAgICAgIDogbmV2ZXJcbiAgICAgICAgICAgIDogbmV2ZXJcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgW2tleSBpbiBOb25GdW5jdGlvbkFuZElkZW50aWZpZXJQcm9wZXJ0eU5hbWVzPE1vZGVsPl0/OiBrZXkgZXh0ZW5kcyAnYWdncmVnYXRlJ1xuICAgICAgICAgICAgPyBuZXZlclxuICAgICAgICAgICAgOiBQcm9wVHlwZTxNb2RlbCwga2V5PiBleHRlbmRzIE1vZGVsQmFzZVN0cnVjdHVyZVxuICAgICAgICAgICAgPyBDb2x1bW5PcHRpb25zPFByb3BUeXBlPE1vZGVsLCBrZXk+LCBNb2RlbD5cbiAgICAgICAgICAgIDogQ29sdW1uT3B0aW9uczxQcm9wVHlwZTxNb2RlbCwga2V5PiwgTW9kZWw+XG4gICAgICAgIH1cbiAgICAgIHwgUmVjb3JkPHN0cmluZywgQ29sdW1uT3B0aW9uczxQcm9wVHlwZTxNb2RlbCwgYW55PiwgTW9kZWw+PlxuICA6IHN0cmluZ1xuXG5leHBvcnQgdHlwZSBIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPiA9IChcbiAgfCBNb2RlbEJhc2VIYXN1cmFHcmFwaFFMRmllbGRzPE1vZGVsPlxuICB8IHsgYWdncmVnYXRlOiBBcnJheTxBZ2dyZWdhdGVPcHRpb25zPE1vZGVsPiB8ICdjb3VudCc+IH1cbiAgfCB7IHJldHVybmluZzogTm9uRnVuY3Rpb25BbmRJZGVudGlmaWVyUHJvcGVydHlOYW1lczxNb2RlbD5bXSB9XG4gIHwgJ2FmZmVjdGVkX3Jvd3MnXG4pW11cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { DebugDecoratorHelper } from '../helpers';
2
+ export function Debug(opts) {
3
+ return function (target) {
4
+ DebugDecoratorHelper.set(target.prototype, opts);
5
+ };
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuY2xhc3MuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC9zcmMvdXRpbHMvZGVjb3JhdG9ycy9kZWJ1Zy5jbGFzcy5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFnQixNQUFNLFlBQVksQ0FBQTtBQUUvRCxNQUFNLFVBQVUsS0FBSyxDQUFDLElBQW1CO0lBQ3ZDLE9BQU8sVUFBcUIsTUFBVztRQUNyQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNsRCxDQUFDLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVidWdEZWNvcmF0b3JIZWxwZXIsIERlYnVnT3B0aW9ucyB9IGZyb20gJy4uL2hlbHBlcnMnXG5cbmV4cG9ydCBmdW5jdGlvbiBEZWJ1ZyhvcHRzPzogRGVidWdPcHRpb25zKTogQ2xhc3NEZWNvcmF0b3Ige1xuICByZXR1cm4gZnVuY3Rpb24gPFRGdW5jdGlvbj4odGFyZ2V0OiBhbnkpOiBURnVuY3Rpb24gfCB2b2lkIHtcbiAgICBEZWJ1Z0RlY29yYXRvckhlbHBlci5zZXQodGFyZ2V0LnByb3RvdHlwZSwgb3B0cylcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './debug.class.decorator';
2
+ export * from './trace.method.decorator';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy91dGlscy9kZWNvcmF0b3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUE7QUFDdkMsY0FBYywwQkFBMEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGVidWcuY2xhc3MuZGVjb3JhdG9yJ1xuZXhwb3J0ICogZnJvbSAnLi90cmFjZS5tZXRob2QuZGVjb3JhdG9yJ1xuIl19
@@ -0,0 +1,81 @@
1
+ import { get } from 'lodash';
2
+ import { DebugHelper } from '../helpers';
3
+ const ASYNC_IDENTIFIER = 'async';
4
+ export function Log(options = {}) {
5
+ return Trace(Object.assign({ level: 'log' }, options));
6
+ }
7
+ export function Trace(options = {}) {
8
+ return function (target, propertyKey, propertyDescriptor) {
9
+ const method = propertyDescriptor.value;
10
+ const isPromise = method.toString().includes(ASYNC_IDENTIFIER);
11
+ const args = {
12
+ options,
13
+ method,
14
+ target,
15
+ propertyKey,
16
+ propertyDescriptor,
17
+ };
18
+ propertyDescriptor.value = isPromise ? promiseTracer(args) : functionTracer(args);
19
+ return propertyDescriptor;
20
+ };
21
+ }
22
+ const traceCall = ({ target, propertyKey, propertyDescriptor, args }) => {
23
+ if (!target.debug)
24
+ target.debug = DebugHelper.for(target, propertyKey);
25
+ return target.debug.push(propertyKey).trace('called', { target, propertyKey, propertyDescriptor, args });
26
+ };
27
+ const promiseTracer = function ({ options, method, propertyKey, propertyDescriptor }) {
28
+ return function (...args) {
29
+ return new Promise((resolve, reject) => {
30
+ const debug = traceCall({ target: this, propertyDescriptor, propertyKey, args });
31
+ if (get(options, 'level', '') === 'log') {
32
+ debug.with('params').log(args);
33
+ }
34
+ return method
35
+ .apply(this, args)
36
+ .then((result) => {
37
+ if (options.callbackFn) {
38
+ options.callbackFn({ target: this, result, args, namespace: [propertyKey] });
39
+ }
40
+ if (get(options, 'level', '') === 'log') {
41
+ debug.with('returns').log(result === undefined ? 'void' : result);
42
+ }
43
+ return resolve(result);
44
+ })
45
+ .catch((error) => {
46
+ debug.error(error, ...args);
47
+ debug.with('stack').error(error.stack).pop();
48
+ return reject(error);
49
+ })
50
+ .finally(() => {
51
+ return debug.trace('finally', { args }).pop();
52
+ });
53
+ });
54
+ };
55
+ };
56
+ const functionTracer = function ({ options, target, method, propertyKey, propertyDescriptor, }) {
57
+ return function (...args) {
58
+ const debug = traceCall({ target: this || target, propertyDescriptor, propertyKey, args });
59
+ if (get(options, 'level', '') === 'log') {
60
+ debug.with('params').log(args);
61
+ }
62
+ let result;
63
+ try {
64
+ result = method.apply(this, args);
65
+ if (options.callbackFn)
66
+ options.callbackFn({ target: this, result, args, namespace: [propertyKey] });
67
+ if (get(options, 'level', '') === 'log') {
68
+ debug.with('returns').log(result === undefined ? 'void' : result);
69
+ }
70
+ return result;
71
+ }
72
+ catch (error) {
73
+ debug.error(error, ...args).pop();
74
+ throw error;
75
+ }
76
+ finally {
77
+ debug.trace('finally', { args }).pop();
78
+ }
79
+ };
80
+ };
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UubWV0aG9kLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3Qvc3JjL3V0aWxzL2RlY29yYXRvcnMvdHJhY2UubWV0aG9kLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTVCLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUErQnBELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFBO0FBRWhDLE1BQU0sVUFBVSxHQUFHLENBQVksVUFBbUMsRUFBRTtJQUNsRSxPQUFPLEtBQUssaUJBQWMsS0FBSyxFQUFFLEtBQUssSUFBSyxPQUFPLEVBQUcsQ0FBQTtBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FBWSxVQUFtQyxFQUFFO0lBQ3BFLE9BQU8sVUFBVSxNQUFXLEVBQUUsV0FBbUIsRUFBRSxrQkFBc0M7UUFDdkYsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFBO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUM5RCxNQUFNLElBQUksR0FBRztZQUNYLE9BQU87WUFDUCxNQUFNO1lBQ04sTUFBTTtZQUNOLFdBQVc7WUFDWCxrQkFBa0I7U0FDbkIsQ0FBQTtRQUVELGtCQUFrQixDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRWpGLE9BQU8sa0JBQWtCLENBQUE7SUFDM0IsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLElB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T0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUU7WUFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDL0I7UUFFRCxJQUFJLE1BQVcsQ0FBQTtRQUVmLElBQUk7WUFDRixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFFakMsSUFBSSxPQUFPLENBQUMsVUFBVTtnQkFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUVwRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssRUFBRTtnQkFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTthQUNsRTtZQUVELE9BQU8sTUFBTSxDQUFBO1NBQ2Q7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFakMsTUFBTSxLQUFLLENBQUE7U0FDWjtnQkFBUztZQUNSLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtTQUN2QztJQUNILENBQUMsQ0FBQTtBQUNILENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaCdcblxuaW1wb3J0IHsgRGVidWdnYWJsZSwgRGVidWdIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzJ1xuXG5leHBvcnQgdHlwZSBDYWxsYmFja0ZuQXJnczxULCBSZXN1bHQ+ID0ge1xuICB0YXJnZXQ6IFRcbiAgcmVzdWx0OiBSZXN1bHRcbiAgYXJnczogQXJyYXk8YW55PlxuICBuYW1lc3BhY2U/OiBBcnJheTxzdHJpbmc+XG59XG5cbnR5cGUgQ2FsbGJhY2tGbjxULCBSZXN1bHQ+ID0gKG9wdHM6IENhbGxiYWNrRm5BcmdzPFQsIFJlc3VsdD4pID0+IHZvaWRcblxudHlwZSBUcmFjZU9wdGlvbnM8VCwgUmVzdWx0PiA9IHtcbiAgY2FsbGJhY2tGbj86IENhbGxiYWNrRm48VCwgUmVzdWx0PlxuICBsZXZlbD86ICd0cmFjZScgfCAnbG9nJ1xufVxuXG50eXBlIFRyYWNlcjxULCBSZXN1bHQ+ID0ge1xuICBvcHRpb25zOiBUcmFjZU9wdGlvbnM8VCwgUmVzdWx0PlxuICBtZXRob2Q6IGFueVxuICB0YXJnZXQ6IFQgJiBEZWJ1Z2dhYmxlXG4gIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yXG4gIHByb3BlcnR5S2V5OiBzdHJpbmdcbn1cblxudHlwZSBDYWxsVHJhY2VyQXJncyA9IHtcbiAgdGFyZ2V0OiBhbnlcbiAgcHJvcGVydHlLZXk6IHN0cmluZ1xuICBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvclxuICBhcmdzOiBBcnJheTxhbnk+XG59XG5cbmNvbnN0IEFTWU5DX0lERU5USUZJRVIgPSAnYXN5bmMnXG5cbmV4cG9ydCBmdW5jdGlvbiBMb2c8VCwgUmVzdWx0PihvcHRpb25zOiBUcmFjZU9wdGlvbnM8VCwgUmVzdWx0PiA9IHt9KSB7XG4gIHJldHVybiBUcmFjZTxULCBSZXN1bHQ+KHsgbGV2ZWw6ICdsb2cnLCAuLi5vcHRpb25zIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFjZTxULCBSZXN1bHQ+KG9wdGlvbnM6IFRyYWNlT3B0aW9uczxULCBSZXN1bHQ+ID0ge30pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgICBjb25zdCBtZXRob2QgPSBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWVcbiAgICBjb25zdCBpc1Byb21pc2UgPSBtZXRob2QudG9TdHJpbmcoKS5pbmNsdWRlcyhBU1lOQ19JREVOVElGSUVSKVxuICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICBvcHRpb25zLFxuICAgICAgbWV0aG9kLFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXksXG4gICAgICBwcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgfVxuXG4gICAgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlID0gaXNQcm9taXNlID8gcHJvbWlzZVRyYWNlcihhcmdzKSA6IGZ1bmN0aW9uVHJhY2VyKGFyZ3MpXG5cbiAgICByZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yXG4gIH1cbn1cblxuY29uc3QgdHJhY2VDYWxsID0gKHsgdGFyZ2V0LCBwcm9wZXJ0eUtleSwgcHJvcGVydHlEZXNjcmlwdG9yLCBhcmdzIH06IENhbGxUcmFjZXJBcmdzKTogRGVidWdIZWxwZXIgPT4ge1xuICBpZiAoIXRhcmdldC5kZWJ1ZykgdGFyZ2V0LmRlYnVnID0gRGVidWdIZWxwZXIuZm9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG5cbiAgcmV0dXJuIHRhcmdldC5kZWJ1Zy5wdXNoKHByb3BlcnR5S2V5KS50cmFjZSgnY2FsbGVkJywgeyB0YXJnZXQsIHByb3BlcnR5S2V5LCBwcm9wZXJ0eURlc2NyaXB0b3IsIGFyZ3MgfSlcbn1cblxuY29uc3QgcHJvbWlzZVRyYWNlciA9IGZ1bmN0aW9uIDxULCBSZXN1bHQ+KHsgb3B0aW9ucywgbWV0aG9kLCBwcm9wZXJ0eUtleSwgcHJvcGVydHlEZXNjcmlwdG9yIH06IFRyYWNlcjxULCBSZXN1bHQ+KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJnczogQXJyYXk8YW55Pik6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGRlYnVnID0gdHJhY2VDYWxsKHsgdGFyZ2V0OiB0aGlzLCBwcm9wZXJ0eURlc2NyaXB0b3IsIHByb3BlcnR5S2V5LCBhcmdzIH0pXG5cbiAgICAgIGlmIChnZXQob3B0aW9ucywgJ2xldmVsJywgJycpID09PSAnbG9nJykge1xuICAgICAgICBkZWJ1Zy53aXRoKCdwYXJhbXMnKS5sb2coYXJncylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1ldGhvZFxuICAgICAgICAuYXBwbHkodGhpcywgYXJncylcbiAgICAgICAgLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuY2FsbGJhY2tGbikge1xuICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFja0ZuKHsgdGFyZ2V0OiB0aGlzLCByZXN1bHQsIGFyZ3MsIG5hbWVzcGFjZTogW3Byb3BlcnR5S2V5XSB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChnZXQob3B0aW9ucywgJ2xldmVsJywgJycpID09PSAnbG9nJykge1xuICAgICAgICAgICAgZGVidWcud2l0aCgncmV0dXJucycpLmxvZyhyZXN1bHQgPT09IHVuZGVmaW5lZCA/ICd2b2lkJyA6IHJlc3VsdClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgZGVidWcuZXJyb3IoZXJyb3IsIC4uLmFyZ3MpXG4gICAgICAgICAgZGVidWcud2l0aCgnc3RhY2snKS5lcnJvcihlcnJvci5zdGFjaykucG9wKClcblxuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpXG4gICAgICAgIH0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gZGVidWcudHJhY2UoJ2ZpbmFsbHknLCB7IGFyZ3MgfSkucG9wKClcbiAgICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbmNvbnN0IGZ1bmN0aW9uVHJhY2VyID0gZnVuY3Rpb24gPFQsIFJlc3VsdD4oe1xuICBvcHRpb25zLFxuICB0YXJnZXQsXG4gIG1ldGhvZCxcbiAgcHJvcGVydHlLZXksXG4gIHByb3BlcnR5RGVzY3JpcHRvcixcbn06IFRyYWNlcjxULCBSZXN1bHQ+KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJnczogQXJyYXk8YW55Pik6IGFueSB7XG4gICAgY29uc3QgZGVidWcgPSB0cmFjZUNhbGwoeyB0YXJnZXQ6IHRoaXMgfHwgdGFyZ2V0LCBwcm9wZXJ0eURlc2NyaXB0b3IsIHByb3BlcnR5S2V5LCBhcmdzIH0pXG5cbiAgICBpZiAoZ2V0KG9wdGlvbnMsICdsZXZlbCcsICcnKSA9PT0gJ2xvZycpIHtcbiAgICAgIGRlYnVnLndpdGgoJ3BhcmFtcycpLmxvZyhhcmdzKVxuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IGFueVxuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKVxuXG4gICAgICBpZiAob3B0aW9ucy5jYWxsYmFja0ZuKSBvcHRpb25zLmNhbGxiYWNrRm4oeyB0YXJnZXQ6IHRoaXMsIHJlc3VsdCwgYXJncywgbmFtZXNwYWNlOiBbcHJvcGVydHlLZXldIH0pXG5cbiAgICAgIGlmIChnZXQob3B0aW9ucywgJ2xldmVsJywgJycpID09PSAnbG9nJykge1xuICAgICAgICBkZWJ1Zy53aXRoKCdyZXR1cm5zJykubG9nKHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gJ3ZvaWQnIDogcmVzdWx0KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlYnVnLmVycm9yKGVycm9yLCAuLi5hcmdzKS5wb3AoKVxuXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWJ1Zy50cmFjZSgnZmluYWxseScsIHsgYXJncyB9KS5wb3AoKVxuICAgIH1cbiAgfVxufVxuIl19