angular-odata 0.126.0 → 0.128.0

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 (283) hide show
  1. package/esm2022/lib/annotations.mjs +140 -0
  2. package/esm2022/lib/api.mjs +211 -166
  3. package/esm2022/lib/cache/cache.mjs +1 -1
  4. package/esm2022/lib/cache/memory.mjs +1 -1
  5. package/esm2022/lib/client.mjs +8 -48
  6. package/esm2022/lib/constants.mjs +4 -1
  7. package/esm2022/lib/index.mjs +3 -1
  8. package/esm2022/lib/loaders.mjs +23 -17
  9. package/esm2022/lib/metadata/csdl/csdl-annotation.mjs +95 -0
  10. package/esm2022/lib/metadata/csdl/csdl-entity-container.mjs +27 -0
  11. package/esm2022/lib/metadata/csdl/csdl-entity-set.mjs +24 -0
  12. package/esm2022/lib/metadata/csdl/csdl-enum-type.mjs +37 -0
  13. package/esm2022/lib/metadata/csdl/csdl-function-action.mjs +94 -0
  14. package/esm2022/lib/metadata/csdl/csdl-navigation-property-binding.mjs +7 -0
  15. package/esm2022/lib/metadata/csdl/csdl-reference.mjs +23 -0
  16. package/esm2022/lib/metadata/csdl/csdl-schema.mjs +39 -0
  17. package/esm2022/lib/metadata/csdl/csdl-singleton.mjs +15 -0
  18. package/esm2022/lib/metadata/csdl/csdl-structural-property.mjs +70 -0
  19. package/esm2022/lib/metadata/csdl/csdl-structured-type.mjs +92 -0
  20. package/esm2022/lib/metadata/csdl/csdl-type-definition.mjs +15 -0
  21. package/esm2022/lib/metadata/index.mjs +3 -0
  22. package/esm2022/lib/metadata/metadata.mjs +14 -0
  23. package/esm2022/lib/metadata/parser.mjs +563 -0
  24. package/esm2022/lib/models/collection.mjs +202 -207
  25. package/esm2022/lib/models/model.mjs +48 -52
  26. package/esm2022/lib/models/options.mjs +172 -137
  27. package/esm2022/lib/module.mjs +21 -8
  28. package/esm2022/lib/options.mjs +2 -1
  29. package/esm2022/lib/resources/index.mjs +2 -2
  30. package/esm2022/lib/resources/options.mjs +56 -0
  31. package/esm2022/lib/resources/path/handlers.mjs +14 -4
  32. package/esm2022/lib/resources/path/segments.mjs +29 -11
  33. package/esm2022/lib/resources/query/builder.mjs +14 -2
  34. package/esm2022/lib/resources/query/expressions/apply.mjs +236 -0
  35. package/esm2022/lib/resources/query/expressions/base.mjs +1 -1
  36. package/esm2022/lib/resources/query/expressions/compute.mjs +2 -2
  37. package/esm2022/lib/resources/query/expressions/count.mjs +6 -6
  38. package/esm2022/lib/resources/query/expressions/expand.mjs +7 -7
  39. package/esm2022/lib/resources/query/expressions/filter.mjs +6 -6
  40. package/esm2022/lib/resources/query/expressions/index.mjs +2 -1
  41. package/esm2022/lib/resources/query/expressions/orderby.mjs +3 -3
  42. package/esm2022/lib/resources/query/expressions/search.mjs +6 -6
  43. package/esm2022/lib/resources/query/expressions/select.mjs +6 -2
  44. package/esm2022/lib/resources/query/expressions/syntax.mjs +161 -8
  45. package/esm2022/lib/resources/query/handlers.mjs +89 -54
  46. package/esm2022/lib/resources/query/options.mjs +91 -77
  47. package/esm2022/lib/resources/request.mjs +5 -5
  48. package/esm2022/lib/resources/resource.mjs +118 -88
  49. package/esm2022/lib/resources/response.mjs +174 -0
  50. package/esm2022/lib/resources/types/action.mjs +29 -26
  51. package/esm2022/lib/resources/types/batch.mjs +18 -16
  52. package/esm2022/lib/resources/types/count.mjs +7 -7
  53. package/esm2022/lib/resources/types/entity-set.mjs +38 -25
  54. package/esm2022/lib/resources/types/entity.mjs +14 -11
  55. package/esm2022/lib/resources/types/function.mjs +25 -28
  56. package/esm2022/lib/resources/types/metadata.mjs +9 -5
  57. package/esm2022/lib/resources/types/navigation-property.mjs +37 -31
  58. package/esm2022/lib/resources/types/property.mjs +32 -50
  59. package/esm2022/lib/resources/types/reference.mjs +6 -7
  60. package/esm2022/lib/resources/types/singleton.mjs +11 -7
  61. package/esm2022/lib/resources/types/value.mjs +16 -12
  62. package/esm2022/lib/schema/callable.mjs +10 -10
  63. package/esm2022/lib/schema/element.mjs +15 -9
  64. package/esm2022/lib/schema/entity-container.mjs +4 -2
  65. package/esm2022/lib/schema/enum-type.mjs +6 -7
  66. package/esm2022/lib/schema/index.mjs +2 -1
  67. package/esm2022/lib/schema/parsers/callable.mjs +10 -7
  68. package/esm2022/lib/schema/parsers/edm.mjs +6 -4
  69. package/esm2022/lib/schema/parsers/enum-type.mjs +15 -8
  70. package/esm2022/lib/schema/parsers/structured-type.mjs +66 -55
  71. package/esm2022/lib/schema/schema.mjs +18 -34
  72. package/esm2022/lib/schema/singleton.mjs +9 -0
  73. package/esm2022/lib/schema/structured-type.mjs +18 -23
  74. package/esm2022/lib/services/base.mjs +4 -4
  75. package/esm2022/lib/services/entity-set.mjs +12 -2
  76. package/esm2022/lib/services/entity.mjs +2 -2
  77. package/esm2022/lib/services/factory.mjs +22 -11
  78. package/esm2022/lib/services/singleton.mjs +8 -2
  79. package/esm2022/lib/settings.mjs +7 -99
  80. package/esm2022/lib/types.mjs +12 -1
  81. package/esm2022/lib/utils/http.mjs +8 -6
  82. package/fesm2022/angular-odata.mjs +7413 -6579
  83. package/fesm2022/angular-odata.mjs.map +1 -1
  84. package/lib/{resources/responses/annotations.d.ts → annotations.d.ts} +3 -2
  85. package/lib/api.d.ts +29 -26
  86. package/lib/cache/memory.d.ts +1 -1
  87. package/lib/client.d.ts +0 -20
  88. package/lib/constants.d.ts +3 -0
  89. package/lib/index.d.ts +1 -0
  90. package/lib/loaders.d.ts +7 -1
  91. package/lib/metadata/csdl/csdl-annotation.d.ts +123 -0
  92. package/lib/metadata/csdl/csdl-entity-container.d.ts +26 -0
  93. package/lib/metadata/csdl/csdl-entity-set.d.ts +20 -0
  94. package/lib/metadata/csdl/csdl-enum-type.d.ts +29 -0
  95. package/lib/metadata/csdl/csdl-function-action.d.ts +105 -0
  96. package/lib/metadata/csdl/csdl-navigation-property-binding.d.ts +8 -0
  97. package/lib/metadata/csdl/csdl-reference.d.ts +30 -0
  98. package/lib/metadata/csdl/csdl-schema.d.ts +34 -0
  99. package/lib/metadata/csdl/csdl-singleton.d.ts +16 -0
  100. package/lib/metadata/csdl/csdl-structural-property.d.ts +70 -0
  101. package/lib/metadata/csdl/csdl-structured-type.d.ts +73 -0
  102. package/lib/metadata/csdl/csdl-type-definition.d.ts +22 -0
  103. package/lib/metadata/index.d.ts +2 -0
  104. package/lib/metadata/metadata.d.ts +10 -0
  105. package/lib/{resources/responses/metadata.d.ts → metadata/parser.d.ts} +19 -7
  106. package/lib/models/collection.d.ts +23 -12
  107. package/lib/models/model.d.ts +19 -19
  108. package/lib/models/options.d.ts +43 -27
  109. package/lib/module.d.ts +2 -1
  110. package/lib/options.d.ts +5 -0
  111. package/lib/resources/index.d.ts +1 -1
  112. package/lib/resources/{responses/options.d.ts → options.d.ts} +2 -2
  113. package/lib/resources/path/handlers.d.ts +4 -2
  114. package/lib/resources/path/segments.d.ts +13 -1
  115. package/lib/resources/query/builder.d.ts +6 -5
  116. package/lib/resources/query/expressions/apply.d.ts +125 -0
  117. package/lib/resources/query/expressions/base.d.ts +1 -1
  118. package/lib/resources/query/expressions/compute.d.ts +4 -4
  119. package/lib/resources/query/expressions/count.d.ts +3 -3
  120. package/lib/resources/query/expressions/expand.d.ts +8 -8
  121. package/lib/resources/query/expressions/filter.d.ts +3 -3
  122. package/lib/resources/query/expressions/index.d.ts +1 -0
  123. package/lib/resources/query/expressions/orderby.d.ts +7 -6
  124. package/lib/resources/query/expressions/search.d.ts +2 -2
  125. package/lib/resources/query/expressions/select.d.ts +4 -3
  126. package/lib/resources/query/expressions/syntax.d.ts +77 -4
  127. package/lib/resources/query/handlers.d.ts +32 -9
  128. package/lib/resources/query/options.d.ts +20 -10
  129. package/lib/resources/resource.d.ts +32 -16
  130. package/lib/resources/{responses/response.d.ts → response.d.ts} +17 -5
  131. package/lib/resources/types/action.d.ts +12 -10
  132. package/lib/resources/types/batch.d.ts +12 -6
  133. package/lib/resources/types/count.d.ts +1 -5
  134. package/lib/resources/types/entity-set.d.ts +13 -6
  135. package/lib/resources/types/entity.d.ts +3 -4
  136. package/lib/resources/types/function.d.ts +11 -11
  137. package/lib/resources/types/metadata.d.ts +1 -1
  138. package/lib/resources/types/navigation-property.d.ts +13 -7
  139. package/lib/resources/types/property.d.ts +15 -8
  140. package/lib/resources/types/reference.d.ts +2 -4
  141. package/lib/resources/types/singleton.d.ts +4 -6
  142. package/lib/resources/types/value.d.ts +2 -6
  143. package/lib/schema/callable.d.ts +5 -7
  144. package/lib/schema/element.d.ts +11 -4
  145. package/lib/schema/entity-container.d.ts +2 -0
  146. package/lib/schema/enum-type.d.ts +4 -7
  147. package/lib/schema/index.d.ts +1 -0
  148. package/lib/schema/parsers/callable.d.ts +7 -8
  149. package/lib/schema/parsers/enum-type.d.ts +15 -5
  150. package/lib/schema/parsers/structured-type.d.ts +6 -8
  151. package/lib/schema/schema.d.ts +6 -9
  152. package/lib/schema/singleton.d.ts +10 -0
  153. package/lib/schema/structured-type.d.ts +5 -8
  154. package/lib/services/entity-set.d.ts +7 -3
  155. package/lib/services/factory.d.ts +14 -2
  156. package/lib/services/singleton.d.ts +4 -2
  157. package/lib/settings.d.ts +0 -10
  158. package/lib/types.d.ts +23 -3
  159. package/lib/utils/http.d.ts +1 -1
  160. package/package.json +5 -1
  161. package/schematics/apigen/angular/api-config.d.ts +15 -0
  162. package/schematics/apigen/angular/api-config.js +34 -0
  163. package/schematics/apigen/angular/api-config.js.map +1 -0
  164. package/schematics/apigen/angular/base.d.ts +51 -0
  165. package/schematics/apigen/angular/base.js +200 -0
  166. package/schematics/apigen/angular/base.js.map +1 -0
  167. package/schematics/apigen/angular/entity.d.ts +24 -0
  168. package/schematics/apigen/angular/entity.js +71 -0
  169. package/schematics/apigen/angular/entity.js.map +1 -0
  170. package/schematics/apigen/angular/enum.d.ts +25 -0
  171. package/schematics/apigen/angular/enum.js +56 -0
  172. package/schematics/apigen/angular/enum.js.map +1 -0
  173. package/schematics/apigen/angular/import.d.ts +6 -0
  174. package/schematics/apigen/angular/import.js +18 -0
  175. package/schematics/apigen/angular/import.js.map +1 -0
  176. package/schematics/apigen/angular/module.d.ts +18 -0
  177. package/schematics/apigen/angular/module.js +41 -0
  178. package/schematics/apigen/angular/module.js.map +1 -0
  179. package/schematics/apigen/angular/service.d.ts +20 -0
  180. package/schematics/apigen/angular/service.js +76 -0
  181. package/schematics/apigen/angular/service.js.map +1 -0
  182. package/schematics/apigen/files/api-config/__fileName__.ts +9 -0
  183. package/schematics/apigen/files/entity/__fileName__.ts +7 -0
  184. package/schematics/apigen/files/entitycontainer-service/__fileName__.ts +18 -0
  185. package/schematics/apigen/files/entityset-service/__fileName__.ts +27 -0
  186. package/schematics/apigen/files/enum/__fileName__.ts +4 -0
  187. package/schematics/apigen/files/index/__fileName__.ts +2 -0
  188. package/schematics/apigen/files/module/__fileName__.ts +9 -0
  189. package/schematics/apigen/files/singleton-service/__fileName__.ts +18 -0
  190. package/schematics/apigen/index.d.ts +3 -0
  191. package/schematics/apigen/index.js +106 -0
  192. package/schematics/apigen/index.js.map +1 -0
  193. package/schematics/apigen/metadata/csdl/csdl-annotation.d.ts +120 -0
  194. package/schematics/apigen/metadata/csdl/csdl-annotation.js +98 -0
  195. package/schematics/apigen/metadata/csdl/csdl-annotation.js.map +1 -0
  196. package/schematics/apigen/metadata/csdl/csdl-entity-container.d.ts +26 -0
  197. package/schematics/apigen/metadata/csdl/csdl-entity-container.js +30 -0
  198. package/schematics/apigen/metadata/csdl/csdl-entity-container.js.map +1 -0
  199. package/schematics/apigen/metadata/csdl/csdl-entity-set.d.ts +20 -0
  200. package/schematics/apigen/metadata/csdl/csdl-entity-set.js +26 -0
  201. package/schematics/apigen/metadata/csdl/csdl-entity-set.js.map +1 -0
  202. package/schematics/apigen/metadata/csdl/csdl-enum-type.d.ts +28 -0
  203. package/schematics/apigen/metadata/csdl/csdl-enum-type.js +33 -0
  204. package/schematics/apigen/metadata/csdl/csdl-enum-type.js.map +1 -0
  205. package/schematics/apigen/metadata/csdl/csdl-function-action.d.ts +103 -0
  206. package/schematics/apigen/metadata/csdl/csdl-function-action.js +84 -0
  207. package/schematics/apigen/metadata/csdl/csdl-function-action.js.map +1 -0
  208. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.d.ts +8 -0
  209. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js +11 -0
  210. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js.map +1 -0
  211. package/schematics/apigen/metadata/csdl/csdl-reference.d.ts +30 -0
  212. package/schematics/apigen/metadata/csdl/csdl-reference.js +29 -0
  213. package/schematics/apigen/metadata/csdl/csdl-reference.js.map +1 -0
  214. package/schematics/apigen/metadata/csdl/csdl-schema.d.ts +32 -0
  215. package/schematics/apigen/metadata/csdl/csdl-schema.js +26 -0
  216. package/schematics/apigen/metadata/csdl/csdl-schema.js.map +1 -0
  217. package/schematics/apigen/metadata/csdl/csdl-singleton.d.ts +18 -0
  218. package/schematics/apigen/metadata/csdl/csdl-singleton.js +25 -0
  219. package/schematics/apigen/metadata/csdl/csdl-singleton.js.map +1 -0
  220. package/schematics/apigen/metadata/csdl/csdl-structural-property.d.ts +63 -0
  221. package/schematics/apigen/metadata/csdl/csdl-structural-property.js +50 -0
  222. package/schematics/apigen/metadata/csdl/csdl-structural-property.js.map +1 -0
  223. package/schematics/apigen/metadata/csdl/csdl-structured-type.d.ts +64 -0
  224. package/schematics/apigen/metadata/csdl/csdl-structured-type.js +71 -0
  225. package/schematics/apigen/metadata/csdl/csdl-structured-type.js.map +1 -0
  226. package/schematics/apigen/metadata/csdl/csdl-type-definition.d.ts +22 -0
  227. package/schematics/apigen/metadata/csdl/csdl-type-definition.js +19 -0
  228. package/schematics/apigen/metadata/csdl/csdl-type-definition.js.map +1 -0
  229. package/schematics/apigen/metadata/index.d.ts +1 -0
  230. package/schematics/apigen/metadata/index.js +18 -0
  231. package/schematics/apigen/metadata/index.js.map +1 -0
  232. package/schematics/apigen/metadata/metadata.d.ts +11 -0
  233. package/schematics/apigen/metadata/metadata.js +30 -0
  234. package/schematics/apigen/metadata/metadata.js.map +1 -0
  235. package/schematics/apigen/metadata/parser.d.ts +110 -0
  236. package/schematics/apigen/metadata/parser.js +568 -0
  237. package/schematics/apigen/metadata/parser.js.map +1 -0
  238. package/schematics/apigen/schema.d.ts +8 -0
  239. package/schematics/apigen/schema.js +3 -0
  240. package/schematics/apigen/schema.js.map +1 -0
  241. package/schematics/apigen/schema.json +36 -0
  242. package/schematics/apigen/utils.d.ts +1 -0
  243. package/schematics/apigen/utils.js +75 -0
  244. package/schematics/apigen/utils.js.map +1 -0
  245. package/schematics/collection.json +14 -0
  246. package/schematics/ng-add/index.d.ts +2 -0
  247. package/schematics/ng-add/index.js +13 -0
  248. package/schematics/ng-add/index.js.map +1 -0
  249. package/schematics/random.d.ts +1 -0
  250. package/schematics/random.js +604 -0
  251. package/schematics/random.js.map +1 -0
  252. package/esm2022/lib/resources/responses/annotations.mjs +0 -137
  253. package/esm2022/lib/resources/responses/csdl/csdl-annotation.mjs +0 -33
  254. package/esm2022/lib/resources/responses/csdl/csdl-entity-container.mjs +0 -11
  255. package/esm2022/lib/resources/responses/csdl/csdl-entity-set.mjs +0 -9
  256. package/esm2022/lib/resources/responses/csdl/csdl-enum-type.mjs +0 -15
  257. package/esm2022/lib/resources/responses/csdl/csdl-function-action.mjs +0 -56
  258. package/esm2022/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +0 -7
  259. package/esm2022/lib/resources/responses/csdl/csdl-reference.mjs +0 -23
  260. package/esm2022/lib/resources/responses/csdl/csdl-schema.mjs +0 -18
  261. package/esm2022/lib/resources/responses/csdl/csdl-singleton.mjs +0 -8
  262. package/esm2022/lib/resources/responses/csdl/csdl-structural-property.mjs +0 -39
  263. package/esm2022/lib/resources/responses/csdl/csdl-structured-type.mjs +0 -34
  264. package/esm2022/lib/resources/responses/csdl/csdl-type-definition.mjs +0 -14
  265. package/esm2022/lib/resources/responses/index.mjs +0 -5
  266. package/esm2022/lib/resources/responses/metadata.mjs +0 -547
  267. package/esm2022/lib/resources/responses/options.mjs +0 -56
  268. package/esm2022/lib/resources/responses/response.mjs +0 -174
  269. package/esm2022/lib/resources/responses/types.mjs +0 -2
  270. package/lib/resources/responses/csdl/csdl-annotation.d.ts +0 -27
  271. package/lib/resources/responses/csdl/csdl-entity-container.d.ts +0 -12
  272. package/lib/resources/responses/csdl/csdl-entity-set.d.ts +0 -8
  273. package/lib/resources/responses/csdl/csdl-enum-type.d.ts +0 -12
  274. package/lib/resources/responses/csdl/csdl-function-action.d.ts +0 -49
  275. package/lib/resources/responses/csdl/csdl-navigation-property-binding.d.ts +0 -5
  276. package/lib/resources/responses/csdl/csdl-reference.d.ts +0 -18
  277. package/lib/resources/responses/csdl/csdl-schema.d.ts +0 -20
  278. package/lib/resources/responses/csdl/csdl-singleton.d.ts +0 -7
  279. package/lib/resources/responses/csdl/csdl-structural-property.d.ts +0 -31
  280. package/lib/resources/responses/csdl/csdl-structured-type.d.ts +0 -27
  281. package/lib/resources/responses/csdl/csdl-type-definition.d.ts +0 -11
  282. package/lib/resources/responses/index.d.ts +0 -4
  283. package/lib/resources/responses/types.d.ts +0 -13
@@ -1,547 +0,0 @@
1
- import { CsdlAction, CsdlActionImport, CsdlFunction, CsdlFunctionImport, CsdlParameter, CsdlReturnType, } from './csdl/csdl-function-action';
2
- import { CsdlAnnotation, CsdlAnnotations, CsdlTerm, } from './csdl/csdl-annotation';
3
- import { CsdlComplexType, CsdlEntityType, CsdlKey, CsdlPropertyRef, } from './csdl/csdl-structured-type';
4
- import { CsdlEnumMember, CsdlEnumType } from './csdl/csdl-enum-type';
5
- import { CsdlInclude, CsdlIncludeAnnotations, CsdlReference, } from './csdl/csdl-reference';
6
- import { CsdlNavigationProperty, CsdlOnDelete, CsdlProperty, CsdlReferentialConstraint, } from './csdl/csdl-structural-property';
7
- import { CsdlEntityContainer } from './csdl/csdl-entity-container';
8
- import { CsdlEntitySet } from './csdl/csdl-entity-set';
9
- import { CsdlNavigationPropertyBinding } from './csdl/csdl-navigation-property-binding';
10
- import { CsdlSchema } from './csdl/csdl-schema';
11
- import { CsdlSingleton } from './csdl/csdl-singleton';
12
- import { CsdlTypeDefinition } from './csdl/csdl-type-definition';
13
- import { VERSION_4_0 } from '../../constants';
14
- var FieldType;
15
- (function (FieldType) {
16
- FieldType[FieldType["ATTRIBUTE"] = 0] = "ATTRIBUTE";
17
- FieldType[FieldType["TAG"] = 1] = "TAG";
18
- })(FieldType || (FieldType = {}));
19
- class Field {
20
- constructor(name, fieldType) {
21
- this.name = name;
22
- this.fieldType = fieldType;
23
- }
24
- }
25
- export class ODataMetadata {
26
- // TAGS
27
- static { this.TAG_EDMX = 'edmx:Edmx'; }
28
- static { this.TAG_DATA_SERVICES = 'edmx:DataServices'; }
29
- static { this.TAG_REFERENCE = 'edmx:Reference'; }
30
- static { this.TAG_INCLUDE = 'edmx:Include'; }
31
- static { this.TAG_INCLUDE_ANNOTATIONS = 'edmx:IncludeAnnotations'; }
32
- static { this.TAG_TERM = 'Term'; }
33
- static { this.TAG_ANNOTATIONS = 'Annotations'; }
34
- static { this.TAG_ANNOTATION = 'Annotation'; }
35
- static { this.TAG_SCHEMA = 'Schema'; }
36
- static { this.TAG_ENUM_TYPE = 'EnumType'; }
37
- static { this.TAG_MEMBER = 'Member'; }
38
- static { this.TAG_COMPLEX_TYPE = 'ComplexType'; }
39
- static { this.TAG_ENTITY_TYPE = 'EntityType'; }
40
- static { this.TAG_PROPERTY = 'Property'; }
41
- static { this.TAG_KEY = 'Key'; }
42
- static { this.TAG_PROPERTY_REF = 'PropertyRef'; }
43
- static { this.TAG_NAVIGATION_PROPERTY = 'NavigationProperty'; }
44
- static { this.TAG_REFERENTIAL_CONSTRAINT = 'ReferentialConstraint'; }
45
- static { this.TAG_ON_DELETE = 'OnDelete'; }
46
- static { this.TAG_FUNCTION = 'Function'; }
47
- static { this.TAG_RETURN_TYPE = 'ReturnType'; }
48
- static { this.TAG_PARAMETER = 'Parameter'; }
49
- static { this.TAG_ACTION = 'Action'; }
50
- static { this.TAG_ENTITY_CONTAINER = 'EntityContainer'; }
51
- static { this.TAG_ENTITY_SET = 'EntitySet'; }
52
- static { this.TAG_SINGLETON = 'Singleton'; }
53
- static { this.TAG_FUNCTION_IMPORT = 'FunctionImport'; }
54
- static { this.TAG_ACTION_IMPORT = 'ActionImport'; }
55
- static { this.TAG_NAVIGATION_PROPERTY_BINDING = 'NavigationPropertyBinding'; }
56
- static { this.TAG_TYPE_DEFINITION = 'TypeDefinition'; }
57
- // ATTRIBUTES
58
- static { this.ATTRIBUTE_VERSION = 'Version'; }
59
- static { this.ATTRIBUTE_URI = 'Uri'; }
60
- static { this.ATTRIBUTE_ALIAS = 'Alias'; }
61
- static { this.ATTRIBUTE_NAMESPACE = 'Namespace'; }
62
- static { this.ATTRIBUTE_TERM_NAMESPACE = 'TermNamespace'; }
63
- static { this.ATTRIBUTE_QUALIFIER = 'Qualifier'; }
64
- static { this.ATTRIBUTE_TARGET_NAMESPACE = 'TargetNamespace'; }
65
- static { this.ATTRIBUTE_TERM = 'Term'; }
66
- static { this.ATTRIBUTE_NAME = 'Name'; }
67
- static { this.ATTRIBUTE_VALUE = 'Value'; }
68
- static { this.ATTRIBUTE_BASE_TYPE = 'BaseType'; }
69
- static { this.ATTRIBUTE_OPEN_TYPE = 'OpenType'; }
70
- static { this.ATTRIBUTE_TYPE = 'Type'; }
71
- static { this.ATTRIBUTE_NULLABLE = 'Nullable'; }
72
- static { this.ATTRIBUTE_MAX_LENGTH = 'MaxLength'; }
73
- static { this.ATTRIBUTE_PRECISION = 'Precision'; }
74
- static { this.ATTRIBUTE_SCALE = 'Scale'; }
75
- static { this.ATTRIBUTE_UNICODE = 'Unicode'; }
76
- static { this.ATTRIBUTE_SRID = 'SRID'; }
77
- static { this.ATTRIBUTE_DEFAULT_VALUE = 'DefaultValue'; }
78
- static { this.ATTRIBUTE_PARTNER = 'Partner'; }
79
- static { this.ATTRIBUTE_PROPERTY = 'Property'; }
80
- static { this.ATTRIBUTE_REFERENCED_PROPERTY = 'ReferencedProperty'; }
81
- static { this.ATTRIBUTE_HAS_STREAM = 'HasStream'; }
82
- static { this.ATTRIBUTE_CONTAINS_TARGET = 'ContainsTarget'; }
83
- static { this.ATTRIBUTE_IS_BOUND = 'IsBound'; }
84
- static { this.ATTRIBUTE_ENTITY_SET_PATH = 'EntitySetPath'; }
85
- static { this.ATTRIBUTE_IS_COMPOSABLE = 'IsComposable'; }
86
- static { this.ATTRIBUTE_ENTITY_TYPE = 'EntityType'; }
87
- static { this.ATTRIBUTE_PATH = 'Path'; }
88
- static { this.ATTRIBUTE_TARGET = 'Target'; }
89
- static { this.ATTRIBUTE_FUNCTION = 'Function'; }
90
- static { this.ATTRIBUTE_ACTION = 'Action'; }
91
- static { this.ATTRIBUTE_ENTITY_SET = 'EntitySet'; }
92
- static { this.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT = 'IncludeInServiceDocument'; }
93
- static { this.ATTRIBUTE_ABSTRACT = 'Abstract'; }
94
- static { this.ATTRIBUTE_UNDERLYING_TYPE = 'UnderlyingType'; }
95
- static { this.ATTRIBUTE_IS_FLAGS = 'IsFlags'; }
96
- static { this.ATTRIBUTE_EXTENDS = 'Extends'; }
97
- static { this.ATTRIBUTE_BASE_TERM = 'BaseTerm'; }
98
- static { this.ATTRIBUTE_APPLIES_TO = 'AppliesTo'; }
99
- constructor(xml) {
100
- try {
101
- const parser = new DOMParser();
102
- const document = parser.parseFromString(xml, 'text/xml');
103
- this.checkVersion(document);
104
- this.version = this.getFieldValueByAttribute(new Field(ODataMetadata.ATTRIBUTE_VERSION, FieldType.ATTRIBUTE), document.documentElement.attributes);
105
- this.references = this.getObjects(document.documentElement, ODataMetadata.TAG_REFERENCE, [
106
- new Field(ODataMetadata.ATTRIBUTE_URI, FieldType.ATTRIBUTE),
107
- new Field(ODataMetadata.TAG_INCLUDE, FieldType.TAG),
108
- new Field(ODataMetadata.TAG_INCLUDE_ANNOTATIONS, FieldType.TAG),
109
- new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
110
- ]);
111
- const dataServices = document.documentElement.getElementsByTagName(ODataMetadata.TAG_DATA_SERVICES)[0];
112
- this.schemas = this.getObjects(dataServices, ODataMetadata.TAG_SCHEMA, [
113
- new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),
114
- new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),
115
- new Field(ODataMetadata.TAG_ENUM_TYPE, FieldType.TAG),
116
- new Field(ODataMetadata.TAG_COMPLEX_TYPE, FieldType.TAG),
117
- new Field(ODataMetadata.TAG_ENTITY_TYPE, FieldType.TAG),
118
- new Field(ODataMetadata.TAG_FUNCTION, FieldType.TAG),
119
- new Field(ODataMetadata.TAG_ACTION, FieldType.TAG),
120
- new Field(ODataMetadata.TAG_ENTITY_CONTAINER, FieldType.TAG),
121
- new Field(ODataMetadata.TAG_TYPE_DEFINITION, FieldType.TAG),
122
- new Field(ODataMetadata.TAG_TERM, FieldType.TAG),
123
- new Field(ODataMetadata.TAG_ANNOTATIONS, FieldType.TAG),
124
- new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
125
- ]);
126
- }
127
- catch (error) {
128
- throw new Error('Unable to parse metadata, ' + error);
129
- }
130
- }
131
- checkVersion(document) {
132
- // check version
133
- const attributes = document.documentElement.attributes;
134
- if (!attributes) {
135
- throw new Error('OData version is not specified in the metadata');
136
- }
137
- const attr = attributes.getNamedItem('Version');
138
- if (attr === null) {
139
- throw new Error('OData version is not specified in the metadata');
140
- }
141
- const odataVersion = attr?.nodeValue;
142
- if (odataVersion !== VERSION_4_0) {
143
- throw new Error('OData version "' + odataVersion + '" is not supported');
144
- }
145
- }
146
- getObjects(parentElement, tag, fieldNames) {
147
- let objects = [];
148
- const children = parentElement.children;
149
- for (let index = 0; index < children.length; index++) {
150
- const element = children.item(index);
151
- if (!element || element.nodeName !== tag) {
152
- continue;
153
- }
154
- const attributes = element.attributes;
155
- const fieldValues = this.getFieldValues(fieldNames, attributes, element);
156
- switch (tag) {
157
- case ODataMetadata.TAG_REFERENCE:
158
- objects.push(new CsdlReference(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
159
- break;
160
- case ODataMetadata.TAG_INCLUDE:
161
- objects.push(new CsdlInclude(fieldValues[0], fieldValues[1]));
162
- break;
163
- case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:
164
- objects.push(new CsdlIncludeAnnotations(fieldValues[0], fieldValues[1], fieldValues[2]));
165
- break;
166
- case ODataMetadata.TAG_TERM:
167
- objects.push(new CsdlTerm(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7], fieldValues[8], fieldValues[9]));
168
- break;
169
- case ODataMetadata.TAG_ANNOTATIONS:
170
- objects.push(new CsdlAnnotations(fieldValues[0], fieldValues[1], fieldValues[2]));
171
- break;
172
- case ODataMetadata.TAG_ANNOTATION:
173
- objects.push(new CsdlAnnotation(fieldValues[0], fieldValues[1]));
174
- break;
175
- case ODataMetadata.TAG_SCHEMA:
176
- objects.push(new CsdlSchema(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7], fieldValues[8], fieldValues[9], fieldValues[10], fieldValues[11]));
177
- break;
178
- case ODataMetadata.TAG_ENUM_TYPE:
179
- objects.push(new CsdlEnumType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
180
- break;
181
- case ODataMetadata.TAG_COMPLEX_TYPE:
182
- objects.push(new CsdlComplexType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]));
183
- break;
184
- case ODataMetadata.TAG_ENTITY_TYPE:
185
- objects.push(new CsdlEntityType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7]));
186
- break;
187
- case ODataMetadata.TAG_FUNCTION:
188
- objects.push(new CsdlFunction(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]));
189
- break;
190
- case ODataMetadata.TAG_MEMBER:
191
- objects.push(new CsdlEnumMember(fieldValues[0], fieldValues[1]));
192
- break;
193
- case ODataMetadata.TAG_PROPERTY:
194
- objects.push(new CsdlProperty(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7], fieldValues[8]));
195
- break;
196
- case ODataMetadata.TAG_PROPERTY_REF:
197
- objects.push(new CsdlPropertyRef(fieldValues[0], fieldValues[1]));
198
- break;
199
- case ODataMetadata.TAG_NAVIGATION_PROPERTY:
200
- objects.push(new CsdlNavigationProperty(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6]));
201
- break;
202
- case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:
203
- objects.push(new CsdlReferentialConstraint(fieldValues[0], fieldValues[1]));
204
- break;
205
- case ODataMetadata.TAG_PARAMETER:
206
- objects.push(new CsdlParameter(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6]));
207
- break;
208
- case ODataMetadata.TAG_ACTION:
209
- objects.push(new CsdlAction(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4]));
210
- break;
211
- case ODataMetadata.TAG_ENTITY_SET:
212
- objects.push(new CsdlEntitySet(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
213
- break;
214
- case ODataMetadata.TAG_SINGLETON:
215
- objects.push(new CsdlSingleton(fieldValues[0], fieldValues[1], fieldValues[2]));
216
- break;
217
- case ODataMetadata.TAG_FUNCTION_IMPORT:
218
- objects.push(new CsdlFunctionImport(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3]));
219
- break;
220
- case ODataMetadata.TAG_ACTION_IMPORT:
221
- objects.push(new CsdlActionImport(fieldValues[0], fieldValues[1], fieldValues[2]));
222
- break;
223
- case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:
224
- objects.push(new CsdlNavigationPropertyBinding(fieldValues[0], fieldValues[1]));
225
- break;
226
- case ODataMetadata.TAG_TYPE_DEFINITION:
227
- objects.push(new CsdlTypeDefinition(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5], fieldValues[6], fieldValues[7]));
228
- break;
229
- default:
230
- throw new Error('Unknwon tag:' + tag);
231
- }
232
- }
233
- return objects;
234
- }
235
- getObject(parentElement, tag, fieldNames) {
236
- let object;
237
- const children = parentElement.children;
238
- let element;
239
- for (let index = 0; index < children.length; index++) {
240
- if (children && children.item(index)?.nodeName === tag) {
241
- if (element !== undefined && element !== null) {
242
- throw new Error('Expected one ' + tag);
243
- }
244
- element = children.item(index);
245
- }
246
- }
247
- if (element !== undefined && element !== null) {
248
- const attributes = element.attributes;
249
- const fieldValues = this.getFieldValues(fieldNames, attributes, element);
250
- switch (tag) {
251
- case ODataMetadata.TAG_KEY:
252
- object = new CsdlKey(fieldValues[0]);
253
- break;
254
- case ODataMetadata.TAG_RETURN_TYPE:
255
- object = new CsdlReturnType(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]);
256
- break;
257
- case ODataMetadata.TAG_ENTITY_CONTAINER:
258
- object = new CsdlEntityContainer(fieldValues[0], fieldValues[1], fieldValues[2], fieldValues[3], fieldValues[4], fieldValues[5]);
259
- break;
260
- case ODataMetadata.TAG_ON_DELETE:
261
- object = new CsdlOnDelete(fieldValues[0]);
262
- break;
263
- default:
264
- throw new Error('Unknwon tag:' + tag);
265
- }
266
- }
267
- return object;
268
- }
269
- getFieldValues(fields, attributes, element) {
270
- const fieldValues = [];
271
- for (const field of fields) {
272
- if (field.fieldType === FieldType.TAG) {
273
- fieldValues.push(this.getFieldValueByTag(field, element));
274
- }
275
- else if (field.fieldType === FieldType.ATTRIBUTE) {
276
- fieldValues.push(this.getFieldValueByAttribute(field, attributes));
277
- }
278
- else {
279
- throw new Error('Unknown field type: ' + field.fieldType);
280
- }
281
- }
282
- return fieldValues;
283
- }
284
- getFieldValueByAttribute(field, attributes) {
285
- switch (field.name) {
286
- case ODataMetadata.ATTRIBUTE_VERSION:
287
- case ODataMetadata.ATTRIBUTE_URI:
288
- case ODataMetadata.ATTRIBUTE_NAMESPACE:
289
- case ODataMetadata.ATTRIBUTE_ALIAS:
290
- case ODataMetadata.ATTRIBUTE_TERM_NAMESPACE:
291
- case ODataMetadata.ATTRIBUTE_TERM:
292
- case ODataMetadata.ATTRIBUTE_QUALIFIER:
293
- case ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE:
294
- case ODataMetadata.ATTRIBUTE_NAME:
295
- case ODataMetadata.ATTRIBUTE_TYPE:
296
- case ODataMetadata.ATTRIBUTE_SRID:
297
- case ODataMetadata.ATTRIBUTE_DEFAULT_VALUE:
298
- case ODataMetadata.ATTRIBUTE_PARTNER:
299
- case ODataMetadata.ATTRIBUTE_PROPERTY:
300
- case ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY:
301
- case ODataMetadata.ATTRIBUTE_BASE_TYPE:
302
- case ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH:
303
- case ODataMetadata.ATTRIBUTE_ENTITY_TYPE:
304
- case ODataMetadata.ATTRIBUTE_PATH:
305
- case ODataMetadata.ATTRIBUTE_TARGET:
306
- case ODataMetadata.ATTRIBUTE_FUNCTION:
307
- case ODataMetadata.ATTRIBUTE_ACTION:
308
- case ODataMetadata.ATTRIBUTE_ENTITY_SET:
309
- case ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE:
310
- case ODataMetadata.ATTRIBUTE_EXTENDS:
311
- case ODataMetadata.ATTRIBUTE_BASE_TERM:
312
- case ODataMetadata.ATTRIBUTE_APPLIES_TO:
313
- return this.getAttributeValue(attributes, field.name);
314
- case ODataMetadata.ATTRIBUTE_NULLABLE:
315
- case ODataMetadata.ATTRIBUTE_UNICODE:
316
- case ODataMetadata.ATTRIBUTE_OPEN_TYPE:
317
- case ODataMetadata.ATTRIBUTE_HAS_STREAM:
318
- case ODataMetadata.ATTRIBUTE_IS_BOUND:
319
- case ODataMetadata.ATTRIBUTE_IS_COMPOSABLE:
320
- case ODataMetadata.ATTRIBUTE_CONTAINS_TARGET:
321
- case ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT:
322
- case ODataMetadata.ATTRIBUTE_ABSTRACT:
323
- case ODataMetadata.ATTRIBUTE_IS_FLAGS:
324
- return this.propertyValueToBoolean(this.getAttributeValue(attributes, field.name));
325
- case ODataMetadata.ATTRIBUTE_VALUE:
326
- case ODataMetadata.ATTRIBUTE_MAX_LENGTH:
327
- case ODataMetadata.ATTRIBUTE_PRECISION:
328
- case ODataMetadata.ATTRIBUTE_SCALE:
329
- return this.propertyValueToNumber(this.getAttributeValue(attributes, field.name));
330
- default:
331
- throw new Error('Unknwon attribute:' + field.name);
332
- }
333
- }
334
- getFieldValueByTag(field, element) {
335
- switch (field.name) {
336
- case ODataMetadata.TAG_INCLUDE:
337
- return this.getObjects(element, field.name, [
338
- new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),
339
- new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),
340
- ]);
341
- case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:
342
- return this.getObjects(element, field.name, [
343
- new Field(ODataMetadata.ATTRIBUTE_TERM_NAMESPACE, FieldType.ATTRIBUTE),
344
- new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),
345
- new Field(ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE, FieldType.ATTRIBUTE),
346
- ]);
347
- case ODataMetadata.TAG_TERM:
348
- return this.getObjects(element, field.name, [
349
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
350
- new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
351
- new Field(ODataMetadata.ATTRIBUTE_BASE_TERM, FieldType.ATTRIBUTE),
352
- new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),
353
- new Field(ODataMetadata.ATTRIBUTE_APPLIES_TO, FieldType.ATTRIBUTE),
354
- new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
355
- new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
356
- new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
357
- new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
358
- new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
359
- ]);
360
- case ODataMetadata.TAG_ANNOTATIONS:
361
- return this.getObjects(element, field.name, [
362
- new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),
363
- new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
364
- new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),
365
- ]);
366
- case ODataMetadata.TAG_ANNOTATION:
367
- return this.getObjects(element, field.name, [
368
- new Field(ODataMetadata.ATTRIBUTE_TERM, FieldType.ATTRIBUTE),
369
- new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),
370
- ]);
371
- case ODataMetadata.TAG_ENUM_TYPE:
372
- return this.getObjects(element, field.name, [
373
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
374
- new Field(ODataMetadata.TAG_MEMBER, FieldType.TAG),
375
- new Field(ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE, FieldType.ATTRIBUTE),
376
- new Field(ODataMetadata.ATTRIBUTE_IS_FLAGS, FieldType.ATTRIBUTE),
377
- ]);
378
- case ODataMetadata.TAG_COMPLEX_TYPE:
379
- return this.getObjects(element, field.name, [
380
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
381
- new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),
382
- new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),
383
- new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),
384
- new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),
385
- new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),
386
- ]);
387
- case ODataMetadata.TAG_ENTITY_TYPE:
388
- return this.getObjects(element, field.name, [
389
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
390
- new Field(ODataMetadata.TAG_KEY, FieldType.TAG),
391
- new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),
392
- new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),
393
- new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),
394
- new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),
395
- new Field(ODataMetadata.ATTRIBUTE_HAS_STREAM, FieldType.ATTRIBUTE),
396
- new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),
397
- ]);
398
- case ODataMetadata.TAG_FUNCTION:
399
- return this.getObjects(element, field.name, [
400
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
401
- new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),
402
- new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),
403
- new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH, FieldType.ATTRIBUTE),
404
- new Field(ODataMetadata.ATTRIBUTE_IS_COMPOSABLE, FieldType.ATTRIBUTE),
405
- new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),
406
- ]);
407
- case ODataMetadata.TAG_MEMBER:
408
- return this.getObjects(element, field.name, [
409
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
410
- new Field(ODataMetadata.ATTRIBUTE_VALUE, FieldType.ATTRIBUTE),
411
- ]);
412
- case ODataMetadata.TAG_PROPERTY:
413
- return this.getObjects(element, field.name, [
414
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
415
- new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
416
- new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
417
- new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
418
- new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
419
- new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
420
- new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),
421
- new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
422
- new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),
423
- ]);
424
- case ODataMetadata.TAG_KEY:
425
- return this.getObject(element, field.name, [
426
- new Field(ODataMetadata.TAG_PROPERTY_REF, FieldType.TAG),
427
- ]);
428
- case ODataMetadata.TAG_PROPERTY_REF:
429
- return this.getObjects(element, field.name, [
430
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
431
- new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),
432
- ]);
433
- case ODataMetadata.TAG_NAVIGATION_PROPERTY:
434
- return this.getObjects(element, field.name, [
435
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
436
- new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
437
- new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
438
- new Field(ODataMetadata.ATTRIBUTE_PARTNER, FieldType.ATTRIBUTE),
439
- new Field(ODataMetadata.ATTRIBUTE_CONTAINS_TARGET, FieldType.ATTRIBUTE),
440
- new Field(ODataMetadata.TAG_REFERENTIAL_CONSTRAINT, FieldType.TAG),
441
- new Field(ODataMetadata.TAG_ON_DELETE, FieldType.TAG),
442
- ]);
443
- case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:
444
- return this.getObjects(element, field.name, [
445
- new Field(ODataMetadata.ATTRIBUTE_PROPERTY, FieldType.ATTRIBUTE),
446
- new Field(ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY, FieldType.ATTRIBUTE),
447
- ]);
448
- case ODataMetadata.TAG_ON_DELETE:
449
- return this.getObject(element, field.name, [
450
- new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),
451
- ]);
452
- case ODataMetadata.TAG_PARAMETER:
453
- return this.getObjects(element, field.name, [
454
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
455
- new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
456
- new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
457
- new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
458
- new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
459
- new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
460
- new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
461
- ]);
462
- case ODataMetadata.TAG_RETURN_TYPE:
463
- return this.getObject(element, field.name, [
464
- new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
465
- new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),
466
- new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
467
- new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
468
- new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
469
- new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
470
- ]);
471
- case ODataMetadata.TAG_ACTION:
472
- return this.getObjects(element, field.name, [
473
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
474
- new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),
475
- new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),
476
- new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH, FieldType.ATTRIBUTE),
477
- new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),
478
- ]);
479
- case ODataMetadata.TAG_ENTITY_CONTAINER:
480
- return this.getObject(element, field.name, [
481
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
482
- new Field(ODataMetadata.ATTRIBUTE_EXTENDS, FieldType.ATTRIBUTE),
483
- new Field(ODataMetadata.TAG_ENTITY_SET, FieldType.TAG),
484
- new Field(ODataMetadata.TAG_SINGLETON, FieldType.TAG),
485
- new Field(ODataMetadata.TAG_FUNCTION_IMPORT, FieldType.TAG),
486
- new Field(ODataMetadata.TAG_ACTION_IMPORT, FieldType.TAG),
487
- ]);
488
- case ODataMetadata.TAG_ENTITY_SET:
489
- return this.getObjects(element, field.name, [
490
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
491
- new Field(ODataMetadata.ATTRIBUTE_ENTITY_TYPE, FieldType.ATTRIBUTE),
492
- new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING, FieldType.TAG),
493
- new Field(ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT, FieldType.ATTRIBUTE),
494
- ]);
495
- case ODataMetadata.TAG_SINGLETON:
496
- return this.getObjects(element, field.name, [
497
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
498
- new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),
499
- new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING, FieldType.TAG),
500
- ]);
501
- case ODataMetadata.TAG_FUNCTION_IMPORT:
502
- return this.getObjects(element, field.name, [
503
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
504
- new Field(ODataMetadata.ATTRIBUTE_FUNCTION, FieldType.ATTRIBUTE),
505
- new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),
506
- new Field(ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT, FieldType.ATTRIBUTE),
507
- ]);
508
- case ODataMetadata.TAG_ACTION_IMPORT:
509
- return this.getObjects(element, field.name, [
510
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
511
- new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),
512
- new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),
513
- ]);
514
- case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:
515
- return this.getObjects(element, field.name, [
516
- new Field(ODataMetadata.ATTRIBUTE_PATH, FieldType.ATTRIBUTE),
517
- new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),
518
- ]);
519
- case ODataMetadata.TAG_TYPE_DEFINITION:
520
- return this.getObjects(element, field.name, [
521
- new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),
522
- new Field(ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE, FieldType.ATTRIBUTE),
523
- new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),
524
- new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),
525
- new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),
526
- new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),
527
- new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),
528
- new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),
529
- ]);
530
- default:
531
- throw new Error('Unknwon tag:' + field.name);
532
- }
533
- }
534
- getAttributeValue(attributes, attributeName) {
535
- const attribute = attributes.getNamedItem(attributeName);
536
- return attribute !== null && attribute.nodeValue
537
- ? attribute.nodeValue
538
- : undefined;
539
- }
540
- propertyValueToNumber(attributeValue) {
541
- return attributeValue !== undefined ? Number(attributeValue) : undefined;
542
- }
543
- propertyValueToBoolean(attributeValue) {
544
- return attributeValue !== undefined ? attributeValue === 'true' : false;
545
- }
546
- }
547
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3Jlc3BvbnNlcy9tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixjQUFjLEdBQ2YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGVBQWUsRUFDZixRQUFRLEdBQ1QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxPQUFPLEVBQ1AsZUFBZSxHQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUNMLFdBQVcsRUFDWCxzQkFBc0IsRUFDdEIsYUFBYSxHQUNkLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osWUFBWSxFQUNaLHlCQUF5QixHQUMxQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFB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LENBQUMsQ0FBQyxjQUFjLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENzZGxBY3Rpb24sXG4gIENzZGxBY3Rpb25JbXBvcnQsXG4gIENzZGxGdW5jdGlvbixcbiAgQ3NkbEZ1bmN0aW9uSW1wb3J0LFxuICBDc2RsUGFyYW1ldGVyLFxuICBDc2RsUmV0dXJuVHlwZSxcbn0gZnJvbSAnLi9jc2RsL2NzZGwtZnVuY3Rpb24tYWN0aW9uJztcbmltcG9ydCB7XG4gIENzZGxBbm5vdGF0aW9uLFxuICBDc2RsQW5ub3RhdGlvbnMsXG4gIENzZGxUZXJtLFxufSBmcm9tICcuL2NzZGwvY3NkbC1hbm5vdGF0aW9uJztcbmltcG9ydCB7XG4gIENzZGxDb21wbGV4VHlwZSxcbiAgQ3NkbEVudGl0eVR5cGUsXG4gIENzZGxLZXksXG4gIENzZGxQcm9wZXJ0eVJlZixcbn0gZnJvbSAnLi9jc2RsL2NzZGwtc3RydWN0dXJlZC10eXBlJztcbmltcG9ydCB7IENzZGxFbnVtTWVtYmVyLCBDc2RsRW51bVR5cGUgfSBmcm9tICcuL2NzZGwvY3NkbC1lbnVtLXR5cGUnO1xuaW1wb3J0IHtcbiAgQ3NkbEluY2x1ZGUsXG4gIENzZGxJbmNsdWRlQW5ub3RhdGlvbnMsXG4gIENzZGxSZWZlcmVuY2UsXG59IGZyb20gJy4vY3NkbC9jc2RsLXJlZmVyZW5jZSc7XG5pbXBvcnQge1xuICBDc2RsTmF2aWdhdGlvblByb3BlcnR5LFxuICBDc2RsT25EZWxldGUsXG4gIENzZGxQcm9wZXJ0eSxcbiAgQ3NkbFJlZmVyZW50aWFsQ29uc3RyYWludCxcbn0gZnJvbSAnLi9jc2RsL2NzZGwtc3RydWN0dXJhbC1wcm9wZXJ0eSc7XG5cbmltcG9ydCB7IENzZGxFbnRpdHlDb250YWluZXIgfSBmcm9tICcuL2NzZGwvY3NkbC1lbnRpdHktY29udGFpbmVyJztcbmltcG9ydCB7IENzZGxFbnRpdHlTZXQgfSBmcm9tICcuL2NzZGwvY3NkbC1lbnRpdHktc2V0JztcbmltcG9ydCB7IENzZGxOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIH0gZnJvbSAnLi9jc2RsL2NzZGwtbmF2aWdhdGlvbi1wcm9wZXJ0eS1iaW5kaW5nJztcbmltcG9ydCB7IENzZGxTY2hlbWEgfSBmcm9tICcuL2NzZGwvY3NkbC1zY2hlbWEnO1xuaW1wb3J0IHsgQ3NkbFNpbmdsZXRvbiB9IGZyb20gJy4vY3NkbC9jc2RsLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBDc2RsVHlwZURlZmluaXRpb24gfSBmcm9tICcuL2NzZGwvY3NkbC10eXBlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgVkVSU0lPTl80XzAgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5lbnVtIEZpZWxkVHlwZSB7XG4gIEFUVFJJQlVURSxcbiAgVEFHLFxufVxuXG5jbGFzcyBGaWVsZCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIGZpZWxkVHlwZTogRmllbGRUeXBlLFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YU1ldGFkYXRhIHtcbiAgLy8gVEFHU1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRURNWCA9ICdlZG14OkVkbXgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfREFUQV9TRVJWSUNFUyA9ICdlZG14OkRhdGFTZXJ2aWNlcyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19SRUZFUkVOQ0UgPSAnZWRteDpSZWZlcmVuY2UnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfSU5DTFVERSA9ICdlZG14OkluY2x1ZGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfSU5DTFVERV9BTk5PVEFUSU9OUyA9ICdlZG14OkluY2x1ZGVBbm5vdGF0aW9ucyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19URVJNID0gJ1Rlcm0nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfQU5OT1RBVElPTlMgPSAnQW5ub3RhdGlvbnMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfQU5OT1RBVElPTiA9ICdBbm5vdGF0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX1NDSEVNQSA9ICdTY2hlbWEnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRU5VTV9UWVBFID0gJ0VudW1UeXBlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX01FTUJFUiA9ICdNZW1iZXInO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfQ09NUExFWF9UWVBFID0gJ0NvbXBsZXhUeXBlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0VOVElUWV9UWVBFID0gJ0VudGl0eVR5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfUFJPUEVSVFkgPSAnUHJvcGVydHknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfS0VZID0gJ0tleSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19QUk9QRVJUWV9SRUYgPSAnUHJvcGVydHlSZWYnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfTkFWSUdBVElPTl9QUk9QRVJUWSA9ICdOYXZpZ2F0aW9uUHJvcGVydHknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfUkVGRVJFTlRJQUxfQ09OU1RSQUlOVCA9ICdSZWZlcmVudGlhbENvbnN0cmFpbnQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfT05fREVMRVRFID0gJ09uRGVsZXRlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0ZVTkNUSU9OID0gJ0Z1bmN0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX1JFVFVSTl9UWVBFID0gJ1JldHVyblR5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfUEFSQU1FVEVSID0gJ1BhcmFtZXRlcic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19BQ1RJT04gPSAnQWN0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0VOVElUWV9DT05UQUlORVIgPSAnRW50aXR5Q29udGFpbmVyJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0VOVElUWV9TRVQgPSAnRW50aXR5U2V0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX1NJTkdMRVRPTiA9ICdTaW5nbGV0b24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfRlVOQ1RJT05fSU1QT1JUID0gJ0Z1bmN0aW9uSW1wb3J0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0FDVElPTl9JTVBPUlQgPSAnQWN0aW9uSW1wb3J0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX05BVklHQVRJT05fUFJPUEVSVFlfQklORElORyA9XG4gICAgJ05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfVFlQRV9ERUZJTklUSU9OID0gJ1R5cGVEZWZpbml0aW9uJztcblxuICAvLyBBVFRSSUJVVEVTXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9WRVJTSU9OID0gJ1ZlcnNpb24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVVJJID0gJ1VyaSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9BTElBUyA9ICdBbGlhcyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9OQU1FU1BBQ0UgPSAnTmFtZXNwYWNlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1RFUk1fTkFNRVNQQUNFID0gJ1Rlcm1OYW1lc3BhY2UnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfUVVBTElGSUVSID0gJ1F1YWxpZmllcic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9UQVJHRVRfTkFNRVNQQUNFID0gJ1RhcmdldE5hbWVzcGFjZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9URVJNID0gJ1Rlcm0nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfTkFNRSA9ICdOYW1lJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1ZBTFVFID0gJ1ZhbHVlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0JBU0VfVFlQRSA9ICdCYXNlVHlwZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9PUEVOX1RZUEUgPSAnT3BlblR5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVFlQRSA9ICdUeXBlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX05VTExBQkxFID0gJ051bGxhYmxlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX01BWF9MRU5HVEggPSAnTWF4TGVuZ3RoJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1BSRUNJU0lPTiA9ICdQcmVjaXNpb24nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfU0NBTEUgPSAnU2NhbGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVU5JQ09ERSA9ICdVbmljb2RlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX1NSSUQgPSAnU1JJRCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9ERUZBVUxUX1ZBTFVFID0gJ0RlZmF1bHRWYWx1ZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9QQVJUTkVSID0gJ1BhcnRuZXInO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfUFJPUEVSVFkgPSAnUHJvcGVydHknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfUkVGRVJFTkNFRF9QUk9QRVJUWSA9ICdSZWZlcmVuY2VkUHJvcGVydHknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfSEFTX1NUUkVBTSA9ICdIYXNTdHJlYW0nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfQ09OVEFJTlNfVEFSR0VUID0gJ0NvbnRhaW5zVGFyZ2V0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0lTX0JPVU5EID0gJ0lzQm91bmQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfRU5USVRZX1NFVF9QQVRIID0gJ0VudGl0eVNldFBhdGgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfSVNfQ09NUE9TQUJMRSA9ICdJc0NvbXBvc2FibGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfRU5USVRZX1RZUEUgPSAnRW50aXR5VHlwZSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9QQVRIID0gJ1BhdGgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfVEFSR0VUID0gJ1RhcmdldCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9GVU5DVElPTiA9ICdGdW5jdGlvbic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9BQ1RJT04gPSAnQWN0aW9uJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0VOVElUWV9TRVQgPSAnRW50aXR5U2V0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0lOQ0xVREVfSU5fU0VSVklDRV9ET0NVTUVOVCA9XG4gICAgJ0luY2x1ZGVJblNlcnZpY2VEb2N1bWVudCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9BQlNUUkFDVCA9ICdBYnN0cmFjdCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9VTkRFUkxZSU5HX1RZUEUgPSAnVW5kZXJseWluZ1R5cGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfSVNfRkxBR1MgPSAnSXNGbGFncyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFUVFJJQlVURV9FWFRFTkRTID0gJ0V4dGVuZHMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBVFRSSUJVVEVfQkFTRV9URVJNID0gJ0Jhc2VUZXJtJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0FQUExJRVNfVE8gPSAnQXBwbGllc1RvJztcblxuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVmZXJlbmNlczogQ3NkbFJlZmVyZW5jZVtdO1xuICBwdWJsaWMgcmVhZG9ubHkgc2NoZW1hczogQ3NkbFNjaGVtYVtdO1xuXG4gIGNvbnN0cnVjdG9yKHhtbDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlcjogRE9NUGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgY29uc3QgZG9jdW1lbnQ6IERvY3VtZW50ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4bWwsICd0ZXh0L3htbCcpO1xuXG4gICAgICB0aGlzLmNoZWNrVmVyc2lvbihkb2N1bWVudCk7XG5cbiAgICAgIHRoaXMudmVyc2lvbiA9IHRoaXMuZ2V0RmllbGRWYWx1ZUJ5QXR0cmlidXRlKFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVkVSU0lPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRyaWJ1dGVzLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5yZWZlcmVuY2VzID0gdGhpcy5nZXRPYmplY3RzKFxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICAgIE9EYXRhTWV0YWRhdGEuVEFHX1JFRkVSRU5DRSxcbiAgICAgICAgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9VUkksIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19JTkNMVURFLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfSU5DTFVERV9BTk5PVEFUSU9OUywgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT04sIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBdLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGF0YVNlcnZpY2VzOiBFbGVtZW50ID1cbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFxuICAgICAgICAgIE9EYXRhTWV0YWRhdGEuVEFHX0RBVEFfU0VSVklDRVMsXG4gICAgICAgIClbMF07XG4gICAgICB0aGlzLnNjaGVtYXMgPSB0aGlzLmdldE9iamVjdHMoZGF0YVNlcnZpY2VzLCBPRGF0YU1ldGFkYXRhLlRBR19TQ0hFTUEsIFtcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUVTUEFDRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BTElBUywgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19FTlVNX1RZUEUsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQ09NUExFWF9UWVBFLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0VOVElUWV9UWVBFLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0ZVTkNUSU9OLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FDVElPTiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19FTlRJVFlfQ09OVEFJTkVSLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1RZUEVfREVGSU5JVElPTiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19URVJNLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT05TLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT04sIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHBhcnNlIG1ldGFkYXRhLCAnICsgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja1ZlcnNpb24oZG9jdW1lbnQ6IERvY3VtZW50KSB7XG4gICAgLy8gY2hlY2sgdmVyc2lvblxuICAgIGNvbnN0IGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRyaWJ1dGVzO1xuICAgIGlmICghYXR0cmlidXRlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPRGF0YSB2ZXJzaW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1ldGFkYXRhJyk7XG4gICAgfVxuICAgIGNvbnN0IGF0dHI6IEF0dHIgfCBudWxsID0gYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ1ZlcnNpb24nKTtcbiAgICBpZiAoYXR0ciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPRGF0YSB2ZXJzaW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1ldGFkYXRhJyk7XG4gICAgfVxuICAgIGNvbnN0IG9kYXRhVmVyc2lvbiA9IGF0dHI/Lm5vZGVWYWx1ZTtcbiAgICBpZiAob2RhdGFWZXJzaW9uICE9PSBWRVJTSU9OXzRfMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPRGF0YSB2ZXJzaW9uIFwiJyArIG9kYXRhVmVyc2lvbiArICdcIiBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldE9iamVjdHMoXG4gICAgcGFyZW50RWxlbWVudDogRWxlbWVudCxcbiAgICB0YWc6IHN0cmluZyxcbiAgICBmaWVsZE5hbWVzOiBGaWVsZFtdLFxuICApOiBhbnlbXSB7XG4gICAgbGV0IG9iamVjdHM6IGFueVtdID0gW107XG5cbiAgICBjb25zdCBjaGlsZHJlbjogSFRNTENvbGxlY3Rpb24gPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjaGlsZHJlbi5pdGVtKGluZGV4KTtcblxuICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQubm9kZU5hbWUgIT09IHRhZykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXR0cmlidXRlczogTmFtZWROb2RlTWFwID0gZWxlbWVudC5hdHRyaWJ1dGVzO1xuICAgICAgY29uc3QgZmllbGRWYWx1ZXM6IGFueVtdID0gdGhpcy5nZXRGaWVsZFZhbHVlcyhcbiAgICAgICAgZmllbGROYW1lcyxcbiAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICk7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1JFRkVSRU5DRTpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbFJlZmVyZW5jZShcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfSU5DTFVERTpcbiAgICAgICAgICBvYmplY3RzLnB1c2gobmV3IENzZGxJbmNsdWRlKGZpZWxkVmFsdWVzWzBdLCBmaWVsZFZhbHVlc1sxXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0lOQ0xVREVfQU5OT1RBVElPTlM6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxJbmNsdWRlQW5ub3RhdGlvbnMoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfVEVSTTpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbFRlcm0oXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzZdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s3XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbOF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzldLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT05TOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsQW5ub3RhdGlvbnMoZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdLCBmaWVsZFZhbHVlc1syXSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BTk5PVEFUSU9OOlxuICAgICAgICAgIG9iamVjdHMucHVzaChuZXcgQ3NkbEFubm90YXRpb24oZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfU0NIRU1BOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsU2NoZW1hKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s2XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbN10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzhdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s5XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMTBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxMV0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5VTV9UWVBFOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsRW51bVR5cGUoXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0NPTVBMRVhfVFlQRTpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbENvbXBsZXhUeXBlKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0VOVElUWV9UWVBFOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsRW50aXR5VHlwZShcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s1XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzddLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0ZVTkNUSU9OOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsRnVuY3Rpb24oXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNV0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfTUVNQkVSOlxuICAgICAgICAgIG9iamVjdHMucHVzaChuZXcgQ3NkbEVudW1NZW1iZXIoZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUFJPUEVSVFk6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxQcm9wZXJ0eShcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s1XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzddLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s4XSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19QUk9QRVJUWV9SRUY6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKG5ldyBDc2RsUHJvcGVydHlSZWYoZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfTkFWSUdBVElPTl9QUk9QRVJUWTpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbE5hdmlnYXRpb25Qcm9wZXJ0eShcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s1XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNl0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUkVGRVJFTlRJQUxfQ09OU1RSQUlOVDpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbFJlZmVyZW50aWFsQ29uc3RyYWludChmaWVsZFZhbHVlc1swXSwgZmllbGRWYWx1ZXNbMV0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUEFSQU1FVEVSOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsUGFyYW1ldGVyKFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s2XSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BQ1RJT046XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxBY3Rpb24oXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19FTlRJVFlfU0VUOlxuICAgICAgICAgIG9iamVjdHMucHVzaChcbiAgICAgICAgICAgIG5ldyBDc2RsRW50aXR5U2V0KFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1swXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1szXSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19TSU5HTEVUT046XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxTaW5nbGV0b24oZmllbGRWYWx1ZXNbMF0sIGZpZWxkVmFsdWVzWzFdLCBmaWVsZFZhbHVlc1syXSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19GVU5DVElPTl9JTVBPUlQ6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxGdW5jdGlvbkltcG9ydChcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfQUNUSU9OX0lNUE9SVDpcbiAgICAgICAgICBvYmplY3RzLnB1c2goXG4gICAgICAgICAgICBuZXcgQ3NkbEFjdGlvbkltcG9ydChcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZX0JJTkRJTkc6XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKGZpZWxkVmFsdWVzWzBdLCBmaWVsZFZhbHVlc1sxXSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19UWVBFX0RFRklOSVRJT046XG4gICAgICAgICAgb2JqZWN0cy5wdXNoKFxuICAgICAgICAgICAgbmV3IENzZGxUeXBlRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzFdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzRdLFxuICAgICAgICAgICAgICBmaWVsZFZhbHVlc1s1XSxcbiAgICAgICAgICAgICAgZmllbGRWYWx1ZXNbNl0sXG4gICAgICAgICAgICAgIGZpZWxkVmFsdWVzWzddLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbndvbiB0YWc6JyArIHRhZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdHM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0T2JqZWN0KFxuICAgIHBhcmVudEVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgZmllbGROYW1lczogRmllbGRbXSxcbiAgKTogYW55IHtcbiAgICBsZXQgb2JqZWN0OiBhbnk7XG5cbiAgICBjb25zdCBjaGlsZHJlbjogSFRNTENvbGxlY3Rpb24gPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuO1xuICAgIGxldCBlbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uaXRlbShpbmRleCk/Lm5vZGVOYW1lID09PSB0YWcpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBvbmUgJyArIHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudCA9IGNoaWxkcmVuLml0ZW0oaW5kZXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgYXR0cmlidXRlczogTmFtZWROb2RlTWFwID0gZWxlbWVudC5hdHRyaWJ1dGVzO1xuICAgICAgY29uc3QgZmllbGRWYWx1ZXM6IGFueVtdID0gdGhpcy5nZXRGaWVsZFZhbHVlcyhcbiAgICAgICAgZmllbGROYW1lcyxcbiAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICk7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0tFWTpcbiAgICAgICAgICBvYmplY3QgPSBuZXcgQ3NkbEtleShmaWVsZFZhbHVlc1swXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUkVUVVJOX1RZUEU6XG4gICAgICAgICAgb2JqZWN0ID0gbmV3IENzZGxSZXR1cm5UeXBlKFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbMF0sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1sxXSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzJdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbM10sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1s0XSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzVdLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX0NPTlRBSU5FUjpcbiAgICAgICAgICBvYmplY3QgPSBuZXcgQ3NkbEVudGl0eUNvbnRhaW5lcihcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzBdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbMV0sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1syXSxcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzWzNdLFxuICAgICAgICAgICAgZmllbGRWYWx1ZXNbNF0sXG4gICAgICAgICAgICBmaWVsZFZhbHVlc1s1XSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX09OX0RFTEVURTpcbiAgICAgICAgICBvYmplY3QgPSBuZXcgQ3NkbE9uRGVsZXRlKGZpZWxkVmFsdWVzWzBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua253b24gdGFnOicgKyB0YWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RmllbGRWYWx1ZXMoXG4gICAgZmllbGRzOiBGaWVsZFtdLFxuICAgIGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCxcbiAgICBlbGVtZW50OiBFbGVtZW50LFxuICApOiBhbnlbXSB7XG4gICAgY29uc3QgZmllbGRWYWx1ZXM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLlRBRykge1xuICAgICAgICBmaWVsZFZhbHVlcy5wdXNoKHRoaXMuZ2V0RmllbGRWYWx1ZUJ5VGFnKGZpZWxkLCBlbGVtZW50KSk7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkFUVFJJQlVURSkge1xuICAgICAgICBmaWVsZFZhbHVlcy5wdXNoKHRoaXMuZ2V0RmllbGRWYWx1ZUJ5QXR0cmlidXRlKGZpZWxkLCBhdHRyaWJ1dGVzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZmllbGQgdHlwZTogJyArIGZpZWxkLmZpZWxkVHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkVmFsdWVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEZpZWxkVmFsdWVCeUF0dHJpYnV0ZShcbiAgICBmaWVsZDogRmllbGQsXG4gICAgYXR0cmlidXRlczogTmFtZWROb2RlTWFwLFxuICApOiBhbnkge1xuICAgIHN3aXRjaCAoZmllbGQubmFtZSkge1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9WRVJTSU9OOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9VUkk6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUVTUEFDRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQUxJQVM6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RFUk1fTkFNRVNQQUNFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9URVJNOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9RVUFMSUZJRVI6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RBUkdFVF9OQU1FU1BBQ0U6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NSSUQ6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0RFRkFVTFRfVkFMVUU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BBUlRORVI6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BST1BFUlRZOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9SRUZFUkVOQ0VEX1BST1BFUlRZOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9CQVNFX1RZUEU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9TRVRfUEFUSDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRU5USVRZX1RZUEU6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BBVEg6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RBUkdFVDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRlVOQ1RJT046XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FDVElPTjpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRU5USVRZX1NFVDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5ERVJMWUlOR19UWVBFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9FWFRFTkRTOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9CQVNFX1RFUk06XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FQUExJRVNfVE86XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZXMsIGZpZWxkLm5hbWUpO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OVUxMQUJMRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5JQ09ERTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfT1BFTl9UWVBFOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9IQVNfU1RSRUFNOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JU19CT1VORDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSVNfQ09NUE9TQUJMRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQ09OVEFJTlNfVEFSR0VUOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JTkNMVURFX0lOX1NFUlZJQ0VfRE9DVU1FTlQ6XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FCU1RSQUNUOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JU19GTEFHUzpcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHlWYWx1ZVRvQm9vbGVhbihcbiAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZXMsIGZpZWxkLm5hbWUpLFxuICAgICAgICApO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9WQUxVRTpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTUFYX0xFTkdUSDpcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUFJFQ0lTSU9OOlxuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9TQ0FMRTpcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHlWYWx1ZVRvTnVtYmVyKFxuICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlcywgZmllbGQubmFtZSksXG4gICAgICAgICk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua253b24gYXR0cmlidXRlOicgKyBmaWVsZC5uYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RmllbGRWYWx1ZUJ5VGFnKGZpZWxkOiBGaWVsZCwgZWxlbWVudDogRWxlbWVudCk6IGFueVtdIHtcbiAgICBzd2l0Y2ggKGZpZWxkLm5hbWUpIHtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfSU5DTFVERTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUVTUEFDRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FMSUFTLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0lOQ0xVREVfQU5OT1RBVElPTlM6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RFUk1fTkFNRVNQQUNFLFxuICAgICAgICAgICAgRmllbGRUeXBlLkFUVFJJQlVURSxcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9RVUFMSUZJRVIsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RBUkdFVF9OQU1FU1BBQ0UsXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFLFxuICAgICAgICAgICksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19URVJNOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9CQVNFX1RFUk0sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9ERUZBVUxUX1ZBTFVFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQVBQTElFU19UTywgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05VTExBQkxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTUFYX0xFTkdUSCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BSRUNJU0lPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NDQUxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfU1JJRCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BTk5PVEFUSU9OUzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RBUkdFVCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX0FOTk9UQVRJT04sIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9RVUFMSUZJRVIsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfQU5OT1RBVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RFUk0sIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9RVUFMSUZJRVIsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5VTV9UWVBFOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX01FTUJFUiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5ERVJMWUlOR19UWVBFLFxuICAgICAgICAgICAgRmllbGRUeXBlLkFUVFJJQlVURSxcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JU19GTEFHUywgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19DT01QTEVYX1RZUEU6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfUFJPUEVSVFksIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQkFTRV9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfT1BFTl9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQUJTVFJBQ1QsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX1RZUEU6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfS0VZLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfUFJPUEVSVFksIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQkFTRV9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfT1BFTl9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSEFTX1NUUkVBTSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FCU1RSQUNULCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0ZVTkNUSU9OOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1JFVFVSTl9UWVBFLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSVNfQk9VTkQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9TRVRfUEFUSCxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEUsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSVNfQ09NUE9TQUJMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX1BBUkFNRVRFUiwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19NRU1CRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVkFMVUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfUFJPUEVSVFk6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05VTExBQkxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTUFYX0xFTkdUSCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BSRUNJU0lPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NDQUxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5JQ09ERSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NSSUQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9ERUZBVUxUX1ZBTFVFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0tFWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0KGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfUFJPUEVSVFlfUkVGLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1BST1BFUlRZX1JFRjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9BTElBUywgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OVUxMQUJMRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BBUlRORVIsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0NPTlRBSU5TX1RBUkdFVCxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEUsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfUkVGRVJFTlRJQUxfQ09OU1RSQUlOVCwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuVEFHX09OX0RFTEVURSwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19SRUZFUkVOVElBTF9DT05TVFJBSU5UOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfUFJPUEVSVFksIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1JFRkVSRU5DRURfUFJPUEVSVFksXG4gICAgICAgICAgICBGaWVsZFR5cGUuQVRUUklCVVRFLFxuICAgICAgICAgICksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19PTl9ERUxFVEU6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdChlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0FDVElPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19QQVJBTUVURVI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05VTExBQkxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTUFYX0xFTkdUSCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BSRUNJU0lPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NDQUxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfU1JJRCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19SRVRVUk5fVFlQRTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0KGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVFlQRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05VTExBQkxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTUFYX0xFTkdUSCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BSRUNJU0lPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NDQUxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfU1JJRCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19BQ1RJT046XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfUkVUVVJOX1RZUEUsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9JU19CT1VORCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRU5USVRZX1NFVF9QQVRILFxuICAgICAgICAgICAgRmllbGRUeXBlLkFUVFJJQlVURSxcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19QQVJBTUVURVIsIEZpZWxkVHlwZS5UQUcpLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfRU5USVRZX0NPTlRBSU5FUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0KGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VYVEVORFMsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19FTlRJVFlfU0VULCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfU0lOR0xFVE9OLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfRlVOQ1RJT05fSU1QT1JULCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5UQUdfQUNUSU9OX0lNUE9SVCwgRmllbGRUeXBlLlRBRyksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19FTlRJVFlfU0VUOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9UWVBFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoXG4gICAgICAgICAgICBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZX0JJTkRJTkcsXG4gICAgICAgICAgICBGaWVsZFR5cGUuVEFHLFxuICAgICAgICAgICksXG4gICAgICAgICAgbmV3IEZpZWxkKFxuICAgICAgICAgICAgT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfSU5DTFVERV9JTl9TRVJWSUNFX0RPQ1VNRU5ULFxuICAgICAgICAgICAgRmllbGRUeXBlLkFUVFJJQlVURSxcbiAgICAgICAgICApLFxuICAgICAgICBdKTtcbiAgICAgIGNhc2UgT0RhdGFNZXRhZGF0YS5UQUdfU0lOR0xFVE9OOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RzKGVsZW1lbnQsIGZpZWxkLm5hbWUsIFtcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTkFNRSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1RZUEUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuVEFHX05BVklHQVRJT05fUFJPUEVSVFlfQklORElORyxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5UQUcsXG4gICAgICAgICAgKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0ZVTkNUSU9OX0lNUE9SVDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9GVU5DVElPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0VOVElUWV9TRVQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX0lOQ0xVREVfSU5fU0VSVklDRV9ET0NVTUVOVCxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEUsXG4gICAgICAgICAgKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX0FDVElPTl9JTVBPUlQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9OQU1FLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfQUNUSU9OLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfRU5USVRZX1NFVCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSBPRGF0YU1ldGFkYXRhLlRBR19OQVZJR0FUSU9OX1BST1BFUlRZX0JJTkRJTkc6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdHMoZWxlbWVudCwgZmllbGQubmFtZSwgW1xuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLkFUVFJJQlVURV9QQVRILCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVEFSR0VULCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlIE9EYXRhTWV0YWRhdGEuVEFHX1RZUEVfREVGSU5JVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyhlbGVtZW50LCBmaWVsZC5uYW1lLCBbXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX05BTUUsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChcbiAgICAgICAgICAgIE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1VOREVSTFlJTkdfVFlQRSxcbiAgICAgICAgICAgIEZpZWxkVHlwZS5BVFRSSUJVVEUsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfTUFYX0xFTkdUSCwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1BSRUNJU0lPTiwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NDQUxFLCBGaWVsZFR5cGUuQVRUUklCVVRFKSxcbiAgICAgICAgICBuZXcgRmllbGQoT0RhdGFNZXRhZGF0YS5BVFRSSUJVVEVfVU5JQ09ERSwgRmllbGRUeXBlLkFUVFJJQlVURSksXG4gICAgICAgICAgbmV3IEZpZWxkKE9EYXRhTWV0YWRhdGEuQVRUUklCVVRFX1NSSUQsIEZpZWxkVHlwZS5BVFRSSUJVVEUpLFxuICAgICAgICAgIG5ldyBGaWVsZChPRGF0YU1ldGFkYXRhLlRBR19BTk5PVEFUSU9OLCBGaWVsZFR5cGUuVEFHKSxcbiAgICAgICAgXSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua253b24gdGFnOicgKyBmaWVsZC5uYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlczogTmFtZWROb2RlTWFwLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGU6IEF0dHIgfCBudWxsID0gYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oYXR0cmlidXRlTmFtZSk7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZSAhPT0gbnVsbCAmJiBhdHRyaWJ1dGUubm9kZVZhbHVlXG4gICAgICA/IGF0dHJpYnV0ZS5ub2RlVmFsdWVcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3BlcnR5VmFsdWVUb051bWJlcihhdHRyaWJ1dGVWYWx1ZT86IHN0cmluZykge1xuICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZSAhPT0gdW5kZWZpbmVkID8gTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlVG9Cb29sZWFuKGF0dHJpYnV0ZVZhbHVlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlICE9PSB1bmRlZmluZWQgPyBhdHRyaWJ1dGVWYWx1ZSA9PT0gJ3RydWUnIDogZmFsc2U7XG4gIH1cbn1cbiJdfQ==