angular-odata 0.127.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 (274) hide show
  1. package/esm2022/lib/annotations.mjs +140 -0
  2. package/esm2022/lib/api.mjs +209 -164
  3. package/esm2022/lib/cache/cache.mjs +1 -1
  4. package/esm2022/lib/cache/memory.mjs +1 -1
  5. package/esm2022/lib/client.mjs +4 -44
  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 +98 -140
  25. package/esm2022/lib/models/model.mjs +38 -45
  26. package/esm2022/lib/models/options.mjs +127 -117
  27. package/esm2022/lib/module.mjs +3 -3
  28. package/esm2022/lib/resources/index.mjs +2 -2
  29. package/esm2022/lib/resources/options.mjs +56 -0
  30. package/esm2022/lib/resources/path/handlers.mjs +14 -4
  31. package/esm2022/lib/resources/path/segments.mjs +6 -4
  32. package/esm2022/lib/resources/query/builder.mjs +5 -5
  33. package/esm2022/lib/resources/query/expressions/apply.mjs +81 -14
  34. package/esm2022/lib/resources/query/expressions/base.mjs +1 -1
  35. package/esm2022/lib/resources/query/expressions/compute.mjs +1 -1
  36. package/esm2022/lib/resources/query/expressions/count.mjs +1 -1
  37. package/esm2022/lib/resources/query/expressions/expand.mjs +1 -1
  38. package/esm2022/lib/resources/query/expressions/filter.mjs +1 -1
  39. package/esm2022/lib/resources/query/expressions/orderby.mjs +2 -2
  40. package/esm2022/lib/resources/query/expressions/search.mjs +1 -1
  41. package/esm2022/lib/resources/query/expressions/select.mjs +5 -1
  42. package/esm2022/lib/resources/query/expressions/syntax.mjs +18 -7
  43. package/esm2022/lib/resources/query/handlers.mjs +1 -1
  44. package/esm2022/lib/resources/query/options.mjs +1 -1
  45. package/esm2022/lib/resources/request.mjs +5 -5
  46. package/esm2022/lib/resources/resource.mjs +107 -82
  47. package/esm2022/lib/resources/response.mjs +174 -0
  48. package/esm2022/lib/resources/types/action.mjs +29 -26
  49. package/esm2022/lib/resources/types/batch.mjs +1 -1
  50. package/esm2022/lib/resources/types/count.mjs +7 -7
  51. package/esm2022/lib/resources/types/entity-set.mjs +37 -24
  52. package/esm2022/lib/resources/types/entity.mjs +14 -11
  53. package/esm2022/lib/resources/types/function.mjs +25 -28
  54. package/esm2022/lib/resources/types/metadata.mjs +9 -5
  55. package/esm2022/lib/resources/types/navigation-property.mjs +36 -30
  56. package/esm2022/lib/resources/types/property.mjs +31 -49
  57. package/esm2022/lib/resources/types/reference.mjs +3 -4
  58. package/esm2022/lib/resources/types/singleton.mjs +11 -7
  59. package/esm2022/lib/resources/types/value.mjs +16 -12
  60. package/esm2022/lib/schema/callable.mjs +10 -10
  61. package/esm2022/lib/schema/element.mjs +15 -9
  62. package/esm2022/lib/schema/entity-container.mjs +4 -2
  63. package/esm2022/lib/schema/enum-type.mjs +6 -7
  64. package/esm2022/lib/schema/index.mjs +2 -1
  65. package/esm2022/lib/schema/parsers/callable.mjs +10 -7
  66. package/esm2022/lib/schema/parsers/edm.mjs +6 -4
  67. package/esm2022/lib/schema/parsers/enum-type.mjs +10 -10
  68. package/esm2022/lib/schema/parsers/structured-type.mjs +19 -19
  69. package/esm2022/lib/schema/schema.mjs +18 -34
  70. package/esm2022/lib/schema/singleton.mjs +9 -0
  71. package/esm2022/lib/schema/structured-type.mjs +18 -23
  72. package/esm2022/lib/services/base.mjs +1 -1
  73. package/esm2022/lib/services/entity-set.mjs +12 -2
  74. package/esm2022/lib/services/entity.mjs +2 -2
  75. package/esm2022/lib/services/factory.mjs +18 -7
  76. package/esm2022/lib/services/singleton.mjs +8 -2
  77. package/esm2022/lib/settings.mjs +7 -99
  78. package/esm2022/lib/types.mjs +1 -1
  79. package/esm2022/lib/utils/http.mjs +1 -1
  80. package/fesm2022/angular-odata.mjs +2286 -1951
  81. package/fesm2022/angular-odata.mjs.map +1 -1
  82. package/lib/{resources/responses/annotations.d.ts → annotations.d.ts} +2 -2
  83. package/lib/api.d.ts +29 -26
  84. package/lib/cache/memory.d.ts +1 -1
  85. package/lib/client.d.ts +0 -20
  86. package/lib/constants.d.ts +3 -0
  87. package/lib/index.d.ts +1 -0
  88. package/lib/loaders.d.ts +7 -1
  89. package/lib/metadata/csdl/csdl-annotation.d.ts +123 -0
  90. package/lib/metadata/csdl/csdl-entity-container.d.ts +26 -0
  91. package/lib/metadata/csdl/csdl-entity-set.d.ts +20 -0
  92. package/lib/metadata/csdl/csdl-enum-type.d.ts +29 -0
  93. package/lib/metadata/csdl/csdl-function-action.d.ts +105 -0
  94. package/lib/metadata/csdl/csdl-navigation-property-binding.d.ts +8 -0
  95. package/lib/metadata/csdl/csdl-reference.d.ts +30 -0
  96. package/lib/metadata/csdl/csdl-schema.d.ts +34 -0
  97. package/lib/metadata/csdl/csdl-singleton.d.ts +16 -0
  98. package/lib/metadata/csdl/csdl-structural-property.d.ts +70 -0
  99. package/lib/metadata/csdl/csdl-structured-type.d.ts +73 -0
  100. package/lib/metadata/csdl/csdl-type-definition.d.ts +22 -0
  101. package/lib/metadata/index.d.ts +2 -0
  102. package/lib/metadata/metadata.d.ts +10 -0
  103. package/lib/{resources/responses/metadata.d.ts → metadata/parser.d.ts} +19 -7
  104. package/lib/models/collection.d.ts +4 -3
  105. package/lib/models/model.d.ts +15 -23
  106. package/lib/models/options.d.ts +37 -23
  107. package/lib/resources/index.d.ts +1 -1
  108. package/lib/resources/{responses/options.d.ts → options.d.ts} +2 -2
  109. package/lib/resources/path/handlers.d.ts +4 -2
  110. package/lib/resources/path/segments.d.ts +3 -1
  111. package/lib/resources/query/expressions/apply.d.ts +37 -15
  112. package/lib/resources/query/expressions/base.d.ts +1 -1
  113. package/lib/resources/query/expressions/compute.d.ts +2 -2
  114. package/lib/resources/query/expressions/count.d.ts +1 -1
  115. package/lib/resources/query/expressions/expand.d.ts +1 -1
  116. package/lib/resources/query/expressions/filter.d.ts +1 -1
  117. package/lib/resources/query/expressions/orderby.d.ts +5 -4
  118. package/lib/resources/query/expressions/search.d.ts +1 -1
  119. package/lib/resources/query/expressions/select.d.ts +2 -1
  120. package/lib/resources/query/expressions/syntax.d.ts +6 -3
  121. package/lib/resources/resource.d.ts +27 -15
  122. package/lib/resources/{responses/response.d.ts → response.d.ts} +17 -5
  123. package/lib/resources/types/action.d.ts +12 -10
  124. package/lib/resources/types/batch.d.ts +3 -2
  125. package/lib/resources/types/count.d.ts +1 -5
  126. package/lib/resources/types/entity-set.d.ts +13 -6
  127. package/lib/resources/types/entity.d.ts +3 -4
  128. package/lib/resources/types/function.d.ts +11 -11
  129. package/lib/resources/types/metadata.d.ts +1 -1
  130. package/lib/resources/types/navigation-property.d.ts +13 -7
  131. package/lib/resources/types/property.d.ts +15 -8
  132. package/lib/resources/types/reference.d.ts +2 -4
  133. package/lib/resources/types/singleton.d.ts +4 -6
  134. package/lib/resources/types/value.d.ts +2 -6
  135. package/lib/schema/callable.d.ts +5 -7
  136. package/lib/schema/element.d.ts +11 -4
  137. package/lib/schema/entity-container.d.ts +2 -0
  138. package/lib/schema/enum-type.d.ts +4 -7
  139. package/lib/schema/index.d.ts +1 -0
  140. package/lib/schema/parsers/callable.d.ts +7 -8
  141. package/lib/schema/parsers/enum-type.d.ts +2 -4
  142. package/lib/schema/parsers/structured-type.d.ts +6 -8
  143. package/lib/schema/schema.d.ts +6 -9
  144. package/lib/schema/singleton.d.ts +10 -0
  145. package/lib/schema/structured-type.d.ts +5 -8
  146. package/lib/services/entity-set.d.ts +7 -3
  147. package/lib/services/factory.d.ts +14 -2
  148. package/lib/services/singleton.d.ts +4 -2
  149. package/lib/settings.d.ts +0 -10
  150. package/lib/types.d.ts +12 -3
  151. package/package.json +5 -1
  152. package/schematics/apigen/angular/api-config.d.ts +15 -0
  153. package/schematics/apigen/angular/api-config.js +34 -0
  154. package/schematics/apigen/angular/api-config.js.map +1 -0
  155. package/schematics/apigen/angular/base.d.ts +51 -0
  156. package/schematics/apigen/angular/base.js +200 -0
  157. package/schematics/apigen/angular/base.js.map +1 -0
  158. package/schematics/apigen/angular/entity.d.ts +24 -0
  159. package/schematics/apigen/angular/entity.js +71 -0
  160. package/schematics/apigen/angular/entity.js.map +1 -0
  161. package/schematics/apigen/angular/enum.d.ts +25 -0
  162. package/schematics/apigen/angular/enum.js +56 -0
  163. package/schematics/apigen/angular/enum.js.map +1 -0
  164. package/schematics/apigen/angular/import.d.ts +6 -0
  165. package/schematics/apigen/angular/import.js +18 -0
  166. package/schematics/apigen/angular/import.js.map +1 -0
  167. package/schematics/apigen/angular/module.d.ts +18 -0
  168. package/schematics/apigen/angular/module.js +41 -0
  169. package/schematics/apigen/angular/module.js.map +1 -0
  170. package/schematics/apigen/angular/service.d.ts +20 -0
  171. package/schematics/apigen/angular/service.js +76 -0
  172. package/schematics/apigen/angular/service.js.map +1 -0
  173. package/schematics/apigen/files/api-config/__fileName__.ts +9 -0
  174. package/schematics/apigen/files/entity/__fileName__.ts +7 -0
  175. package/schematics/apigen/files/entitycontainer-service/__fileName__.ts +18 -0
  176. package/schematics/apigen/files/entityset-service/__fileName__.ts +27 -0
  177. package/schematics/apigen/files/enum/__fileName__.ts +4 -0
  178. package/schematics/apigen/files/index/__fileName__.ts +2 -0
  179. package/schematics/apigen/files/module/__fileName__.ts +9 -0
  180. package/schematics/apigen/files/singleton-service/__fileName__.ts +18 -0
  181. package/schematics/apigen/index.d.ts +3 -0
  182. package/schematics/apigen/index.js +106 -0
  183. package/schematics/apigen/index.js.map +1 -0
  184. package/schematics/apigen/metadata/csdl/csdl-annotation.d.ts +120 -0
  185. package/schematics/apigen/metadata/csdl/csdl-annotation.js +98 -0
  186. package/schematics/apigen/metadata/csdl/csdl-annotation.js.map +1 -0
  187. package/schematics/apigen/metadata/csdl/csdl-entity-container.d.ts +26 -0
  188. package/schematics/apigen/metadata/csdl/csdl-entity-container.js +30 -0
  189. package/schematics/apigen/metadata/csdl/csdl-entity-container.js.map +1 -0
  190. package/schematics/apigen/metadata/csdl/csdl-entity-set.d.ts +20 -0
  191. package/schematics/apigen/metadata/csdl/csdl-entity-set.js +26 -0
  192. package/schematics/apigen/metadata/csdl/csdl-entity-set.js.map +1 -0
  193. package/schematics/apigen/metadata/csdl/csdl-enum-type.d.ts +28 -0
  194. package/schematics/apigen/metadata/csdl/csdl-enum-type.js +33 -0
  195. package/schematics/apigen/metadata/csdl/csdl-enum-type.js.map +1 -0
  196. package/schematics/apigen/metadata/csdl/csdl-function-action.d.ts +103 -0
  197. package/schematics/apigen/metadata/csdl/csdl-function-action.js +84 -0
  198. package/schematics/apigen/metadata/csdl/csdl-function-action.js.map +1 -0
  199. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.d.ts +8 -0
  200. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js +11 -0
  201. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js.map +1 -0
  202. package/schematics/apigen/metadata/csdl/csdl-reference.d.ts +30 -0
  203. package/schematics/apigen/metadata/csdl/csdl-reference.js +29 -0
  204. package/schematics/apigen/metadata/csdl/csdl-reference.js.map +1 -0
  205. package/schematics/apigen/metadata/csdl/csdl-schema.d.ts +32 -0
  206. package/schematics/apigen/metadata/csdl/csdl-schema.js +26 -0
  207. package/schematics/apigen/metadata/csdl/csdl-schema.js.map +1 -0
  208. package/schematics/apigen/metadata/csdl/csdl-singleton.d.ts +18 -0
  209. package/schematics/apigen/metadata/csdl/csdl-singleton.js +25 -0
  210. package/schematics/apigen/metadata/csdl/csdl-singleton.js.map +1 -0
  211. package/schematics/apigen/metadata/csdl/csdl-structural-property.d.ts +63 -0
  212. package/schematics/apigen/metadata/csdl/csdl-structural-property.js +50 -0
  213. package/schematics/apigen/metadata/csdl/csdl-structural-property.js.map +1 -0
  214. package/schematics/apigen/metadata/csdl/csdl-structured-type.d.ts +64 -0
  215. package/schematics/apigen/metadata/csdl/csdl-structured-type.js +71 -0
  216. package/schematics/apigen/metadata/csdl/csdl-structured-type.js.map +1 -0
  217. package/schematics/apigen/metadata/csdl/csdl-type-definition.d.ts +22 -0
  218. package/schematics/apigen/metadata/csdl/csdl-type-definition.js +19 -0
  219. package/schematics/apigen/metadata/csdl/csdl-type-definition.js.map +1 -0
  220. package/schematics/apigen/metadata/index.d.ts +1 -0
  221. package/schematics/apigen/metadata/index.js +18 -0
  222. package/schematics/apigen/metadata/index.js.map +1 -0
  223. package/schematics/apigen/metadata/metadata.d.ts +11 -0
  224. package/schematics/apigen/metadata/metadata.js +30 -0
  225. package/schematics/apigen/metadata/metadata.js.map +1 -0
  226. package/schematics/apigen/metadata/parser.d.ts +110 -0
  227. package/schematics/apigen/metadata/parser.js +568 -0
  228. package/schematics/apigen/metadata/parser.js.map +1 -0
  229. package/schematics/apigen/schema.d.ts +8 -0
  230. package/schematics/apigen/schema.js +3 -0
  231. package/schematics/apigen/schema.js.map +1 -0
  232. package/schematics/apigen/schema.json +36 -0
  233. package/schematics/apigen/utils.d.ts +1 -0
  234. package/schematics/apigen/utils.js +75 -0
  235. package/schematics/apigen/utils.js.map +1 -0
  236. package/schematics/collection.json +14 -0
  237. package/schematics/ng-add/index.d.ts +2 -0
  238. package/schematics/ng-add/index.js +13 -0
  239. package/schematics/ng-add/index.js.map +1 -0
  240. package/schematics/random.d.ts +1 -0
  241. package/schematics/random.js +604 -0
  242. package/schematics/random.js.map +1 -0
  243. package/esm2022/lib/resources/responses/annotations.mjs +0 -140
  244. package/esm2022/lib/resources/responses/csdl/csdl-annotation.mjs +0 -33
  245. package/esm2022/lib/resources/responses/csdl/csdl-entity-container.mjs +0 -11
  246. package/esm2022/lib/resources/responses/csdl/csdl-entity-set.mjs +0 -9
  247. package/esm2022/lib/resources/responses/csdl/csdl-enum-type.mjs +0 -15
  248. package/esm2022/lib/resources/responses/csdl/csdl-function-action.mjs +0 -56
  249. package/esm2022/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +0 -7
  250. package/esm2022/lib/resources/responses/csdl/csdl-reference.mjs +0 -23
  251. package/esm2022/lib/resources/responses/csdl/csdl-schema.mjs +0 -18
  252. package/esm2022/lib/resources/responses/csdl/csdl-singleton.mjs +0 -8
  253. package/esm2022/lib/resources/responses/csdl/csdl-structural-property.mjs +0 -39
  254. package/esm2022/lib/resources/responses/csdl/csdl-structured-type.mjs +0 -34
  255. package/esm2022/lib/resources/responses/csdl/csdl-type-definition.mjs +0 -14
  256. package/esm2022/lib/resources/responses/index.mjs +0 -5
  257. package/esm2022/lib/resources/responses/metadata.mjs +0 -547
  258. package/esm2022/lib/resources/responses/options.mjs +0 -56
  259. package/esm2022/lib/resources/responses/response.mjs +0 -174
  260. package/esm2022/lib/resources/responses/types.mjs +0 -2
  261. package/lib/resources/responses/csdl/csdl-annotation.d.ts +0 -27
  262. package/lib/resources/responses/csdl/csdl-entity-container.d.ts +0 -12
  263. package/lib/resources/responses/csdl/csdl-entity-set.d.ts +0 -8
  264. package/lib/resources/responses/csdl/csdl-enum-type.d.ts +0 -12
  265. package/lib/resources/responses/csdl/csdl-function-action.d.ts +0 -49
  266. package/lib/resources/responses/csdl/csdl-navigation-property-binding.d.ts +0 -5
  267. package/lib/resources/responses/csdl/csdl-reference.d.ts +0 -18
  268. package/lib/resources/responses/csdl/csdl-schema.d.ts +0 -20
  269. package/lib/resources/responses/csdl/csdl-singleton.d.ts +0 -7
  270. package/lib/resources/responses/csdl/csdl-structural-property.d.ts +0 -31
  271. package/lib/resources/responses/csdl/csdl-structured-type.d.ts +0 -27
  272. package/lib/resources/responses/csdl/csdl-type-definition.d.ts +0 -11
  273. package/lib/resources/responses/index.d.ts +0 -4
  274. package/lib/resources/responses/types.d.ts +0 -13
@@ -13,7 +13,7 @@ export function createSyncLoader(passedConfig) {
13
13
  export function provideODataClient(passedConfig) {
14
14
  return makeEnvironmentProviders([
15
15
  { provide: ODATA_CONFIG, useValue: passedConfig },
16
- passedConfig?.loader || {
16
+ passedConfig?.loader ?? {
17
17
  provide: ODataConfigLoader,
18
18
  useFactory: createSyncLoader,
19
19
  deps: [ODATA_CONFIG],
@@ -31,7 +31,7 @@ export class ODataModule {
31
31
  // Make the ODATA_CONFIG available through injection
32
32
  { provide: ODATA_CONFIG, useValue: passedConfig },
33
33
  // Create the loader: Either the one getting passed or a sync one
34
- passedConfig?.loader || {
34
+ passedConfig?.loader ?? {
35
35
  provide: ODataConfigLoader,
36
36
  useFactory: createSyncLoader,
37
37
  deps: [ODATA_CONFIG],
@@ -52,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
52
52
  providers: [ODataClient, ODataServiceFactory],
53
53
  }]
54
54
  }] });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUVMLGNBQWMsRUFFZCxRQUFRLEVBRVIsd0JBQXdCLEdBQ3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQVF2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQVksY0FBYyxDQUFDLENBQUM7QUFFMUUsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFlBQWlDO0lBQ2hFLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsTUFBTyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVELHFCQUFxQjtBQUNyQixNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFlBQWlDO0lBRWpDLE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUU7UUFDakQsWUFBWSxFQUFFLE1BQU0sSUFBSTtZQUN0QixPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3JCO1FBQ0QsV0FBVztRQUNYLG1CQUFtQjtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsaUJBQWlCO0FBS2pCLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQ1osWUFBaUM7UUFFakMsT0FBTztZQUNMLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLFNBQVMsRUFBRTtnQkFDVCxvREFBb0Q7Z0JBQ3BELEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFO2dCQUVqRCxpRUFBaUU7Z0JBQ2pFLFlBQVksRUFBRSxNQUFNLElBQUk7b0JBQ3RCLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFVBQVUsRUFBRSxnQkFBZ0I7b0JBQzVCLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDckI7Z0JBQ0QsV0FBVztnQkFDWCxtQkFBbUI7YUFDcEI7U0FDRixDQUFDO0lBQ0osQ0FBQzs4R0FwQlUsV0FBVzsrR0FBWCxXQUFXLFlBSFosWUFBWSxFQUFFLGdCQUFnQjsrR0FHN0IsV0FBVyxhQUZYLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFlBRG5DLFlBQVksRUFBRSxnQkFBZ0I7OzJGQUc3QixXQUFXO2tCQUp2QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztvQkFDekMsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDO2lCQUM5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIEluamVjdGlvblRva2VuLFxuICBNb2R1bGVXaXRoUHJvdmlkZXJzLFxuICBOZ01vZHVsZSxcbiAgUHJvdmlkZXIsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPRGF0YUNsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmltcG9ydCB7IE9EYXRhQ29uZmlnTG9hZGVyLCBPRGF0YUNvbmZpZ1N5bmNMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMnO1xuaW1wb3J0IHsgT0RhdGFTZXJ2aWNlRmFjdG9yeSB9IGZyb20gJy4vc2VydmljZXMvaW5kZXgnO1xuaW1wb3J0IHsgQXBpQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc2VkSW5pdGlhbENvbmZpZyB7XG4gIGNvbmZpZz86IEFwaUNvbmZpZyB8IEFwaUNvbmZpZ1tdO1xuICBsb2FkZXI/OiBQcm92aWRlcjtcbn1cblxuZXhwb3J0IGNvbnN0IE9EQVRBX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBcGlDb25maWc+KCdvZGF0YS5jb25maWcnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN5bmNMb2FkZXIocGFzc2VkQ29uZmlnOiBQYXNzZWRJbml0aWFsQ29uZmlnKSB7XG4gIHJldHVybiBuZXcgT0RhdGFDb25maWdTeW5jTG9hZGVyKHBhc3NlZENvbmZpZy5jb25maWchKTtcbn1cblxuLy8gU3RhbmRhbG9uZSB2ZXJzaW9uXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU9EYXRhQ2xpZW50KFxuICBwYXNzZWRDb25maWc6IFBhc3NlZEluaXRpYWxDb25maWdcbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgeyBwcm92aWRlOiBPREFUQV9DT05GSUcsIHVzZVZhbHVlOiBwYXNzZWRDb25maWcgfSxcbiAgICBwYXNzZWRDb25maWc/LmxvYWRlciB8fCB7XG4gICAgICBwcm92aWRlOiBPRGF0YUNvbmZpZ0xvYWRlcixcbiAgICAgIHVzZUZhY3Rvcnk6IGNyZWF0ZVN5bmNMb2FkZXIsXG4gICAgICBkZXBzOiBbT0RBVEFfQ09ORklHXSxcbiAgICB9LFxuICAgIE9EYXRhQ2xpZW50LFxuICAgIE9EYXRhU2VydmljZUZhY3RvcnksXG4gIF0pO1xufVxuXG4vLyBNb2R1bGUgdmVyc2lvblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSHR0cENsaWVudE1vZHVsZV0sXG4gIHByb3ZpZGVyczogW09EYXRhQ2xpZW50LCBPRGF0YVNlcnZpY2VGYWN0b3J5XSxcbn0pXG5leHBvcnQgY2xhc3MgT0RhdGFNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChcbiAgICBwYXNzZWRDb25maWc6IFBhc3NlZEluaXRpYWxDb25maWdcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxPRGF0YU1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogT0RhdGFNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgLy8gTWFrZSB0aGUgT0RBVEFfQ09ORklHIGF2YWlsYWJsZSB0aHJvdWdoIGluamVjdGlvblxuICAgICAgICB7IHByb3ZpZGU6IE9EQVRBX0NPTkZJRywgdXNlVmFsdWU6IHBhc3NlZENvbmZpZyB9LFxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgbG9hZGVyOiBFaXRoZXIgdGhlIG9uZSBnZXR0aW5nIHBhc3NlZCBvciBhIHN5bmMgb25lXG4gICAgICAgIHBhc3NlZENvbmZpZz8ubG9hZGVyIHx8IHtcbiAgICAgICAgICBwcm92aWRlOiBPRGF0YUNvbmZpZ0xvYWRlcixcbiAgICAgICAgICB1c2VGYWN0b3J5OiBjcmVhdGVTeW5jTG9hZGVyLFxuICAgICAgICAgIGRlcHM6IFtPREFUQV9DT05GSUddLFxuICAgICAgICB9LFxuICAgICAgICBPRGF0YUNsaWVudCxcbiAgICAgICAgT0RhdGFTZXJ2aWNlRmFjdG9yeSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUVMLGNBQWMsRUFFZCxRQUFRLEVBRVIsd0JBQXdCLEdBQ3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQVF2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQVksY0FBYyxDQUFDLENBQUM7QUFFMUUsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFlBQWlDO0lBQ2hFLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsTUFBTyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVELHFCQUFxQjtBQUNyQixNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFlBQWlDO0lBRWpDLE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUU7UUFDakQsWUFBWSxFQUFFLE1BQU0sSUFBSTtZQUN0QixPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3JCO1FBQ0QsV0FBVztRQUNYLG1CQUFtQjtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsaUJBQWlCO0FBS2pCLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQ1osWUFBaUM7UUFFakMsT0FBTztZQUNMLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLFNBQVMsRUFBRTtnQkFDVCxvREFBb0Q7Z0JBQ3BELEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFO2dCQUVqRCxpRUFBaUU7Z0JBQ2pFLFlBQVksRUFBRSxNQUFNLElBQUk7b0JBQ3RCLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFVBQVUsRUFBRSxnQkFBZ0I7b0JBQzVCLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDckI7Z0JBQ0QsV0FBVztnQkFDWCxtQkFBbUI7YUFDcEI7U0FDRixDQUFDO0lBQ0osQ0FBQzs4R0FwQlUsV0FBVzsrR0FBWCxXQUFXLFlBSFosWUFBWSxFQUFFLGdCQUFnQjsrR0FHN0IsV0FBVyxhQUZYLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFlBRG5DLFlBQVksRUFBRSxnQkFBZ0I7OzJGQUc3QixXQUFXO2tCQUp2QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztvQkFDekMsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDO2lCQUM5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIEluamVjdGlvblRva2VuLFxuICBNb2R1bGVXaXRoUHJvdmlkZXJzLFxuICBOZ01vZHVsZSxcbiAgUHJvdmlkZXIsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPRGF0YUNsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmltcG9ydCB7IE9EYXRhQ29uZmlnTG9hZGVyLCBPRGF0YUNvbmZpZ1N5bmNMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMnO1xuaW1wb3J0IHsgT0RhdGFTZXJ2aWNlRmFjdG9yeSB9IGZyb20gJy4vc2VydmljZXMvaW5kZXgnO1xuaW1wb3J0IHsgQXBpQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc2VkSW5pdGlhbENvbmZpZyB7XG4gIGNvbmZpZz86IEFwaUNvbmZpZyB8IEFwaUNvbmZpZ1tdO1xuICBsb2FkZXI/OiBQcm92aWRlcjtcbn1cblxuZXhwb3J0IGNvbnN0IE9EQVRBX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBcGlDb25maWc+KCdvZGF0YS5jb25maWcnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN5bmNMb2FkZXIocGFzc2VkQ29uZmlnOiBQYXNzZWRJbml0aWFsQ29uZmlnKSB7XG4gIHJldHVybiBuZXcgT0RhdGFDb25maWdTeW5jTG9hZGVyKHBhc3NlZENvbmZpZy5jb25maWchKTtcbn1cblxuLy8gU3RhbmRhbG9uZSB2ZXJzaW9uXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU9EYXRhQ2xpZW50KFxuICBwYXNzZWRDb25maWc6IFBhc3NlZEluaXRpYWxDb25maWcsXG4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHsgcHJvdmlkZTogT0RBVEFfQ09ORklHLCB1c2VWYWx1ZTogcGFzc2VkQ29uZmlnIH0sXG4gICAgcGFzc2VkQ29uZmlnPy5sb2FkZXIgPz8ge1xuICAgICAgcHJvdmlkZTogT0RhdGFDb25maWdMb2FkZXIsXG4gICAgICB1c2VGYWN0b3J5OiBjcmVhdGVTeW5jTG9hZGVyLFxuICAgICAgZGVwczogW09EQVRBX0NPTkZJR10sXG4gICAgfSxcbiAgICBPRGF0YUNsaWVudCxcbiAgICBPRGF0YVNlcnZpY2VGYWN0b3J5LFxuICBdKTtcbn1cblxuLy8gTW9kdWxlIHZlcnNpb25cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEh0dHBDbGllbnRNb2R1bGVdLFxuICBwcm92aWRlcnM6IFtPRGF0YUNsaWVudCwgT0RhdGFTZXJ2aWNlRmFjdG9yeV0sXG59KVxuZXhwb3J0IGNsYXNzIE9EYXRhTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoXG4gICAgcGFzc2VkQ29uZmlnOiBQYXNzZWRJbml0aWFsQ29uZmlnLFxuICApOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE9EYXRhTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBPRGF0YU1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAvLyBNYWtlIHRoZSBPREFUQV9DT05GSUcgYXZhaWxhYmxlIHRocm91Z2ggaW5qZWN0aW9uXG4gICAgICAgIHsgcHJvdmlkZTogT0RBVEFfQ09ORklHLCB1c2VWYWx1ZTogcGFzc2VkQ29uZmlnIH0sXG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBsb2FkZXI6IEVpdGhlciB0aGUgb25lIGdldHRpbmcgcGFzc2VkIG9yIGEgc3luYyBvbmVcbiAgICAgICAgcGFzc2VkQ29uZmlnPy5sb2FkZXIgPz8ge1xuICAgICAgICAgIHByb3ZpZGU6IE9EYXRhQ29uZmlnTG9hZGVyLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGNyZWF0ZVN5bmNMb2FkZXIsXG4gICAgICAgICAgZGVwczogW09EQVRBX0NPTkZJR10sXG4gICAgICAgIH0sXG4gICAgICAgIE9EYXRhQ2xpZW50LFxuICAgICAgICBPRGF0YVNlcnZpY2VGYWN0b3J5LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -3,5 +3,5 @@ export * from './path';
3
3
  export * from './request';
4
4
  export * from './resource';
5
5
  export * from './types';
6
- export * from './responses';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL3BhdGgnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vcmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc3BvbnNlcyc7XG4iXX0=
6
+ export * from './response';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL3BhdGgnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vcmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc3BvbnNlJztcbiJdfQ==
@@ -0,0 +1,56 @@
1
+ import { DEFAULT_VERSION, MAX_AGE, VERSION_2_0, VERSION_3_0, VERSION_4_0, } from '../constants';
2
+ import { ODataHelper } from '../helper';
3
+ export class ODataResponseOptions {
4
+ constructor(config) {
5
+ this.version = config.version || DEFAULT_VERSION;
6
+ }
7
+ get helper() {
8
+ return ODataHelper[this.version];
9
+ }
10
+ clone() {
11
+ return new ODataResponseOptions(this);
12
+ }
13
+ setFeatures(features) {
14
+ features.split(';').forEach((o) => {
15
+ let [k, v] = o.split('=');
16
+ switch (k.trim()) {
17
+ case 'odata.metadata':
18
+ this.metadata = v;
19
+ break;
20
+ case 'odata.streaming':
21
+ this.streaming = v == 'true';
22
+ break;
23
+ case 'IEEE754Compatible':
24
+ this.ieee754Compatible = v == 'true';
25
+ break;
26
+ }
27
+ });
28
+ }
29
+ setVersion(version) {
30
+ const value = version.replace(/\;/g, '').trim();
31
+ if ([VERSION_2_0, VERSION_3_0, VERSION_4_0].indexOf(value) !== -1)
32
+ this.version = value;
33
+ }
34
+ setLocation(location) {
35
+ // TODO: resolve location?
36
+ this.location = location;
37
+ }
38
+ setPreferenceApplied(preference) {
39
+ preference.split(',').forEach((prefer) => {
40
+ // TODO: resolve preference
41
+ });
42
+ }
43
+ setCache(cacheControl) {
44
+ cacheControl.split(',').forEach((directive) => {
45
+ if (directive.startsWith(MAX_AGE)) {
46
+ let maxAge = Number(directive.split('=')[1]);
47
+ if (!Number.isNaN(maxAge))
48
+ this.maxAge = maxAge;
49
+ }
50
+ if (['public', 'private', 'no-cache', 'no-store'].indexOf(directive) !== -1) {
51
+ this.cacheability = directive;
52
+ }
53
+ });
54
+ }
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLE9BQU8sRUFDUCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXhDLE1BQU0sT0FBTyxvQkFBb0I7SUFZL0IsWUFBWSxNQUFxQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQjtRQUMxQixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDaEIsS0FBSyxnQkFBZ0I7b0JBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBc0IsQ0FBQztvQkFDdkMsTUFBTTtnQkFDUixLQUFLLGlCQUFpQjtvQkFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDO29CQUM3QixNQUFNO2dCQUNSLEtBQUssbUJBQW1CO29CQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQztvQkFDckMsTUFBTTthQUNUO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWU7UUFDeEIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQXFCLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQjtRQUMxQiwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELG9CQUFvQixDQUFDLFVBQWtCO1FBQ3JDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkMsMkJBQTJCO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxZQUFvQjtRQUMzQixZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzVDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDakMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO29CQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2FBQ2pEO1lBQ0QsSUFDRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDdkU7Z0JBQ0EsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUE4QixDQUFDO2FBQ3BEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYWNoZUNhY2hlYWJpbGl0eSxcbiAgT0RhdGFNZXRhZGF0YVR5cGUsXG4gIE9EYXRhVmVyc2lvbixcbiAgUGFyc2VyT3B0aW9ucyxcbiAgUmVzcG9uc2VPcHRpb25zLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICBERUZBVUxUX1ZFUlNJT04sXG4gIE1BWF9BR0UsXG4gIFZFUlNJT05fMl8wLFxuICBWRVJTSU9OXzNfMCxcbiAgVkVSU0lPTl80XzAsXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7IE9EYXRhSGVscGVyIH0gZnJvbSAnLi4vaGVscGVyJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhUmVzcG9uc2VPcHRpb25zIGltcGxlbWVudHMgUmVzcG9uc2VPcHRpb25zIHtcbiAgdmVyc2lvbjogT0RhdGFWZXJzaW9uO1xuICBzdHJlYW1pbmc/OiBib29sZWFuO1xuICAvLyBPRGF0YVxuICBtZXRhZGF0YT86IE9EYXRhTWV0YWRhdGFUeXBlO1xuICBpZWVlNzU0Q29tcGF0aWJsZT86IGJvb2xlYW47XG4gIC8vIExvY2F0aW9uXG4gIGxvY2F0aW9uPzogc3RyaW5nO1xuICAvLyBDYWNoZVxuICBjYWNoZWFiaWxpdHk/OiAncHVibGljJyB8ICdwcml2YXRlJyB8ICduby1jYWNoZScgfCAnbm8tc3RvcmUnO1xuICBtYXhBZ2U/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBQYXJzZXJPcHRpb25zKSB7XG4gICAgdGhpcy52ZXJzaW9uID0gY29uZmlnLnZlcnNpb24gfHwgREVGQVVMVF9WRVJTSU9OO1xuICB9XG5cbiAgZ2V0IGhlbHBlcigpIHtcbiAgICByZXR1cm4gT0RhdGFIZWxwZXJbdGhpcy52ZXJzaW9uXTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgT0RhdGFSZXNwb25zZU9wdGlvbnModGhpcyk7XG4gIH1cblxuICBzZXRGZWF0dXJlcyhmZWF0dXJlczogc3RyaW5nKSB7XG4gICAgZmVhdHVyZXMuc3BsaXQoJzsnKS5mb3JFYWNoKChvKSA9PiB7XG4gICAgICBsZXQgW2ssIHZdID0gby5zcGxpdCgnPScpO1xuICAgICAgc3dpdGNoIChrLnRyaW0oKSkge1xuICAgICAgICBjYXNlICdvZGF0YS5tZXRhZGF0YSc6XG4gICAgICAgICAgdGhpcy5tZXRhZGF0YSA9IHYgYXMgT0RhdGFNZXRhZGF0YVR5cGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29kYXRhLnN0cmVhbWluZyc6XG4gICAgICAgICAgdGhpcy5zdHJlYW1pbmcgPSB2ID09ICd0cnVlJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSUVFRTc1NENvbXBhdGlibGUnOlxuICAgICAgICAgIHRoaXMuaWVlZTc1NENvbXBhdGlibGUgPSB2ID09ICd0cnVlJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFZlcnNpb24odmVyc2lvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsdWUgPSB2ZXJzaW9uLnJlcGxhY2UoL1xcOy9nLCAnJykudHJpbSgpO1xuICAgIGlmIChbVkVSU0lPTl8yXzAsIFZFUlNJT05fM18wLCBWRVJTSU9OXzRfMF0uaW5kZXhPZih2YWx1ZSkgIT09IC0xKVxuICAgICAgdGhpcy52ZXJzaW9uID0gdmFsdWUgYXMgT0RhdGFWZXJzaW9uO1xuICB9XG5cbiAgc2V0TG9jYXRpb24obG9jYXRpb246IHN0cmluZykge1xuICAgIC8vIFRPRE86IHJlc29sdmUgbG9jYXRpb24/XG4gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICB9XG5cbiAgc2V0UHJlZmVyZW5jZUFwcGxpZWQocHJlZmVyZW5jZTogc3RyaW5nKSB7XG4gICAgcHJlZmVyZW5jZS5zcGxpdCgnLCcpLmZvckVhY2goKHByZWZlcikgPT4ge1xuICAgICAgLy8gVE9ETzogcmVzb2x2ZSBwcmVmZXJlbmNlXG4gICAgfSk7XG4gIH1cblxuICBzZXRDYWNoZShjYWNoZUNvbnRyb2w6IHN0cmluZykge1xuICAgIGNhY2hlQ29udHJvbC5zcGxpdCgnLCcpLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgaWYgKGRpcmVjdGl2ZS5zdGFydHNXaXRoKE1BWF9BR0UpKSB7XG4gICAgICAgIGxldCBtYXhBZ2UgPSBOdW1iZXIoZGlyZWN0aXZlLnNwbGl0KCc9JylbMV0pO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihtYXhBZ2UpKSB0aGlzLm1heEFnZSA9IG1heEFnZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgWydwdWJsaWMnLCAncHJpdmF0ZScsICduby1jYWNoZScsICduby1zdG9yZSddLmluZGV4T2YoZGlyZWN0aXZlKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNhY2hlYWJpbGl0eSA9IGRpcmVjdGl2ZSBhcyBDYWNoZUNhY2hlYWJpbGl0eTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -7,10 +7,20 @@ export class SegmentHandler {
7
7
  get name() {
8
8
  return this.segment.name;
9
9
  }
10
- type(value) {
10
+ outgoingType(value) {
11
11
  if (value !== undefined)
12
- this.segment.type = value;
13
- return this.segment.type;
12
+ this.segment.outgoingType = value;
13
+ return this.segment.outgoingType;
14
+ }
15
+ incomingType(value) {
16
+ if (value !== undefined)
17
+ this.segment.incomingType = value;
18
+ return this.segment.incomingType;
19
+ }
20
+ bindingType(value) {
21
+ if (value !== undefined)
22
+ this.segment.bindingType = value;
23
+ return this.segment.bindingType;
14
24
  }
15
25
  path(value) {
16
26
  if (value !== undefined)
@@ -66,4 +76,4 @@ export class ODataPathSegmentsHandler {
66
76
  return this.segments.get(PathSegment.navigationProperty);
67
77
  }
68
78
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3BhdGgvaGFuZGxlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXBDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLE9BQXFCO1FBQXJCLFlBQU8sR0FBUCxPQUFPLENBQWM7SUFBRyxDQUFDO0lBQzdDLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFjO1FBQ2pCLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQWM7UUFDakIsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFDRCxHQUFHLENBQUksS0FBb0I7UUFDekIsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBbUIsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsTUFBTTtRQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFDRCxVQUFVLENBQUksS0FBUztRQUNyQixJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFlLENBQUM7SUFDdEMsQ0FBQztJQUNELGFBQWE7UUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQXNCLFFBQTJCO1FBQTNCLGFBQVEsR0FBUixRQUFRLENBQW1CO0lBQUcsQ0FBQztJQUNyRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFxQztRQUN4QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhdGhTZWdtZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgVHlwZXMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBFbnRpdHlLZXkgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7IE9EYXRhUGF0aFNlZ21lbnRzLCBPRGF0YVNlZ21lbnQgfSBmcm9tICcuL3NlZ21lbnRzJztcblxuZXhwb3J0IGNsYXNzIFNlZ21lbnRIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZWdtZW50OiBPRGF0YVNlZ21lbnQpIHt9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnQubmFtZTtcbiAgfVxuICB0eXBlKHZhbHVlPzogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHRoaXMuc2VnbWVudC50eXBlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudC50eXBlO1xuICB9XG4gIHBhdGgodmFsdWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgdGhpcy5zZWdtZW50LnBhdGggPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50LnBhdGg7XG4gIH1cbiAga2V5PFQ+KHZhbHVlPzogRW50aXR5S2V5PFQ+KSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHRoaXMuc2VnbWVudC5rZXkgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50LmtleSBhcyBFbnRpdHlLZXk8VD47XG4gIH1cbiAgaGFzS2V5KCkge1xuICAgIHJldHVybiAhVHlwZXMuaXNFbXB0eSh0aGlzLnNlZ21lbnQua2V5KTtcbiAgfVxuICBjbGVhcktleSgpIHtcbiAgICBkZWxldGUgdGhpcy5zZWdtZW50LmtleTtcbiAgfVxuICBwYXJhbWV0ZXJzPFQ+KHZhbHVlPzogVCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB0aGlzLnNlZ21lbnQucGFyYW1ldGVycyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnQucGFyYW1ldGVycyBhcyBUO1xuICB9XG4gIGhhc1BhcmFtZXRlcnMoKSB7XG4gICAgcmV0dXJuICFUeXBlcy5pc0VtcHR5KHRoaXMuc2VnbWVudC5wYXJhbWV0ZXJzKTtcbiAgfVxuICBjbGVhclBhcmFtZXRlcnMoKSB7XG4gICAgZGVsZXRlIHRoaXMuc2VnbWVudC5wYXJhbWV0ZXJzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVBhdGhTZWdtZW50c0hhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2VnbWVudHM6IE9EYXRhUGF0aFNlZ21lbnRzKSB7fVxuICBlbnRpdHlTZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudHMuZ2V0KFBhdGhTZWdtZW50LmVudGl0eVNldCk7XG4gIH1cbiAgc2luZ2xldG9uKCkge1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnRzLmdldChQYXRoU2VnbWVudC5zaW5nbGV0b24pO1xuICB9XG4gIGFjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5nZXQoUGF0aFNlZ21lbnQuYWN0aW9uKTtcbiAgfVxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5nZXQoUGF0aFNlZ21lbnQuZnVuY3Rpb24pO1xuICB9XG4gIGtleXModmFsdWVzPzogKEVudGl0eUtleTxUPiB8IHVuZGVmaW5lZClbXSkge1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnRzLmtleXModmFsdWVzKTtcbiAgfVxuICBwcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5nZXQoUGF0aFNlZ21lbnQucHJvcGVydHkpO1xuICB9XG4gIG5hdmlnYXRpb25Qcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5nZXQoUGF0aFNlZ21lbnQubmF2aWdhdGlvblByb3BlcnR5KTtcbiAgfVxufVxuIl19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3BhdGgvaGFuZGxlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXBDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLE9BQXFCO1FBQXJCLFlBQU8sR0FBUCxPQUFPLENBQWM7SUFBRyxDQUFDO0lBQzdDLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUNELFlBQVksQ0FBQyxLQUFjO1FBQ3pCLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBQ0QsWUFBWSxDQUFDLEtBQWM7UUFDekIsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBYztRQUN4QixJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFjO1FBQ2pCLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBQ0QsR0FBRyxDQUFJLEtBQW9CO1FBQ3pCLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQW1CLENBQUM7SUFDMUMsQ0FBQztJQUNELE1BQU07UUFDSixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUMxQixDQUFDO0lBQ0QsVUFBVSxDQUFJLEtBQVM7UUFDckIsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBZSxDQUFDO0lBQ3RDLENBQUM7SUFDRCxhQUFhO1FBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0QsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUFzQixRQUEyQjtRQUEzQixhQUFRLEdBQVIsUUFBUSxDQUFtQjtJQUFHLENBQUM7SUFDckQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxJQUFJLENBQUMsTUFBcUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXRoU2VnbWVudCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgT0RhdGFQYXRoU2VnbWVudHMsIE9EYXRhU2VnbWVudCB9IGZyb20gJy4vc2VnbWVudHMnO1xuXG5leHBvcnQgY2xhc3MgU2VnbWVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlZ21lbnQ6IE9EYXRhU2VnbWVudCkge31cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudC5uYW1lO1xuICB9XG4gIG91dGdvaW5nVHlwZSh2YWx1ZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB0aGlzLnNlZ21lbnQub3V0Z29pbmdUeXBlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudC5vdXRnb2luZ1R5cGU7XG4gIH1cbiAgaW5jb21pbmdUeXBlKHZhbHVlPzogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHRoaXMuc2VnbWVudC5pbmNvbWluZ1R5cGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50LmluY29taW5nVHlwZTtcbiAgfVxuICBiaW5kaW5nVHlwZSh2YWx1ZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB0aGlzLnNlZ21lbnQuYmluZGluZ1R5cGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50LmJpbmRpbmdUeXBlO1xuICB9XG4gIHBhdGgodmFsdWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgdGhpcy5zZWdtZW50LnBhdGggPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50LnBhdGg7XG4gIH1cbiAga2V5PFQ+KHZhbHVlPzogRW50aXR5S2V5PFQ+KSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHRoaXMuc2VnbWVudC5rZXkgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50LmtleSBhcyBFbnRpdHlLZXk8VD47XG4gIH1cbiAgaGFzS2V5KCkge1xuICAgIHJldHVybiAhVHlwZXMuaXNFbXB0eSh0aGlzLnNlZ21lbnQua2V5KTtcbiAgfVxuICBjbGVhcktleSgpIHtcbiAgICBkZWxldGUgdGhpcy5zZWdtZW50LmtleTtcbiAgfVxuICBwYXJhbWV0ZXJzPFQ+KHZhbHVlPzogVCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB0aGlzLnNlZ21lbnQucGFyYW1ldGVycyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnQucGFyYW1ldGVycyBhcyBUO1xuICB9XG4gIGhhc1BhcmFtZXRlcnMoKSB7XG4gICAgcmV0dXJuICFUeXBlcy5pc0VtcHR5KHRoaXMuc2VnbWVudC5wYXJhbWV0ZXJzKTtcbiAgfVxuICBjbGVhclBhcmFtZXRlcnMoKSB7XG4gICAgZGVsZXRlIHRoaXMuc2VnbWVudC5wYXJhbWV0ZXJzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVBhdGhTZWdtZW50c0hhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2VnbWVudHM6IE9EYXRhUGF0aFNlZ21lbnRzKSB7fVxuICBlbnRpdHlTZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudHMuZ2V0KFBhdGhTZWdtZW50LmVudGl0eVNldCk7XG4gIH1cbiAgc2luZ2xldG9uKCkge1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnRzLmdldChQYXRoU2VnbWVudC5zaW5nbGV0b24pO1xuICB9XG4gIGFjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5nZXQoUGF0aFNlZ21lbnQuYWN0aW9uKTtcbiAgfVxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5nZXQoUGF0aFNlZ21lbnQuZnVuY3Rpb24pO1xuICB9XG4gIGtleXModmFsdWVzPzogKEVudGl0eUtleTxUPiB8IHVuZGVmaW5lZClbXSkge1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnRzLmtleXModmFsdWVzKTtcbiAgfVxuICBwcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5nZXQoUGF0aFNlZ21lbnQucHJvcGVydHkpO1xuICB9XG4gIG5hdmlnYXRpb25Qcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5nZXQoUGF0aFNlZ21lbnQubmF2aWdhdGlvblByb3BlcnR5KTtcbiAgfVxufVxuIl19
@@ -55,7 +55,7 @@ export class ODataPathSegments {
55
55
  }
56
56
  types({ key = false } = {}) {
57
57
  return this.segments({ key })
58
- .map((s) => s.type())
58
+ .map((s) => s.outgoingType())
59
59
  .filter((t) => t !== undefined);
60
60
  }
61
61
  keys(values) {
@@ -87,8 +87,10 @@ export class ODataPathSegments {
87
87
  name: s.name,
88
88
  path: s.path,
89
89
  };
90
- if (s.type !== undefined)
91
- json.type = s.type;
90
+ if (s.incomingType !== undefined)
91
+ json.incomingType = s.incomingType;
92
+ if (s.outgoingType !== undefined)
93
+ json.outgoingType = s.outgoingType;
92
94
  if (s.key !== undefined)
93
95
  json.key = s.key;
94
96
  if (s.parameters !== undefined)
@@ -143,4 +145,4 @@ export class ODataPathSegments {
143
145
  return new SegmentHandler(segment);
144
146
  }
145
147
  }
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3BhdGgvc2VnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBeUIsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBVTVDLFNBQVMsbUJBQW1CLENBQzFCLE9BQXFCLEVBQ3JCLFNBQWtCLEtBQUssRUFDdkIsTUFBb0IsRUFDcEIsT0FBdUI7SUFFdkIsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxRQUFRLEVBQUU7UUFDekMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVTtZQUNyQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2hCLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQzVDLE1BQU07YUFDUCxDQUFDO1lBQ0osQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7UUFDRCwyQkFBMkI7UUFDM0IsSUFDRSxJQUFJLENBQUMs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LEVBQWtCLENBQUM7UUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVk7UUFDZCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksT0FBTyxLQUFLLFNBQVM7WUFDdkIsTUFBTSxLQUFLLENBQUMsdUJBQXVCLElBQUksWUFBWSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQQVRIX1NFUEFSQVRPUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQYXJzZXIsIFBhcnNlck9wdGlvbnMsIFBhdGhTZWdtZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JqZWN0cyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGJ1aWxkUGF0aEFuZFF1ZXJ5LCByYXcgfSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBFbnRpdHlLZXkgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBTZWdtZW50SGFuZGxlciB9IGZyb20gJy4vaGFuZGxlcnMnO1xuXG5leHBvcnQgdHlwZSBPRGF0YVNlZ21lbnQgPSB7XG4gIG5hbWU6IFBhdGhTZWdtZW50O1xuICBwYXRoOiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGtleT86IGFueTtcbiAgcGFyYW1ldGVycz86IGFueTtcbn07XG5cbmZ1bmN0aW9uIHBhdGhTZWdtZW50c0J1aWxkZXIoXG4gIHNlZ21lbnQ6IE9EYXRhU2VnbWVudCxcbiAgZXNjYXBlOiBib29sZWFuID0gZmFsc2UsXG4gIHBhcnNlcj86IFBhcnNlcjxhbnk+LFxuICBvcHRpb25zPzogUGFyc2VyT3B0aW9uc1xuKTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dIHtcbiAgaWYgKHNlZ21lbnQubmFtZSA9PT0gUGF0aFNlZ21lbnQuZnVuY3Rpb24pIHtcbiAgICBsZXQgW3BhdGgsIHBhcmFtc10gPSBzZWdtZW50LnBhcmFtZXRlcnNcbiAgICAgID8gYnVpbGRQYXRoQW5kUXVlcnkoe1xuICAgICAgICAgIGZ1bmM6IHsgW3NlZ21lbnQucGF0aF06IHNlZ21lbnQucGFyYW1ldGVycyB9LFxuICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgfSlcbiAgICAgIDogYnVpbGRQYXRoQW5kUXVlcnkoeyBmdW5jOiBzZWdtZW50LnBhdGgsIGVzY2FwZSB9KTtcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKFBBVEhfU0VQQVJBVE9SKSkge1xuICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMSk7XG4gICAgfVxuICAgIC8vIEhBQ0s6IFJlbW92ZSBwYXJlbnRoZXNpc1xuICAgIGlmIChcbiAgICAgIHBhdGguZW5kc1dpdGgoJygpJykgJiZcbiAgICAgIG9wdGlvbnM/Lm5vblBhcmVudGhlc2lzRm9yRW1wdHlQYXJhbWV0ZXJGdW5jdGlvblxuICAgICkge1xuICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtwYXRoLCBwYXJhbXNdO1xuICB9IGVsc2Uge1xuICAgIC8vVE9ETzogUGFyc2VyIGtleVxuICAgIGxldCBrZXkgPSBzZWdtZW50LmtleTtcbiAgICAvLyBIQUNLOiBDaGVjayBndWlkIHN0cmluZ1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAvXlswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSQvLnRlc3QoXG4gICAgICAgIGtleVxuICAgICAgKVxuICAgICkge1xuICAgICAga2V5ID0gcmF3KGtleSk7XG4gICAgfVxuICAgIGxldCBbcGF0aCwgcGFyYW1zXSA9IGtleSA/IGJ1aWxkUGF0aEFuZFF1ZXJ5KHsga2V5LCBlc2NhcGUgfSkgOiBbJycsIHt9XTtcbiAgICByZXR1cm4gW3NlZ21lbnQucGF0aCArIHBhdGgsIHBhcmFtc107XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHBhdGhBbmRQYXJhbXNGcm9tU2VnbWVudHMgPSAoXG4gIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXSxcbiAge1xuICAgIGVzY2FwZSxcbiAgICBwYXJzZXIsXG4gICAgb3B0aW9ucyxcbiAgfToge1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcGFyc2VyPzogUGFyc2VyPGFueT47XG4gICAgb3B0aW9ucz86IFBhcnNlck9wdGlvbnM7XG4gIH0gPSB7fVxuKTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gc2VnbWVudHMucmVkdWNlKFxuICAgIChhY2MsIHNlZ21lbnQpID0+IHtcbiAgICAgIGNvbnN0IFtwYXRoLCBwYXJhbXNdID0gcGF0aFNlZ21lbnRzQnVpbGRlcihcbiAgICAgICAgc2VnbWVudCxcbiAgICAgICAgZXNjYXBlLFxuICAgICAgICBwYXJzZXIsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICBhY2MucGF0aHMucHVzaChwYXRoKTtcbiAgICAgIGFjYy5wYXJhbXMgPSBPYmplY3QuYXNzaWduKGFjYy5wYXJhbXMsIHBhcmFtcyk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAgeyBwYXRoczogW10gYXMgc3RyaW5nW10sIHBhcmFtczoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfVxuICApO1xuICByZXR1cm4gW3Jlc3VsdC5wYXRocy5qb2luKFBBVEhfU0VQQVJBVE9SKSwgcmVzdWx0LnBhcmFtc107XG59O1xuXG5leHBvcnQgY2xhc3MgT0RhdGFQYXRoU2VnbWVudHMge1xuICBwcml2YXRlIF9zZWdtZW50czogT0RhdGFTZWdtZW50W107XG5cbiAgY29uc3RydWN0b3Ioc2VnbWVudHM/OiBPRGF0YVNlZ21lbnRbXSkge1xuICAgIHRoaXMuX3NlZ21lbnRzID0gc2VnbWVudHMgfHwgW107XG4gIH1cblxuICBwYXRoQW5kUGFyYW1zKHtcbiAgICBlc2NhcGUsXG4gICAgcGFyc2VyLFxuICAgIG9wdGlvbnMsXG4gIH06IHtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHBhcnNlcj86IFBhcnNlcjxhbnk+O1xuICAgIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zO1xuICB9ID0ge30pOiBbc3RyaW5nLCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfV0ge1xuICAgIHJldHVybiBwYXRoQW5kUGFyYW1zRnJvbVNlZ21lbnRzKHRoaXMuX3NlZ21lbnRzLCB7XG4gICAgICBlc2NhcGUsXG4gICAgICBwYXJzZXIsXG4gICAgICBvcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgdHlwZXMoeyBrZXkgPSBmYWxzZSB9OiB7IGtleT86IGJvb2xlYW4gfSA9IHt9KTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnRzKHsga2V5IH0pXG4gICAgICAubWFwKChzKSA9PiBzLnR5cGUoKSlcbiAgICAgIC5maWx0ZXIoKHQpID0+IHQgIT09IHVuZGVmaW5lZCkgYXMgc3RyaW5nW107XG4gIH1cblxuICBrZXlzKHZhbHVlcz86IChFbnRpdHlLZXk8YW55PiB8IHVuZGVmaW5lZClbXSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cyh7IGtleTogdHJ1ZSB9KTtcbiAgICBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlZ21lbnRzLmZvckVhY2goKHNlZ21lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IHZhbHVlc1tpbmRleF07XG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNlZ21lbnQuY2xlYXJLZXkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWdtZW50LmtleShrZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlZ21lbnRzLm1hcCgocykgPT4gcy5rZXkoKSBhcyBFbnRpdHlLZXk8YW55PiB8IHVuZGVmaW5lZCk7XG4gIH1cblxuICB0b1N0cmluZyh7IGVzY2FwZSB9OiB7IGVzY2FwZT86IGJvb2xlYW4gfSA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBbcGF0aCwgcGFyYW1zXSA9IHRoaXMucGF0aEFuZFBhcmFtcyh7IGVzY2FwZSB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgcGF0aCArXG4gICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMpXG4gICAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcmJylcbiAgICApO1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWdtZW50cy5tYXAoKHMpID0+IHtcbiAgICAgIGxldCBqc29uID0ge1xuICAgICAgICBuYW1lOiBzLm5hbWUgYXMgc3RyaW5nLFxuICAgICAgICBwYXRoOiBzLnBhdGgsXG4gICAgICB9IGFzIGFueTtcbiAgICAgIGlmIChzLnR5cGUgIT09IHVuZGVmaW5lZCkganNvbi50eXBlID0gcy50eXBlO1xuICAgICAgaWYgKHMua2V5ICE9PSB1bmRlZmluZWQpIGpzb24ua2V5ID0gcy5rZXk7XG4gICAgICBpZiAocy5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIGpzb24ucGFyYW1ldGVycyA9IHMucGFyYW1ldGVycztcbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZyb21Kc29uKGpzb246IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10pOiBPRGF0YVBhdGhTZWdtZW50cyB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YVBhdGhTZWdtZW50cyhcbiAgICAgIGpzb24ubWFwKChzOiBhbnkpID0+ICh7XG4gICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgcGF0aDogcy5wYXRoLFxuICAgICAgICB0eXBlOiBzLnR5cGUsXG4gICAgICAgIGtleTogcy5rZXksXG4gICAgICAgIHBhcmFtZXRlcnM6IHMucGFyYW1ldGVycyxcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IE9iamVjdHMuY2xvbmUodGhpcy5fc2VnbWVudHMpO1xuICAgIHJldHVybiBuZXcgT0RhdGFQYXRoU2VnbWVudHMoc2VnbWVudHMpO1xuICB9XG5cbiAgZmluZChwcmVkaWNhdGU6IChzZWdtZW50OiBPRGF0YVNlZ21lbnQpID0+IGJvb2xlYW4pIHtcbiAgICAvL0JhY2t3YXJkIEZpbmRcbiAgICByZXR1cm4gWy4uLnRoaXMuX3NlZ21lbnRzXS5yZXZlcnNlKCkuZmluZChwcmVkaWNhdGUpO1xuICB9XG5cbiAgc2VnbWVudHMoeyBrZXkgPSBmYWxzZSB9OiB7IGtleT86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgbGV0IHNlZ21lbnRzID0gWy4uLnRoaXMuX3NlZ21lbnRzXTtcbiAgICBpZiAoa2V5KVxuICAgICAgc2VnbWVudHMgPSBzZWdtZW50cy5maWx0ZXIoXG4gICAgICAgIChzKSA9PlxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFBhdGhTZWdtZW50LmVudGl0eVNldCxcbiAgICAgICAgICAgIFBhdGhTZWdtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICAgICAgICAgIFBhdGhTZWdtZW50LnByb3BlcnR5LFxuICAgICAgICAgIF0uaW5kZXhPZihzLm5hbWUpICE9PSAtMVxuICAgICAgKTtcbiAgICByZXR1cm4gc2VnbWVudHMubWFwKChzKSA9PiBuZXcgU2VnbWVudEhhbmRsZXIocykpO1xuICB9XG5cbiAgZmlyc3QoeyBrZXkgPSBmYWxzZSB9OiB7IGtleT86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnNlZ21lbnRzKHsga2V5IH0pO1xuICAgIHJldHVybiBzZWdtZW50cy5sZW5ndGggPiAwID8gc2VnbWVudHNbMF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBsYXN0KHsga2V5ID0gZmFsc2UgfTogeyBrZXk/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cyh7IGtleSB9KTtcbiAgICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID4gMCA/IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgYWRkKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IHsgbmFtZSwgcGF0aCB9IGFzIE9EYXRhU2VnbWVudDtcbiAgICB0aGlzLl9zZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICAgIHJldHVybiBuZXcgU2VnbWVudEhhbmRsZXIoc2VnbWVudCk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHNlZ21lbnQgPSB0aGlzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKHNlZ21lbnQgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IEVycm9yKGBObyBTZWdtZW50IGZvciBuYW1lICR7bmFtZX0gd2FzIGZvdW5kYCk7XG4gICAgcmV0dXJuIG5ldyBTZWdtZW50SGFuZGxlcihzZWdtZW50KTtcbiAgfVxufVxuIl19
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3BhdGgvc2VnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBeUIsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBWTVDLFNBQVMsbUJBQW1CLENBQzFCLE9BQXFCLEVBQ3JCLFNBQWtCLEtBQUssRUFDdkIsTUFBb0IsRUFDcEIsT0FBdUI7SUFFdkIsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxRQUFRLEVBQUU7UUFDekMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVTtZQUNyQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2hCLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQzVDLE1BQU07YUFDUCxDQUFDO1lBQ0osQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7UUFDRCwyQkFBMkI7UUFDM0IsSUFDRSxJQUFJLENBQUMs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O0lBQ3pFLENBQUM7SUFFRCxHQUFHLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDNUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFrQixDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLE9BQU8sS0FBSyxTQUFTO1lBQ3ZCLE1BQU0sS0FBSyxDQUFDLHVCQUF1QixJQUFJLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUEFUSF9TRVBBUkFUT1IgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGFyc2VyLCBQYXJzZXJPcHRpb25zLCBQYXRoU2VnbWVudCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9iamVjdHMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBidWlsZFBhdGhBbmRRdWVyeSwgcmF3IH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgU2VnbWVudEhhbmRsZXIgfSBmcm9tICcuL2hhbmRsZXJzJztcblxuZXhwb3J0IHR5cGUgT0RhdGFTZWdtZW50ID0ge1xuICBuYW1lOiBQYXRoU2VnbWVudDtcbiAgcGF0aDogc3RyaW5nO1xuICBvdXRnb2luZ1R5cGU/OiBzdHJpbmc7XG4gIGluY29taW5nVHlwZT86IHN0cmluZztcbiAgYmluZGluZ1R5cGU/OiBzdHJpbmc7XG4gIGtleT86IGFueTtcbiAgcGFyYW1ldGVycz86IGFueTtcbn07XG5cbmZ1bmN0aW9uIHBhdGhTZWdtZW50c0J1aWxkZXIoXG4gIHNlZ21lbnQ6IE9EYXRhU2VnbWVudCxcbiAgZXNjYXBlOiBib29sZWFuID0gZmFsc2UsXG4gIHBhcnNlcj86IFBhcnNlcjxhbnk+LFxuICBvcHRpb25zPzogUGFyc2VyT3B0aW9ucyxcbik6IFtzdHJpbmcsIHsgW25hbWU6IHN0cmluZ106IGFueSB9XSB7XG4gIGlmIChzZWdtZW50Lm5hbWUgPT09IFBhdGhTZWdtZW50LmZ1bmN0aW9uKSB7XG4gICAgbGV0IFtwYXRoLCBwYXJhbXNdID0gc2VnbWVudC5wYXJhbWV0ZXJzXG4gICAgICA/IGJ1aWxkUGF0aEFuZFF1ZXJ5KHtcbiAgICAgICAgICBmdW5jOiB7IFtzZWdtZW50LnBhdGhdOiBzZWdtZW50LnBhcmFtZXRlcnMgfSxcbiAgICAgICAgICBlc2NhcGUsXG4gICAgICAgIH0pXG4gICAgICA6IGJ1aWxkUGF0aEFuZFF1ZXJ5KHsgZnVuYzogc2VnbWVudC5wYXRoLCBlc2NhcGUgfSk7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChQQVRIX1NFUEFSQVRPUikpIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDEpO1xuICAgIH1cbiAgICAvLyBIQUNLOiBSZW1vdmUgcGFyZW50aGVzaXNcbiAgICBpZiAoXG4gICAgICBwYXRoLmVuZHNXaXRoKCcoKScpICYmXG4gICAgICBvcHRpb25zPy5ub25QYXJlbnRoZXNpc0ZvckVtcHR5UGFyYW1ldGVyRnVuY3Rpb25cbiAgICApIHtcbiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIHJldHVybiBbcGF0aCwgcGFyYW1zXTtcbiAgfSBlbHNlIHtcbiAgICAvL1RPRE86IFBhcnNlciBrZXlcbiAgICBsZXQga2V5ID0gc2VnbWVudC5rZXk7XG4gICAgLy8gSEFDSzogQ2hlY2sgZ3VpZCBzdHJpbmdcbiAgICBpZiAoXG4gICAgICB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgL15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kLy50ZXN0KFxuICAgICAgICBrZXksXG4gICAgICApXG4gICAgKSB7XG4gICAgICBrZXkgPSByYXcoa2V5KTtcbiAgICB9XG4gICAgbGV0IFtwYXRoLCBwYXJhbXNdID0ga2V5ID8gYnVpbGRQYXRoQW5kUXVlcnkoeyBrZXksIGVzY2FwZSB9KSA6IFsnJywge31dO1xuICAgIHJldHVybiBbc2VnbWVudC5wYXRoICsgcGF0aCwgcGFyYW1zXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcGF0aEFuZFBhcmFtc0Zyb21TZWdtZW50cyA9IChcbiAgc2VnbWVudHM6IE9EYXRhU2VnbWVudFtdLFxuICB7XG4gICAgZXNjYXBlLFxuICAgIHBhcnNlcixcbiAgICBvcHRpb25zLFxuICB9OiB7XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwYXJzZXI/OiBQYXJzZXI8YW55PjtcbiAgICBvcHRpb25zPzogUGFyc2VyT3B0aW9ucztcbiAgfSA9IHt9LFxuKTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gc2VnbWVudHMucmVkdWNlKFxuICAgIChhY2MsIHNlZ21lbnQpID0+IHtcbiAgICAgIGNvbnN0IFtwYXRoLCBwYXJhbXNdID0gcGF0aFNlZ21lbnRzQnVpbGRlcihcbiAgICAgICAgc2VnbWVudCxcbiAgICAgICAgZXNjYXBlLFxuICAgICAgICBwYXJzZXIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApO1xuICAgICAgYWNjLnBhdGhzLnB1c2gocGF0aCk7XG4gICAgICBhY2MucGFyYW1zID0gT2JqZWN0LmFzc2lnbihhY2MucGFyYW1zLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHsgcGF0aHM6IFtdIGFzIHN0cmluZ1tdLCBwYXJhbXM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IGFueSB9IH0sXG4gICk7XG4gIHJldHVybiBbcmVzdWx0LnBhdGhzLmpvaW4oUEFUSF9TRVBBUkFUT1IpLCByZXN1bHQucGFyYW1zXTtcbn07XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVBhdGhTZWdtZW50cyB7XG4gIHByaXZhdGUgX3NlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcblxuICBjb25zdHJ1Y3RvcihzZWdtZW50cz86IE9EYXRhU2VnbWVudFtdKSB7XG4gICAgdGhpcy5fc2VnbWVudHMgPSBzZWdtZW50cyB8fCBbXTtcbiAgfVxuXG4gIHBhdGhBbmRQYXJhbXMoe1xuICAgIGVzY2FwZSxcbiAgICBwYXJzZXIsXG4gICAgb3B0aW9ucyxcbiAgfToge1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcGFyc2VyPzogUGFyc2VyPGFueT47XG4gICAgb3B0aW9ucz86IFBhcnNlck9wdGlvbnM7XG4gIH0gPSB7fSk6IFtzdHJpbmcsIHsgW25hbWU6IHN0cmluZ106IGFueSB9XSB7XG4gICAgcmV0dXJuIHBhdGhBbmRQYXJhbXNGcm9tU2VnbWVudHModGhpcy5fc2VnbWVudHMsIHtcbiAgICAgIGVzY2FwZSxcbiAgICAgIHBhcnNlcixcbiAgICAgIG9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICB0eXBlcyh7IGtleSA9IGZhbHNlIH06IHsga2V5PzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudHMoeyBrZXkgfSlcbiAgICAgIC5tYXAoKHMpID0+IHMub3V0Z29pbmdUeXBlKCkpXG4gICAgICAuZmlsdGVyKCh0KSA9PiB0ICE9PSB1bmRlZmluZWQpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAga2V5cyh2YWx1ZXM/OiAoRW50aXR5S2V5PGFueT4gfCB1bmRlZmluZWQpW10pIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc2VnbWVudHMoeyBrZXk6IHRydWUgfSk7XG4gICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZWdtZW50cy5mb3JFYWNoKChzZWdtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSB2YWx1ZXNbaW5kZXhdO1xuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzZWdtZW50LmNsZWFyS2V5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudC5rZXkoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50cy5tYXAoKHMpID0+IHMua2V5KCkgYXMgRW50aXR5S2V5PGFueT4gfCB1bmRlZmluZWQpO1xuICB9XG5cbiAgdG9TdHJpbmcoeyBlc2NhcGUgfTogeyBlc2NhcGU/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgW3BhdGgsIHBhcmFtc10gPSB0aGlzLnBhdGhBbmRQYXJhbXMoeyBlc2NhcGUgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIHBhdGggK1xuICAgICAgT2JqZWN0LmVudHJpZXMocGFyYW1zKVxuICAgICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlKVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX09JHt2YWx1ZX1gKVxuICAgICAgICAuam9pbignJicpXG4gICAgKTtcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VnbWVudHMubWFwKChzKSA9PiB7XG4gICAgICBsZXQganNvbiA9IHtcbiAgICAgICAgbmFtZTogcy5uYW1lIGFzIHN0cmluZyxcbiAgICAgICAgcGF0aDogcy5wYXRoLFxuICAgICAgfSBhcyBhbnk7XG4gICAgICBpZiAocy5pbmNvbWluZ1R5cGUgIT09IHVuZGVmaW5lZCkganNvbi5pbmNvbWluZ1R5cGUgPSBzLmluY29taW5nVHlwZTtcbiAgICAgIGlmIChzLm91dGdvaW5nVHlwZSAhPT0gdW5kZWZpbmVkKSBqc29uLm91dGdvaW5nVHlwZSA9IHMub3V0Z29pbmdUeXBlO1xuICAgICAgaWYgKHMua2V5ICE9PSB1bmRlZmluZWQpIGpzb24ua2V5ID0gcy5rZXk7XG4gICAgICBpZiAocy5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIGpzb24ucGFyYW1ldGVycyA9IHMucGFyYW1ldGVycztcbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZyb21Kc29uKGpzb246IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10pOiBPRGF0YVBhdGhTZWdtZW50cyB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YVBhdGhTZWdtZW50cyhcbiAgICAgIGpzb24ubWFwKChzOiBhbnkpID0+ICh7XG4gICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgcGF0aDogcy5wYXRoLFxuICAgICAgICB0eXBlOiBzLnR5cGUsXG4gICAgICAgIGtleTogcy5rZXksXG4gICAgICAgIHBhcmFtZXRlcnM6IHMucGFyYW1ldGVycyxcbiAgICAgIH0pKSxcbiAgICApO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBPYmplY3RzLmNsb25lKHRoaXMuX3NlZ21lbnRzKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhUGF0aFNlZ21lbnRzKHNlZ21lbnRzKTtcbiAgfVxuXG4gIGZpbmQocHJlZGljYXRlOiAoc2VnbWVudDogT0RhdGFTZWdtZW50KSA9PiBib29sZWFuKSB7XG4gICAgLy9CYWNrd2FyZCBGaW5kXG4gICAgcmV0dXJuIFsuLi50aGlzLl9zZWdtZW50c10ucmV2ZXJzZSgpLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuXG4gIHNlZ21lbnRzKHsga2V5ID0gZmFsc2UgfTogeyBrZXk/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIGxldCBzZWdtZW50cyA9IFsuLi50aGlzLl9zZWdtZW50c107XG4gICAgaWYgKGtleSlcbiAgICAgIHNlZ21lbnRzID0gc2VnbWVudHMuZmlsdGVyKFxuICAgICAgICAocykgPT5cbiAgICAgICAgICBbXG4gICAgICAgICAgICBQYXRoU2VnbWVudC5lbnRpdHlTZXQsXG4gICAgICAgICAgICBQYXRoU2VnbWVudC5uYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgICAgICAgICBQYXRoU2VnbWVudC5wcm9wZXJ0eSxcbiAgICAgICAgICBdLmluZGV4T2Yocy5uYW1lKSAhPT0gLTEsXG4gICAgICApO1xuICAgIHJldHVybiBzZWdtZW50cy5tYXAoKHMpID0+IG5ldyBTZWdtZW50SGFuZGxlcihzKSk7XG4gIH1cblxuICBmaXJzdCh7IGtleSA9IGZhbHNlIH06IHsga2V5PzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc2VnbWVudHMoeyBrZXkgfSk7XG4gICAgcmV0dXJuIHNlZ21lbnRzLmxlbmd0aCA+IDAgPyBzZWdtZW50c1swXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxhc3QoeyBrZXkgPSBmYWxzZSB9OiB7IGtleT86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnNlZ21lbnRzKHsga2V5IH0pO1xuICAgIHJldHVybiBzZWdtZW50cy5sZW5ndGggPiAwID8gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBhZGQobmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWdtZW50ID0geyBuYW1lLCBwYXRoIH0gYXMgT0RhdGFTZWdtZW50O1xuICAgIHRoaXMuX3NlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gICAgcmV0dXJuIG5ldyBTZWdtZW50SGFuZGxlcihzZWdtZW50KTtcbiAgfVxuXG4gIGdldChuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgc2VnbWVudCA9IHRoaXMuZmluZCgocykgPT4gcy5uYW1lID09PSBuYW1lKTtcbiAgICBpZiAoc2VnbWVudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgRXJyb3IoYE5vIFNlZ21lbnQgZm9yIG5hbWUgJHtuYW1lfSB3YXMgZm91bmRgKTtcbiAgICByZXR1cm4gbmV3IFNlZ21lbnRIYW5kbGVyKHNlZ21lbnQpO1xuICB9XG59XG4iXX0=
@@ -460,7 +460,7 @@ export function normalizeValue(value, { aliases, escape = false, } = {}) {
460
460
  }
461
461
  return value;
462
462
  }
463
- function buildExpand(expands, { aliases, escape = false }) {
463
+ function buildExpand(expands, { aliases, escape = false, }) {
464
464
  if (isRawType(expands)) {
465
465
  return expands.value;
466
466
  }
@@ -537,7 +537,7 @@ function buildExpand(expands, { aliases, escape = false }) {
537
537
  }
538
538
  return '';
539
539
  }
540
- function buildTransforms(transforms, { aliases, escape = false }) {
540
+ function buildTransforms(transforms, { aliases, escape = false, }) {
541
541
  // Wrap single object an array for simplified processing
542
542
  const transformsArray = Array.isArray(transforms) ? transforms : [transforms];
543
543
  const transformsResult = transformsArray.reduce((result, transform) => {
@@ -587,7 +587,7 @@ function buildAggregate(aggregate) {
587
587
  })
588
588
  .join(',');
589
589
  }
590
- function buildGroupBy(groupBy, { aliases, escape = false }) {
590
+ function buildGroupBy(groupBy, { aliases, escape = false, }) {
591
591
  if (!groupBy.properties) {
592
592
  throw new Error(`'properties' property required for groupBy`);
593
593
  }
@@ -619,7 +619,7 @@ function buildOrderBy(orderBy, prefix = '') {
619
619
  }
620
620
  return `${prefix}${orderBy}`;
621
621
  }
622
- function buildApply(apply, { aliases, escape = false }) {
622
+ function buildApply(apply, { aliases, escape = false, }) {
623
623
  const applyArray = Array.isArray(apply) ? apply : [apply];
624
624
  return applyArray
625
625
  .map((v) => normalizeValue(v, { aliases, escape }))
@@ -633,4 +633,4 @@ function buildUrl(path, params) {
633
633
  function parseNot(builtFilters) {
634
634
  return `not(${builtFilters.join(' and ')})`;
635
635
  }
636
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsS0FBSztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtDQUNULENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUM7QUFRN0MsTUFBTSxDQUFOLElBQVksd0JBTVg7QUFORCxXQUFZLHdCQUF3QjtJQUNsQyx1Q0FBVyxDQUFBO0lBQ1gsdUNBQVcsQ0FBQTtJQUNYLHVDQUFXLENBQUE7SUFDWCwrQ0FBbUIsQ0FBQTtJQUNuQiwyREFBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBTlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQU1uQztBQTZDRCxNQUFNLENBQU4sSUFBWSxnQkFLWDtBQUxELFdBQVksZ0JBQWdCO0lBQzFCLHFEQUFHLENBQUE7SUFDSCx5REFBSyxDQUFBO0lBQ0wsK0RBQVEsQ0FBQTtJQUNSLDJEQUFNLENBQUE7QUFDUixDQUFDLEVBTFcsZ0JBQWdC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QUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxPQUFPLFVBQVU7U0FDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsSUFBWSxFQUFFLE1BQStCO0lBQzdELG9FQUFvRTtJQUNwRSxNQUFNLE9BQU8sR0FBYSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FDbEQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQ3BDLENBQUM7SUFDRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxZQUFzQjtJQUN0QyxPQUFPLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBDT01QQVJJU09OX09QRVJBVE9SUyA9IFsnZXEnLCAnbmUnLCAnZ3QnLCAnZ2UnLCAnbHQnLCAnbGUnXTtcbmNvbnN0IExPR0lDQUxfT1BFUkFUT1JTID0gWydhbmQnLCAnb3InLCAnbm90J107XG5jb25zdCBDT0xMRUNUSU9OX09QRVJBVE9SUyA9IFsnYW55JywgJ2FsbCddO1xuY29uc3QgQk9PTEVBTl9GVU5DVElPTlMgPSBbJ3N0YXJ0c3dpdGgnLCAnZW5kc3dpdGgnLCAnY29udGFpbnMnXTtcbmNvbnN0IFNVUFBPUlRFRF9FWFBBTkRfUFJPUEVSVElFUyA9IFtcbiAgJ2V4cGFuZCcsXG4gICdsZXZlbHMnLFxuICAnc2VsZWN0JyxcbiAgJ3RvcCcsXG4gICdjb3VudCcsXG4gICdvcmRlcmJ5JyxcbiAgJ2ZpbHRlcicsXG5dO1xuXG5jb25zdCBGVU5DVElPTl9SRUdFWCA9IC9cXCgoLiopXFwpLztcbmNvbnN0IElOREVYT0ZfUkVHRVggPSAvKD8haW5kZXhvZilcXCgoXFx3KylcXCkvO1xuXG5leHBvcnQgdHlwZSBVbnBhY2tlZDxUPiA9IFQgZXh0ZW5kcyAoaW5mZXIgVSlbXSA/IFUgOiBUO1xuZXhwb3J0IHR5cGUgU2VsZWN0PFQ+ID0gU2VsZWN0VHlwZTxUPiB8IFNlbGVjdFR5cGU8VD5bXTtcbmV4cG9ydCB0eXBlIFNlbGVjdFR5cGU8VD4gPSBzdHJpbmcgfCBrZXlvZiBUO1xuZXhwb3J0IHR5cGUgRmlsdGVyPFQ+ID0gRmlsdGVyVHlwZSB8IEZpbHRlclR5cGVbXTtcbmV4cG9ydCB0eXBlIEZpbHRlclR5cGUgPSBzdHJpbmcgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuZXhwb3J0IGVudW0gU3RhbmRhcmRBZ2dyZWdhdGVNZXRob2RzIHtcbiAgc3VtID0gJ3N1bScsXG4gIG1pbiA9ICdtaW4nLFxuICBtYXggPSAnbWF4JyxcbiAgYXZlcmFnZSA9ICdhdmVyYWdlJyxcbiAgY291bnRkaXN0aW5jdCA9ICdjb3VudGRpc3RpbmN0Jyxcbn1cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0ZVR5cGUgPVxuICB8IHN0cmluZ1xuICB8IHsgW3Byb3BlcnR5TmFtZTogc3RyaW5nXTogeyB3aXRoOiBTdGFuZGFyZEFnZ3JlZ2F0ZU1ldGhvZHM7IGFzOiBzdHJpbmcgfSB9O1xuXG4vLyBPcmRlckJ5XG5cbmV4cG9ydCB0eXBlIE9yZGVyQnk8VD4gPSBPcmRlckJ5VHlwZTxUPiB8IE9yZGVyQnlUeXBlPFQ+W107XG5leHBvcnQgdHlwZSBPcmRlckJ5VHlwZTxUPiA9IHN0cmluZyB8IE9yZGVyQnlPYmplY3Q8VD47XG5leHBvcnQgdHlwZSBPcmRlckJ5T2JqZWN0PFQ+ID1cbiAgfCBrZXlvZiBUXG4gIHwgW2tleW9mIFQgfCBzdHJpbmcsICdhc2MnIHwgJ2Rlc2MnXVxuICB8IE5lc3RlZE9yZGVyQnk8VD47XG5leHBvcnQgdHlwZSBOZXN0ZWRPcmRlckJ5PFQ+ID0ge1xuICBbUCBpbiBrZXlvZiBUXT86IFRbUF0gZXh0ZW5kcyBBcnJheTxpbmZlciBFPiA/IE9yZGVyQnk8RT4gOiBPcmRlckJ5PFRbUF0+O1xufTtcblxuLy8gRXhwYW5kXG5leHBvcnQgdHlwZSBFeHBhbmQ8VD4gPSBFeHBhbmRUeXBlPFQ+IHwgRXhwYW5kVHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZTxUPiA9IHN0cmluZyB8IEV4cGFuZE9iamVjdDxUPjtcbmV4cG9ydCB0eXBlIEV4cGFuZE9iamVjdDxUPiA9IGtleW9mIFQgfCBOZXN0ZWRFeHBhbmRPcHRpb25zPFQ+O1xuZXhwb3J0IHR5cGUgTmVzdGVkRXhwYW5kT3B0aW9uczxUPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF0/OiBFeHBhbmRPcHRpb25zPFVucGFja2VkPFRbUF0+Pjtcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRPcHRpb25zPFQ+ID0ge1xuICBzZWxlY3Q/OiBTZWxlY3Q8VD47XG4gIGZpbHRlcj86IEZpbHRlcjxUPjtcbiAgb3JkZXJCeT86IE9yZGVyQnk8VD47XG4gIHRvcD86IG51bWJlcjtcbiAgc2tpcD86IG51bWJlcjtcbiAgbGV2ZWxzPzogbnVtYmVyIHwgJ21heCc7XG4gIGNvdW50PzogYm9vbGVhbiB8IEZpbHRlcjxUPjtcbiAgZXhwYW5kPzogRXhwYW5kPFQ+O1xufTtcblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtPFQ+ID0ge1xuICBhZ2dyZWdhdGU/OiBBZ2dyZWdhdGVUeXBlIHwgQXJyYXk8QWdncmVnYXRlVHlwZT47XG4gIGZpbHRlcj86IEZpbHRlcjxUPjtcbiAgZ3JvdXBCeT86IEdyb3VwQnlUeXBlPFQ+O1xufTtcbmV4cG9ydCB0eXBlIEdyb3VwQnlUeXBlPFQ+ID0ge1xuICBwcm9wZXJ0aWVzOiBBcnJheTxrZXlvZiBUPjtcbiAgdHJhbnNmb3JtPzogVHJhbnNmb3JtPFQ+O1xufTtcblxuZXhwb3J0IGVudW0gUXVlcnlDdXN0b21UeXBlcyB7XG4gIFJhdyxcbiAgQWxpYXMsXG4gIER1cmF0aW9uLFxuICBCaW5hcnksXG59XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q3VzdG9tVHlwZSA9IHtcbiAgdHlwZTogUXVlcnlDdXN0b21UeXBlcztcbiAgdmFsdWU6IGFueTtcbiAgbmFtZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBWYWx1ZSA9IHN0cmluZyB8IERhdGUgfCBudW1iZXIgfCBib29sZWFuIHwgUXVlcnlDdXN0b21UeXBlO1xuXG4vL2h0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfUXVlcnlPcHRpb25zXG5leHBvcnQgY29uc3QgcmF3ID0gKHZhbHVlOiBzdHJpbmcpOiBRdWVyeUN1c3RvbVR5cGUgPT4gKHtcbiAgdHlwZTogUXVlcnlDdXN0b21UeXBlcy5SYXcsXG4gIHZhbHVlLFxufSk7XG5leHBvcnQgY29uc3QgYWxpYXMgPSAodmFsdWU6IGFueSwgbmFtZT86IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLkFsaWFzLFxuICB2YWx1ZSxcbiAgbmFtZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uID0gKHZhbHVlOiBzdHJpbmcpOiBRdWVyeUN1c3RvbVR5cGUgPT4gKHtcbiAgdHlwZTogUXVlcnlDdXN0b21UeXBlcy5EdXJhdGlvbixcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBiaW5hcnkgPSAodmFsdWU6IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLkJpbmFyeSxcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBpc1F1ZXJ5Q3VzdG9tVHlwZSA9ICh2YWx1ZTogYW55KSA9PlxuICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICd0eXBlJyBpbiB2YWx1ZSAmJlxuICB2YWx1ZS50eXBlIGluIFF1ZXJ5Q3VzdG9tVHlwZXM7XG5cbmV4cG9ydCBjb25zdCBpc1Jhd1R5cGUgPSAodmFsdWU6IGFueSkgPT5cbiAgaXNRdWVyeUN1c3RvbVR5cGUodmFsdWUpICYmXG4gICh2YWx1ZSBhcyBRdWVyeUN1c3RvbVR5cGUpLnR5cGUgPT09IFF1ZXJ5Q3VzdG9tVHlwZXMuUmF3O1xuXG5leHBvcnQgdHlwZSBRdWVyeU9wdGlvbnM8VD4gPSBFeHBhbmRPcHRpb25zPFQ+ICYge1xuICBzZWFyY2g6IHN0cmluZztcbiAgYXBwbHk6IHN0cmluZztcbiAgdHJhbnNmb3JtOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W107XG4gIHNraXA6IG51bWJlcjtcbiAgc2tpcHRva2VuOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nIHwgbnVtYmVyIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIGNvdW50OiBib29sZWFuIHwgRmlsdGVyPFQ+O1xuICBhY3Rpb246IHN0cmluZztcbiAgZnVuYzogc3RyaW5nIHwgeyBbZnVuY3Rpb25OYW1lOiBzdHJpbmddOiB7IFtwYXJhbWV0ZXJOYW1lOiBzdHJpbmddOiBhbnkgfSB9O1xuICBmb3JtYXQ6IHN0cmluZztcbiAgYWxpYXNlczogUXVlcnlDdXN0b21UeXBlW107XG4gIGVzY2FwZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBJVEVNX1JPT1QgPSAnJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gPFQ+KHtcbiAgc2VsZWN0LFxuICBzZWFyY2gsXG4gIHNraXB0b2tlbixcbiAgZm9ybWF0LFxuICB0b3AsXG4gIHNraXAsXG4gIGZpbHRlcixcbiAgdHJhbnNmb3JtLFxuICBvcmRlckJ5LFxuICBrZXksXG4gIGNvdW50LFxuICBleHBhbmQsXG4gIGFjdGlvbixcbiAgZnVuYyxcbiAgYWxpYXNlcyxcbiAgZXNjYXBlLFxufTogUGFydGlhbDxRdWVyeU9wdGlvbnM8VD4+ID0ge30pIHtcbiAgY29uc3QgW3BhdGgsIHBhcmFtc10gPSBidWlsZFBhdGhBbmRRdWVyeSh7XG4gICAgc2VsZWN0LFxuICAgIHNlYXJjaCxcbiAgICBza2lwdG9rZW4sXG4gICAgZm9ybWF0LFxuICAgIHRvcCxcbiAgICBza2lwLFxuICAgIGZpbHRlcixcbiAgICB0cmFuc2Zvcm0sXG4gICAgb3JkZXJCeSxcbiAgICBrZXksXG4gICAgY291bnQsXG4gICAgZXhwYW5kLFxuICAgIGFjdGlvbixcbiAgICBmdW5jLFxuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICB9KTtcblxuICByZXR1cm4gYnVpbGRVcmwocGF0aCwgcGFyYW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGF0aEFuZFF1ZXJ5PFQ+KHtcbiAgc2VsZWN0LFxuICBzZWFyY2gsXG4gIHNraXB0b2tlbixcbiAgZm9ybWF0LFxuICB0b3AsXG4gIHNraXAsXG4gIGZpbHRlcixcbiAgYXBwbHksXG4gIHRyYW5zZm9ybSxcbiAgb3JkZXJCeSxcbiAga2V5LFxuICBjb3VudCxcbiAgZXhwYW5kLFxuICBhY3Rpb24sXG4gIGZ1bmMsXG4gIGFsaWFzZXMsXG4gIGVzY2FwZSxcbn06IFBhcnRpYWw8UXVlcnlPcHRpb25zPFQ+PiA9IHt9KTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dIHtcbiAgbGV0IHBhdGg6IHN0cmluZyA9ICcnO1xuICBhbGlhc2VzID0gYWxpYXNlcyB8fCBbXTtcblxuICBjb25zdCBxdWVyeTogYW55ID0ge307XG5cbiAgLy8ga2V5IGlzIG5vdCAobnVsbCwgdW5kZWZpbmVkKVxuICBpZiAoa2V5ICE9IHVuZGVmaW5lZCkge1xuICAgIHBhdGggKz0gYCgke25vcm1hbGl6ZVZhbHVlKGtleSBhcyBWYWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9KWA7XG4gIH1cblxuICAvLyBTZWxlY3RcbiAgaWYgKHNlbGVjdCkge1xuICAgIHF1ZXJ5LiRzZWxlY3QgPSBpc1Jhd1R5cGUoc2VsZWN0KVxuICAgICAgPyAoc2VsZWN0IGFzIHVua25vd24gYXMgUXVlcnlDdXN0b21UeXBlKS52YWx1ZVxuICAgICAgOiBBcnJheS5pc0FycmF5KHNlbGVjdClcbiAgICAgID8gc2VsZWN0LmpvaW4oJywnKVxuICAgICAgOiBzZWxlY3Q7XG4gIH1cblxuICAvLyBTZWFyY2hcbiAgaWYgKHNlYXJjaCkge1xuICAgIHF1ZXJ5LiRzZWFyY2ggPSBzZWFyY2g7XG4gIH1cblxuICAvLyBTa2lwdG9rZW5cbiAgaWYgKHNraXB0b2tlbikge1xuICAgIHF1ZXJ5LiRza2lwdG9rZW4gPSBza2lwdG9rZW47XG4gIH1cblxuICAvLyBGb3JtYXRcbiAgaWYgKGZvcm1hdCkge1xuICAgIHF1ZXJ5LiRmb3JtYXQgPSBmb3JtYXQ7XG4gIH1cblxuICAvLyBGaWx0ZXJcbiAgaWYgKGZpbHRlciB8fCB0eXBlb2YgY291bnQgPT09ICdvYmplY3QnKSB7XG4gICAgcXVlcnkuJGZpbHRlciA9IGJ1aWxkRmlsdGVyKHR5cGVvZiBjb3VudCA9PT0gJ29iamVjdCcgPyBjb3VudCA6IGZpbHRlciwge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIGVzY2FwZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRyYW5zZm9ybVxuICBpZiAodHJhbnNmb3JtKSB7XG4gICAgcXVlcnkuJGFwcGx5ID0gYnVpbGRUcmFuc2Zvcm1zKHRyYW5zZm9ybSwgeyBhbGlhc2VzLCBlc2NhcGUgfSk7XG4gIH1cblxuICAvLyBBcHBseVxuICBpZiAoYXBwbHkpIHtcbiAgICBxdWVyeS4kYXBwbHkgPSBxdWVyeS4kYXBwbHlcbiAgICAgID8gcXVlcnkuJGFwcGx5ICsgJy8nICsgYnVpbGRBcHBseShhcHBseSwgeyBhbGlhc2VzLCBlc2NhcGUgfSlcbiAgICAgIDogYnVpbGRBcHBseShhcHBseSwgeyBhbGlhc2VzLCBlc2NhcGUgfSk7XG4gIH1cblxuICAvLyBFeHBhbmRcbiAgaWYgKGV4cGFuZCkge1xuICAgIHF1ZXJ5LiRleHBhbmQgPSBidWlsZEV4cGFuZChleHBhbmQsIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICB9XG5cbiAgLy8gT3JkZXJCeVxuICBpZiAob3JkZXJCeSkge1xuICAgIHF1ZXJ5LiRvcmRlcmJ5ID0gYnVpbGRPcmRlckJ5KG9yZGVyQnkpO1xuICB9XG5cbiAgLy8gQ291bnRcbiAgaWYgKGlzUmF3VHlwZShjb3VudCkpIHtcbiAgICBxdWVyeS4kY291bnQgPSAoY291bnQgYXMgUXVlcnlDdXN0b21UeXBlKS52YWx1ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY291bnQgPT09ICdib29sZWFuJykge1xuICAgIHF1ZXJ5LiRjb3VudCA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY291bnQpIHtcbiAgICBwYXRoICs9ICcvJGNvdW50JztcbiAgfVxuXG4gIC8vIFRvcFxuICBpZiAoaXNSYXdUeXBlKHRvcCkpIHtcbiAgICBxdWVyeS4kdG9wID0gKHRvcCBhcyB1bmtub3duIGFzIFF1ZXJ5Q3VzdG9tVHlwZSkudmFsdWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHRvcCA9PT0gJ251bWJlcicpIHtcbiAgICBxdWVyeS4kdG9wID0gdG9wO1xuICB9XG5cbiAgLy8gU2tpcFxuICBpZiAoaXNSYXdUeXBlKHNraXApKSB7XG4gICAgcXVlcnkuJHRvcCA9IChza2lwIGFzIHVua25vd24gYXMgUXVlcnlDdXN0b21UeXBlKS52YWx1ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2tpcCA9PT0gJ251bWJlcicpIHtcbiAgICBxdWVyeS4kc2tpcCA9IHNraXA7XG4gIH1cblxuICBpZiAoYWN0aW9uKSB7XG4gICAgcGF0aCArPSBgLyR7YWN0aW9ufWA7XG4gIH1cblxuICBpZiAoZnVuYykge1xuICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHBhdGggKz0gYC8ke2Z1bmN9KClgO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBbZnVuY05hbWVdID0gT2JqZWN0LmtleXMoZnVuYyk7XG4gICAgICBjb25zdCBmdW5jQXJncyA9IG5vcm1hbGl6ZVZhbHVlKGZ1bmNbZnVuY05hbWVdIGFzIFZhbHVlLCB7XG4gICAgICAgIGFsaWFzZXMsXG4gICAgICAgIGVzY2FwZSxcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoICs9IGAvJHtmdW5jTmFtZX0oJHtmdW5jQXJnc30pYDtcbiAgICB9XG4gIH1cblxuICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgT2JqZWN0LmFzc2lnbihcbiAgICAgIHF1ZXJ5LFxuICAgICAgYWxpYXNlcy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGFsaWFzKSA9PlxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWNjLCB7XG4gICAgICAgICAgICBbYEAke2FsaWFzLm5hbWV9YF06IG5vcm1hbGl6ZVZhbHVlKGFsaWFzLnZhbHVlLCB7XG4gICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvLyBGaWx0ZXIgZW1wdHkgdmFsdWVzXG4gIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJycpXG4gICAgLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrZXldOiB2YWx1ZSB9KSwge30pO1xuXG4gIHJldHVybiBbcGF0aCwgcGFyYW1zXTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUHJpbWl0aXZlVmFsdWUoXG4gIGtleTogc3RyaW5nLFxuICB2YWw6IGFueSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gIH1cbikge1xuICByZXR1cm4gYCR7a2V5fSBlcSAke25vcm1hbGl6ZVZhbHVlKHZhbCwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9YDtcbn1cblxuZnVuY3Rpb24gYnVpbGRGaWx0ZXIoXG4gIGZpbHRlcnM6IEZpbHRlcjxhbnk+ID0ge30sXG4gIHtcbiAgICBhbGlhc2VzLFxuICAgIHByb3BQcmVmaXgsXG4gICAgZXNjYXBlLFxuICB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgcHJvcFByZWZpeD86IHN0cmluZzsgZXNjYXBlPzogYm9vbGVhbiB9XG4pOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIChBcnJheS5pc0FycmF5KGZpbHRlcnMpID8gZmlsdGVycyA6IFtmaWx0ZXJzXSkucmVkdWNlKFxuICAgICAgKGFjYzogc3RyaW5nW10sIGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgY29uc3QgYnVpbHRGaWx0ZXIgPSBidWlsZEZpbHRlckNvcmUoZmlsdGVyLCB7XG4gICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgcHJvcFByZWZpeCxcbiAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXIpIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKGJ1aWx0RmlsdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICBbXVxuICAgICkgYXMgc3RyaW5nW11cbiAgKS5qb2luKCcgYW5kICcpO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkRmlsdGVyQ29yZShcbiAgICBmaWx0ZXI6IEZpbHRlcjxhbnk+ID0ge30sXG4gICAge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIHByb3BQcmVmaXgsXG4gICAgICBlc2NhcGUsXG4gICAgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IHByb3BQcmVmaXg/OiBzdHJpbmc7IGVzY2FwZT86IGJvb2xlYW4gfVxuICApIHtcbiAgICBsZXQgZmlsdGVyRXhwciA9ICcnO1xuICAgIGlmIChpc1Jhd1R5cGUoZmlsdGVyKSkge1xuICAgICAgLy8gVXNlIHJhdyBxdWVyeSBjdXN0b20gZmlsdGVyIHN0cmluZ1xuICAgICAgZmlsdGVyRXhwciA9IChmaWx0ZXIgYXMgUXVlcnlDdXN0b21UeXBlKS52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBVc2UgcmF3IGZpbHRlciBzdHJpbmdcbiAgICAgIGZpbHRlckV4cHIgPSBmaWx0ZXI7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIgJiYgdHlwZW9mIGZpbHRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNBcnJheSA9IE9iamVjdC5rZXlzKGZpbHRlcikucmVkdWNlKFxuICAgICAgICAocmVzdWx0OiBhbnlbXSwgZmlsdGVyS2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAoZmlsdGVyIGFzIGFueSlbZmlsdGVyS2V5XTtcbiAgICAgICAgICBsZXQgcHJvcE5hbWUgPSAnJztcbiAgICAgICAgICBpZiAocHJvcFByZWZpeCkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcktleSA9PT0gSVRFTV9ST09UKSB7XG4gICAgICAgICAgICAgIHByb3BOYW1lID0gcHJvcFByZWZpeDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoSU5ERVhPRl9SRUdFWC50ZXN0KGZpbHRlcktleSkpIHtcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPSBmaWx0ZXJLZXkucmVwbGFjZShJTkRFWE9GX1JFR0VYLCAoXywgJDEpID0+XG4gICAgICAgICAgICAgICAgJDEudHJpbSgpID09PSBJVEVNX1JPT1RcbiAgICAgICAgICAgICAgICAgID8gYCgke3Byb3BQcmVmaXh9KWBcbiAgICAgICAgICAgICAgICAgIDogYCgke3Byb3BQcmVmaXh9LyR7JDEudHJpbSgpfSlgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEZVTkNUSU9OX1JFR0VYLnRlc3QoZmlsdGVyS2V5KSkge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IGZpbHRlcktleS5yZXBsYWNlKEZVTkNUSU9OX1JFR0VYLCAoXywgJDEpID0+XG4gICAgICAgICAgICAgICAgJDEudHJpbSgpID09PSBJVEVNX1JPT1RcbiAgICAgICAgICAgICAgICAgID8gYCgke3Byb3BQcmVmaXh9KWBcbiAgICAgICAgICAgICAgICAgIDogYCgke3Byb3BQcmVmaXh9LyR7JDEudHJpbSgpfSlgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IGAke3Byb3BQcmVmaXh9LyR7ZmlsdGVyS2V5fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3BOYW1lID0gZmlsdGVyS2V5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWx0ZXJLZXkgPT09IElURU1fUk9PVCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLm1hcCgoYXJyYXlWYWx1ZTogYW55KSA9PlxuICAgICAgICAgICAgICAgIHJlbmRlclByaW1pdGl2ZVZhbHVlKHByb3BOYW1lLCBhcnJheVZhbHVlLCB7IGVzY2FwZSwgYWxpYXNlcyB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFsnbnVtYmVyJywgJ3N0cmluZycsICdib29sZWFuJ10uaW5kZXhPZih0eXBlb2YgdmFsdWUpICE9PSAtMSB8fFxuICAgICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU2ltcGxlIGtleS92YWx1ZSBoYW5kbGVkIGFzIGVxdWFscyBvcGVyYXRvclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgIHJlbmRlclByaW1pdGl2ZVZhbHVlKHByb3BOYW1lLCB2YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBmaWx0ZXJLZXk7XG4gICAgICAgICAgICBjb25zdCBidWlsdEZpbHRlcnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAubWFwKCh2KSA9PiBidWlsZEZpbHRlcih2LCB7IGFsaWFzZXMsIHByb3BQcmVmaXgsIGVzY2FwZSB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoZikgPT4gZilcbiAgICAgICAgICAgICAgLm1hcCgoZikgPT5cbiAgICAgICAgICAgICAgICBMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEgPyBgKCR7Zn0pYCA6IGZcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChidWlsdEZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlmIChMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgaWYgKG9wID09PSAnbm90Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZU5vdChidWlsdEZpbHRlcnMgYXMgc3RyaW5nW10pKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAoJHtidWlsdEZpbHRlcnMuam9pbihgICR7b3B9IGApfSlgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYnVpbHRGaWx0ZXJzLmpvaW4oYCAke29wfSBgKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKExPR0lDQUxfT1BFUkFUT1JTLmluZGV4T2YocHJvcE5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBwcm9wTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWx0RmlsdGVycyA9IE9iamVjdC5rZXlzKHZhbHVlKS5tYXAoKHZhbHVlS2V5KSA9PlxuICAgICAgICAgICAgICBidWlsZEZpbHRlckNvcmUoXG4gICAgICAgICAgICAgICAgeyBbdmFsdWVLZXldOiB2YWx1ZVt2YWx1ZUtleV0gfSxcbiAgICAgICAgICAgICAgICB7IGFsaWFzZXMsIGVzY2FwZSB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAob3AgPT09ICdub3QnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VOb3QoYnVpbHRGaWx0ZXJzIGFzIHN0cmluZ1tdKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7YnVpbHRGaWx0ZXJzLmpvaW4oYCAke29wfSBgKX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCd0eXBlJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICByZW5kZXJQcmltaXRpdmVWYWx1ZShwcm9wTmFtZSwgdmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgICAgICAgICAgIG9wZXJhdG9ycy5mb3JFYWNoKChvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChDT01QQVJJU09OX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBgJHtwcm9wTmFtZX0gJHtvcH0gJHtub3JtYWxpemVWYWx1ZSh2YWx1ZVtvcF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKExPR0lDQUxfT1BFUkFUT1JTLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVbb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtvcF1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh2OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJygnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZEZpbHRlckNvcmUodiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BQcmVmaXg6IHByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKGAgJHtvcH0gYClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICcoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZEZpbHRlckNvcmUodmFsdWVbb3BdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BQcmVmaXg6IHByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKENPTExFQ1RJT05fT1BFUkFUT1JTLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkNsYXVzZSA9IGJ1aWxkQ29sbGVjdGlvbkNsYXVzZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyS2V5LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW29wXSxcbiAgICAgICAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25DbGF1c2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sbGVjdGlvbkNsYXVzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2hhcycpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBgJHtwcm9wTmFtZX0gJHtvcH0gJHtub3JtYWxpemVWYWx1ZSh2YWx1ZVtvcF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAnaW4nKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRpbmdWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlW29wXSlcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVtvcF1cbiAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZVtvcF0udmFsdWUubWFwKCh0eXBlZFZhbHVlOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZVtvcF0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0eXBlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAnIGluICgnICtcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHY6IGFueSkgPT4gbm9ybWFsaXplVmFsdWUodiwgeyBhbGlhc2VzLCBlc2NhcGUgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCcpICtcbiAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChCT09MRUFOX0ZVTkNUSU9OUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBib29sZWFuIGZ1bmN0aW9ucyAoc3RhcnRzd2l0aCwgZW5kc3dpdGgsIGNvbnRhaW5zKVxuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGAke29wfSgke3Byb3BOYW1lfSwke25vcm1hbGl6ZVZhbHVlKHZhbHVlW29wXSwge1xuICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICB9KX0pYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gTmVzdGVkIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBidWlsZEZpbHRlckNvcmUodmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcFByZWZpeDogcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUvb21pdCBmaWx0ZXIgaWYgdmFsdWUgaXMgYHVuZGVmaW5lZGBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIHR5cGU6ICR7dmFsdWV9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlckV4cHIgPSBmaWx0ZXJzQXJyYXkuam9pbignIGFuZCAnKTtcbiAgICB9IC8qIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZmlsdGVycyB0eXBlOiAke2ZpbHRlcn1gKTtcbiAgICAgIH0gKi9cbiAgICByZXR1cm4gZmlsdGVyRXhwcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkQ29sbGVjdGlvbkNsYXVzZShcbiAgICBsYW1iZGFQYXJhbWV0ZXI6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIG9wOiBzdHJpbmcsXG4gICAgcHJvcE5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBsZXQgY2xhdXNlID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgY2xhdXNlID0gZ2V0U3RyaW5nQ29sbGVjdGlvbkNsYXVzZShsYW1iZGFQYXJhbWV0ZXIsIHZhbHVlLCBvcCwgcHJvcE5hbWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIC8vIG5vcm1hbGl6ZSB7YW55Olt7cHJvcDE6IDF9LCB7cHJvcDI6IDF9XX0gLS0+IHthbnk6e3Byb3AxOiAxLCBwcm9wMjogMX19OyBzYW1lIGZvciAnYWxsJyxcbiAgICAgIC8vIHNpbXBsZSB2YWx1ZXMgY29sbGVjdGlvbjoge2FueTpbeycnOiAnc2ltcGxlVmFsMSd9LCB7Jyc6ICdzaW1wbGVWYWwyJ31dfSAtLT4ge2FueTp7Jyc6IFsnc2ltcGxlVmFsMScsICdzaW1wbGVWYWwyJ119fTsgc2FtZSBmb3IgJ2FsbCcsXG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmhhc093blByb3BlcnR5KElURU1fUk9PVCkpIHtcbiAgICAgICAgICAgICAgaWYgKCFhY2MuaGFzT3duUHJvcGVydHkoSVRFTV9ST09UKSkge1xuICAgICAgICAgICAgICAgIGFjY1tJVEVNX1JPT1RdID0gW107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYWNjW0lURU1fUk9PVF0ucHVzaChpdGVtW0lURU1fUk9PVF0pO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCAuLi5pdGVtIH07XG4gICAgICAgICAgfSwge30pXG4gICAgICAgIDogdmFsdWU7XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IGJ1aWxkRmlsdGVyQ29yZShmaWx0ZXJWYWx1ZSwge1xuICAgICAgICBhbGlhc2VzLFxuICAgICAgICBwcm9wUHJlZml4OiBsYW1iZGFQYXJhbWV0ZXIsXG4gICAgICAgIGVzY2FwZSxcbiAgICAgIH0pO1xuICAgICAgY2xhdXNlID0gYCR7cHJvcE5hbWV9LyR7b3B9KCR7XG4gICAgICAgIGZpbHRlciA/IGAke2xhbWJkYVBhcmFtZXRlcn06JHtmaWx0ZXJ9YCA6ICcnXG4gICAgICB9KWA7XG4gICAgfVxuICAgIHJldHVybiBjbGF1c2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nQ29sbGVjdGlvbkNsYXVzZShcbiAgbGFtYmRhUGFyYW1ldGVyOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIGNvbGxlY3Rpb25PcGVyYXRvcjogc3RyaW5nLFxuICBwcm9wTmFtZTogc3RyaW5nXG4pIHtcbiAgbGV0IGNsYXVzZSA9ICcnO1xuICBjb25zdCBjb25kaXRpb25PcGVyYXRvciA9IGNvbGxlY3Rpb25PcGVyYXRvciA9PSAnYWxsJyA/ICduZScgOiAnZXEnO1xuICBjbGF1c2UgPSBgJHtwcm9wTmFtZX0vJHtjb2xsZWN0aW9uT3BlcmF0b3J9KCR7bGFtYmRhUGFyYW1ldGVyfTogJHtsYW1iZGFQYXJhbWV0ZXJ9ICR7Y29uZGl0aW9uT3BlcmF0b3J9ICcke3ZhbHVlfScpYDtcblxuICByZXR1cm4gY2xhdXNlO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVJbGxlZ2FsQ2hhcnMoc3RyaW5nOiBzdHJpbmcpIHtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyUvZywgJyUyNScpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwrL2csICclMkInKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcLy9nLCAnJTJGJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXD8vZywgJyUzRicpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvIy9nLCAnJTIzJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC8mL2csICclMjYnKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLycvZywgXCInJ1wiKTtcbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKFxuICB2YWx1ZTogVmFsdWUsXG4gIHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSA9IGZhbHNlLFxuICB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9ID0ge31cbik6IGFueSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVzY2FwZSA/IGAnJHtlc2NhcGVJbGxlZ2FsQ2hhcnModmFsdWUpfSdgIDogYCcke3ZhbHVlfSdgO1xuICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gYFske3ZhbHVlXG4gICAgICAubWFwKChkKSA9PiBub3JtYWxpemVWYWx1ZShkLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSlcbiAgICAgIC5qb2luKCcsJyl9XWA7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodmFsdWUudHlwZSkge1xuICAgICAgY2FzZSBRdWVyeUN1c3RvbVR5cGVzLlJhdzpcbiAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgY2FzZSBRdWVyeUN1c3RvbVR5cGVzLkR1cmF0aW9uOlxuICAgICAgICByZXR1cm4gYGR1cmF0aW9uJyR7dmFsdWUudmFsdWV9J2A7XG4gICAgICBjYXNlIFF1ZXJ5Q3VzdG9tVHlwZXMuQmluYXJ5OlxuICAgICAgICByZXR1cm4gYGJpbmFyeScke3ZhbHVlLnZhbHVlfSdgO1xuICAgICAgY2FzZSBRdWVyeUN1c3RvbVR5cGVzLkFsaWFzOlxuICAgICAgICAvLyBTdG9yZVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhbGlhc2VzKSkge1xuICAgICAgICAgIGlmICh2YWx1ZS5uYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhbHVlLm5hbWUgPSBgYSR7YWxpYXNlcy5sZW5ndGggKyAxfWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFsaWFzZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBAJHt2YWx1ZS5uYW1lfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpXG4gICAgICAgICAgLmZpbHRlcigoWywgdl0pID0+IHYgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgKFtrLCB2XSkgPT5cbiAgICAgICAgICAgICAgYCR7a309JHtub3JtYWxpemVWYWx1ZSh2IGFzIFZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KX1gXG4gICAgICAgICAgKVxuICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYnVpbGRFeHBhbmQ8VD4oXG4gIGV4cGFuZHM6IEV4cGFuZDxUPixcbiAgeyBhbGlhc2VzLCBlc2NhcGUgPSBmYWxzZSB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9XG4pOiBzdHJpbmcge1xuICBpZiAoaXNSYXdUeXBlKGV4cGFuZHMpKSB7XG4gICAgcmV0dXJuIChleHBhbmRzIGFzIFF1ZXJ5Q3VzdG9tVHlwZSkudmFsdWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cGFuZHMgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGV4cGFuZHMgYXMgYW55O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBhbmRzID09PSAnc3RyaW5nJykge1xuICAgIGlmIChleHBhbmRzLmluZGV4T2YoJy8nKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBleHBhbmRzO1xuICAgIH1cblxuICAgIC8vIENoYW5nZSBgRm9vL0Jhci9CYXpgIHRvIGBGb28oJGV4cGFuZD1CYXIoJGV4cGFuZD1CYXopKWBcbiAgICByZXR1cm4gZXhwYW5kc1xuICAgICAgLnNwbGl0KCcvJylcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5yZWR1Y2UoKHJlc3VsdHMsIGl0ZW0sIGluZGV4LCBhcnIpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgLy8gSW5uZXItbW9zdCBpdGVtXG4gICAgICAgICAgcmV0dXJuIGAkZXhwYW5kPSR7aXRlbX1gO1xuICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSBhcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIC8vIE91dGVyLW1vc3QgaXRlbSwgZG9uJ3QgYWRkIGAkZXhwYW5kPWAgcHJlZml4IChhZGRlZCBhYm92ZSlcbiAgICAgICAgICByZXR1cm4gYCR7aXRlbX0oJHtyZXN1bHRzfSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyIGl0ZW1zXG4gICAgICAgICAgcmV0dXJuIGAkZXhwYW5kPSR7aXRlbX0oJHtyZXN1bHRzfSlgO1xuICAgICAgICB9XG4gICAgICB9LCAnJyk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShleHBhbmRzKSkge1xuICAgIHJldHVybiBgJHsoZXhwYW5kcyBhcyBBcnJheTxOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4+KVxuICAgICAgLm1hcCgoZSkgPT4gYnVpbGRFeHBhbmQoZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSkpXG4gICAgICAuam9pbignLCcpfWA7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cGFuZHMgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXhwYW5kS2V5cyA9IE9iamVjdC5rZXlzKGV4cGFuZHMpO1xuXG4gICAgaWYgKFxuICAgICAgZXhwYW5kS2V5cy5zb21lKFxuICAgICAgICAoa2V5KSA9PiBTVVBQT1JURURfRVhQQU5EX1BST1BFUlRJRVMuaW5kZXhPZihrZXkudG9Mb3dlckNhc2UoKSkgIT09IC0xXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZXhwYW5kS2V5c1xuICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAgICAgICAgIHZhbHVlID0gYnVpbGRGaWx0ZXIoKGV4cGFuZHMgYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+KVtrZXldLCB7XG4gICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyQnknOlxuICAgICAgICAgICAgICB2YWx1ZSA9IGJ1aWxkT3JkZXJCeShcbiAgICAgICAgICAgICAgICAoZXhwYW5kcyBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4pW2tleV0gYXMgT3JkZXJCeTxUPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xldmVscyc6XG4gICAgICAgICAgICBjYXNlICdjb3VudCc6XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgY2FzZSAnc2tpcCc6XG4gICAgICAgICAgICAgIHZhbHVlID0gYCR7KGV4cGFuZHMgYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+KVtrZXldfWA7XG4gICAgICAgICAgICAgIGlmIChpc1Jhd1R5cGUodmFsdWUpKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlIGFzIHVua25vd24gYXMgUXVlcnlDdXN0b21UeXBlKS52YWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB2YWx1ZSA9IGJ1aWxkRXhwYW5kKFxuICAgICAgICAgICAgICAgIChleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pilba2V5XSBhcyBFeHBhbmQ8VD4sXG4gICAgICAgICAgICAgICAgeyBhbGlhc2VzLCBlc2NhcGUgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCQke2tleS50b0xvd2VyQ2FzZSgpfT0ke3ZhbHVlfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCc7Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBleHBhbmRLZXlzXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWx0RXhwYW5kID0gYnVpbGRFeHBhbmQoXG4gICAgICAgICAgICAoZXhwYW5kcyBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4pW1xuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgIF0gYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+LFxuICAgICAgICAgICAgeyBhbGlhc2VzLCBlc2NhcGUgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGJ1aWx0RXhwYW5kID8gYCR7a2V5fSgke2J1aWx0RXhwYW5kfSlgIDoga2V5O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignLCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVHJhbnNmb3JtczxUPihcbiAgdHJhbnNmb3JtczogVHJhbnNmb3JtPFQ+IHwgVHJhbnNmb3JtPFQ+W10sXG4gIHsgYWxpYXNlcywgZXNjYXBlID0gZmFsc2UgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfVxuKSB7XG4gIC8vIFdyYXAgc2luZ2xlIG9iamVjdCBhbiBhcnJheSBmb3Igc2ltcGxpZmllZCBwcm9jZXNzaW5nXG4gIGNvbnN0IHRyYW5zZm9ybXNBcnJheSA9IEFycmF5LmlzQXJyYXkodHJhbnNmb3JtcykgPyB0cmFuc2Zvcm1zIDogW3RyYW5zZm9ybXNdO1xuXG4gIGNvbnN0IHRyYW5zZm9ybXNSZXN1bHQgPSB0cmFuc2Zvcm1zQXJyYXkucmVkdWNlKFxuICAgIChyZXN1bHQ6IHN0cmluZ1tdLCB0cmFuc2Zvcm0pID0+IHtcbiAgICAgIGNvbnN0IHsgYWdncmVnYXRlLCBmaWx0ZXIsIGdyb3VwQnksIC4uLnJlc3QgfSA9IHRyYW5zZm9ybTtcblxuICAgICAgLy8gVE9ETzogc3VwcG9ydCBhcyBtYW55IG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICAvLyAgIHRvcGNvdW50LCB0b3BzdW0sIHRvcHBlcmNlbnQsXG4gICAgICAvLyAgIGJvdHRvbXN1bSwgYm90dG9tY291bnQsIGJvdHRvbXBlcmNlbnQsXG4gICAgICAvLyAgIGlkZW50aXR5LCBjb25jYXQsIGV4cGFuZCwgc2VhcmNoLCBjb21wdXRlLCBpc2RlZmluZWRcbiAgICAgIGNvbnN0IHVuc3VwcG9ydGVkS2V5cyA9IE9iamVjdC5rZXlzKHJlc3QpO1xuICAgICAgaWYgKHVuc3VwcG9ydGVkS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0cmFuc2Zvcm0ocyk6ICR7dW5zdXBwb3J0ZWRLZXlzfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWdncmVnYXRlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGBhZ2dyZWdhdGUoJHtidWlsZEFnZ3JlZ2F0ZShhZ2dyZWdhdGUpfSlgKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgY29uc3QgYnVpbHRGaWx0ZXIgPSBidWlsZEZpbHRlcihmaWx0ZXIsIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICAgICAgICBpZiAoYnVpbHRGaWx0ZXIpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIGBmaWx0ZXIoJHtidWlsZEZpbHRlcihidWlsdEZpbHRlciwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICByZXN1bHQucHVzaChgZ3JvdXBieSgke2J1aWxkR3JvdXBCeShncm91cEJ5LCB7IGFsaWFzZXMsIGVzY2FwZSB9KX0pYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIHJldHVybiB0cmFuc2Zvcm1zUmVzdWx0LmpvaW4oJy8nKSB8fCB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWdncmVnYXRlKGFnZ3JlZ2F0ZTogQWdncmVnYXRlVHlwZSB8IEFnZ3JlZ2F0ZVR5cGVbXSkge1xuICAvLyBXcmFwIHNpbmdsZSBvYmplY3QgaW4gYW4gYXJyYXkgZm9yIHNpbXBsaWZpZWQgcHJvY2Vzc2luZ1xuICBjb25zdCBhZ2dyZWdhdGVBcnJheSA9IEFycmF5LmlzQXJyYXkoYWdncmVnYXRlKSA/IGFnZ3JlZ2F0ZSA6IFthZ2dyZWdhdGVdO1xuXG4gIHJldHVybiBhZ2dyZWdhdGVBcnJheVxuICAgIC5tYXAoKGFnZ3JlZ2F0ZUl0ZW0pID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgYWdncmVnYXRlSXRlbSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBhZ2dyZWdhdGVJdGVtXG4gICAgICAgIDogT2JqZWN0LmtleXMoYWdncmVnYXRlSXRlbSkubWFwKChhZ2dyZWdhdGVLZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZVZhbHVlID0gYWdncmVnYXRlSXRlbVthZ2dyZWdhdGVLZXldO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBBcmUgdGhlc2UgYWx3YXlzIHJlcXVpcmVkPyAgQ2FuL3Nob3VsZCB3ZSBkZWZhdWx0IHRoZW0gaWYgc28/XG4gICAgICAgICAgICBpZiAoIWFnZ3JlZ2F0ZVZhbHVlLndpdGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnd2l0aCcgcHJvcGVydHkgcmVxdWlyZWQgZm9yICcke2FnZ3JlZ2F0ZUtleX0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFnZ3JlZ2F0ZVZhbHVlLmFzKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJ2FzJyBwcm9wZXJ0eSByZXF1aXJlZCBmb3IgJyR7YWdncmVnYXRlS2V5fSdgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGAke2FnZ3JlZ2F0ZUtleX0gd2l0aCAke2FnZ3JlZ2F0ZVZhbHVlLndpdGh9IGFzICR7YWdncmVnYXRlVmFsdWUuYXN9YDtcbiAgICAgICAgICB9KTtcbiAgICB9KVxuICAgIC5qb2luKCcsJyk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkR3JvdXBCeTxUPihcbiAgZ3JvdXBCeTogR3JvdXBCeVR5cGU8VD4sXG4gIHsgYWxpYXNlcywgZXNjYXBlID0gZmFsc2UgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfVxuKSB7XG4gIGlmICghZ3JvdXBCeS5wcm9wZXJ0aWVzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAncHJvcGVydGllcycgcHJvcGVydHkgcmVxdWlyZWQgZm9yIGdyb3VwQnlgKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBgKCR7Z3JvdXBCeS5wcm9wZXJ0aWVzLmpvaW4oJywnKX0pYDtcblxuICBpZiAoZ3JvdXBCeS50cmFuc2Zvcm0pIHtcbiAgICByZXN1bHQgKz0gYCwke2J1aWxkVHJhbnNmb3Jtcyhncm91cEJ5LnRyYW5zZm9ybSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9YDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkT3JkZXJCeTxUPihvcmRlckJ5OiBPcmRlckJ5PFQ+LCBwcmVmaXg6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgaWYgKGlzUmF3VHlwZShvcmRlckJ5KSkge1xuICAgIHJldHVybiAob3JkZXJCeSBhcyBRdWVyeUN1c3RvbVR5cGUpLnZhbHVlO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3JkZXJCeSkpIHtcbiAgICByZXR1cm4gKG9yZGVyQnkgYXMgT3JkZXJCeU9iamVjdDxUPltdKVxuICAgICAgLm1hcCgodmFsdWUpID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICBbJ2FzYycsICdkZXNjJ10uaW5kZXhPZih2YWx1ZVsxXSkgIT09IC0xXG4gICAgICAgICAgPyB2YWx1ZS5qb2luKCcgJylcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICApXG4gICAgICAubWFwKCh2KSA9PiBgJHtwcmVmaXh9JHt2IGFzIHN0cmluZ31gKVxuICAgICAgLmpvaW4oJywnKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3JkZXJCeSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3JkZXJCeSlcbiAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYnVpbGRPcmRlckJ5KHYgYXMgT3JkZXJCeTxhbnk+LCBgJHtrfS9gKSlcbiAgICAgIC5tYXAoKHYpID0+IGAke3ByZWZpeH0ke3Z9YClcbiAgICAgIC5qb2luKCcsJyk7XG4gIH1cbiAgcmV0dXJuIGAke3ByZWZpeH0ke29yZGVyQnkgYXMgc3RyaW5nfWA7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXBwbHkoXG4gIGFwcGx5OiBhbnksXG4gIHsgYWxpYXNlcywgZXNjYXBlID0gZmFsc2UgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfVxuKSB7XG4gIGNvbnN0IGFwcGx5QXJyYXkgPSBBcnJheS5pc0FycmF5KGFwcGx5KSA/IGFwcGx5IDogW2FwcGx5XTtcbiAgcmV0dXJuIGFwcGx5QXJyYXlcbiAgICAubWFwKCh2KSA9PiBub3JtYWxpemVWYWx1ZSh2LCB7IGFsaWFzZXMsIGVzY2FwZSB9KSlcbiAgICAuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcge1xuICAvLyBUaGlzIGNhbiBiZSByZWZhY3RvcmVkIHVzaW5nIFVSTCBBUEkuIEJ1dCBJRSBkb2VzIG5vdCBzdXBwb3J0IGl0LlxuICBjb25zdCBxdWVyaWVzOiBzdHJpbmdbXSA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcykubWFwKFxuICAgIChba2V5LCB2YWx1ZV0pID0+IGAke2tleX09JHt2YWx1ZX1gXG4gICk7XG4gIHJldHVybiBxdWVyaWVzLmxlbmd0aCA/IGAke3BhdGh9PyR7cXVlcmllcy5qb2luKCcmJyl9YCA6IHBhdGg7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm90KGJ1aWx0RmlsdGVyczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYG5vdCgke2J1aWx0RmlsdGVycy5qb2luKCcgYW5kICcpfSlgO1xufVxuIl19
636
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsS0FBSztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtDQUNULENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUM7QUFRN0MsTUFBTSxDQUFOLElBQVksd0JBTVg7QUFORCxXQUFZLHdCQUF3QjtJQUNsQyx1Q0FBVyxDQUFBO0lBQ1gsdUNBQVcsQ0FBQTtJQUNYLHVDQUFXLENBQUE7SUFDWCwrQ0FBbUIsQ0FBQTtJQUNuQiwyREFBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBTlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQU1uQztBQTZDRCxNQUFNLENBQU4sSUFBWSxnQkFLWDtBQUxELFdBQVksZ0JBQWdCO0lBQzFCLHFEQUFHLENBQUE7SUFDSCx5REFBSyxDQUFBO0lBQ0wsK0RBQVEsQ0FBQTtJQUNSLDJEQUFNLENBQUE7QUFDUixDQUFDLEVBTFcsZ0JBQWdC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QUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxPQUFPLFVBQVU7U0FDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsSUFBWSxFQUFFLE1BQStCO0lBQzdELG9FQUFvRTtJQUNwRSxNQUFNLE9BQU8sR0FBYSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FDbEQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQ3BDLENBQUM7SUFDRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxZQUFzQjtJQUN0QyxPQUFPLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBDT01QQVJJU09OX09QRVJBVE9SUyA9IFsnZXEnLCAnbmUnLCAnZ3QnLCAnZ2UnLCAnbHQnLCAnbGUnXTtcbmNvbnN0IExPR0lDQUxfT1BFUkFUT1JTID0gWydhbmQnLCAnb3InLCAnbm90J107XG5jb25zdCBDT0xMRUNUSU9OX09QRVJBVE9SUyA9IFsnYW55JywgJ2FsbCddO1xuY29uc3QgQk9PTEVBTl9GVU5DVElPTlMgPSBbJ3N0YXJ0c3dpdGgnLCAnZW5kc3dpdGgnLCAnY29udGFpbnMnXTtcbmNvbnN0IFNVUFBPUlRFRF9FWFBBTkRfUFJPUEVSVElFUyA9IFtcbiAgJ2V4cGFuZCcsXG4gICdsZXZlbHMnLFxuICAnc2VsZWN0JyxcbiAgJ3RvcCcsXG4gICdjb3VudCcsXG4gICdvcmRlcmJ5JyxcbiAgJ2ZpbHRlcicsXG5dO1xuXG5jb25zdCBGVU5DVElPTl9SRUdFWCA9IC9cXCgoLiopXFwpLztcbmNvbnN0IElOREVYT0ZfUkVHRVggPSAvKD8haW5kZXhvZilcXCgoXFx3KylcXCkvO1xuXG5leHBvcnQgdHlwZSBVbnBhY2tlZDxUPiA9IFQgZXh0ZW5kcyAoaW5mZXIgVSlbXSA/IFUgOiBUO1xuZXhwb3J0IHR5cGUgU2VsZWN0PFQ+ID0gU2VsZWN0VHlwZTxUPiB8IFNlbGVjdFR5cGU8VD5bXTtcbmV4cG9ydCB0eXBlIFNlbGVjdFR5cGU8VD4gPSBzdHJpbmcgfCBrZXlvZiBUO1xuZXhwb3J0IHR5cGUgRmlsdGVyPFQ+ID0gRmlsdGVyVHlwZSB8IEZpbHRlclR5cGVbXTtcbmV4cG9ydCB0eXBlIEZpbHRlclR5cGUgPSBzdHJpbmcgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuZXhwb3J0IGVudW0gU3RhbmRhcmRBZ2dyZWdhdGVNZXRob2RzIHtcbiAgc3VtID0gJ3N1bScsXG4gIG1pbiA9ICdtaW4nLFxuICBtYXggPSAnbWF4JyxcbiAgYXZlcmFnZSA9ICdhdmVyYWdlJyxcbiAgY291bnRkaXN0aW5jdCA9ICdjb3VudGRpc3RpbmN0Jyxcbn1cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0ZVR5cGUgPVxuICB8IHN0cmluZ1xuICB8IHsgW3Byb3BlcnR5TmFtZTogc3RyaW5nXTogeyB3aXRoOiBTdGFuZGFyZEFnZ3JlZ2F0ZU1ldGhvZHM7IGFzOiBzdHJpbmcgfSB9O1xuXG4vLyBPcmRlckJ5XG5cbmV4cG9ydCB0eXBlIE9yZGVyQnk8VD4gPSBPcmRlckJ5VHlwZTxUPiB8IE9yZGVyQnlUeXBlPFQ+W107XG5leHBvcnQgdHlwZSBPcmRlckJ5VHlwZTxUPiA9IHN0cmluZyB8IE9yZGVyQnlPYmplY3Q8VD47XG5leHBvcnQgdHlwZSBPcmRlckJ5T2JqZWN0PFQ+ID1cbiAgfCBrZXlvZiBUXG4gIHwgW2tleW9mIFQgfCBzdHJpbmcsICdhc2MnIHwgJ2Rlc2MnXVxuICB8IE5lc3RlZE9yZGVyQnk8VD47XG5leHBvcnQgdHlwZSBOZXN0ZWRPcmRlckJ5PFQ+ID0ge1xuICBbUCBpbiBrZXlvZiBUXT86IFRbUF0gZXh0ZW5kcyBBcnJheTxpbmZlciBFPiA/IE9yZGVyQnk8RT4gOiBPcmRlckJ5PFRbUF0+O1xufTtcblxuLy8gRXhwYW5kXG5leHBvcnQgdHlwZSBFeHBhbmQ8VD4gPSBFeHBhbmRUeXBlPFQ+IHwgRXhwYW5kVHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZTxUPiA9IHN0cmluZyB8IEV4cGFuZE9iamVjdDxUPjtcbmV4cG9ydCB0eXBlIEV4cGFuZE9iamVjdDxUPiA9IGtleW9mIFQgfCBOZXN0ZWRFeHBhbmRPcHRpb25zPFQ+O1xuZXhwb3J0IHR5cGUgTmVzdGVkRXhwYW5kT3B0aW9uczxUPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF0/OiBFeHBhbmRPcHRpb25zPFVucGFja2VkPFRbUF0+Pjtcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRPcHRpb25zPFQ+ID0ge1xuICBzZWxlY3Q/OiBTZWxlY3Q8VD47XG4gIGZpbHRlcj86IEZpbHRlcjxUPjtcbiAgb3JkZXJCeT86IE9yZGVyQnk8VD47XG4gIHRvcD86IG51bWJlcjtcbiAgc2tpcD86IG51bWJlcjtcbiAgbGV2ZWxzPzogbnVtYmVyIHwgJ21heCc7XG4gIGNvdW50PzogYm9vbGVhbiB8IEZpbHRlcjxUPjtcbiAgZXhwYW5kPzogRXhwYW5kPFQ+O1xufTtcblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtPFQ+ID0ge1xuICBhZ2dyZWdhdGU/OiBBZ2dyZWdhdGVUeXBlIHwgQXJyYXk8QWdncmVnYXRlVHlwZT47XG4gIGZpbHRlcj86IEZpbHRlcjxUPjtcbiAgZ3JvdXBCeT86IEdyb3VwQnlUeXBlPFQ+O1xufTtcbmV4cG9ydCB0eXBlIEdyb3VwQnlUeXBlPFQ+ID0ge1xuICBwcm9wZXJ0aWVzOiBBcnJheTxrZXlvZiBUPjtcbiAgdHJhbnNmb3JtPzogVHJhbnNmb3JtPFQ+O1xufTtcblxuZXhwb3J0IGVudW0gUXVlcnlDdXN0b21UeXBlcyB7XG4gIFJhdyxcbiAgQWxpYXMsXG4gIER1cmF0aW9uLFxuICBCaW5hcnksXG59XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q3VzdG9tVHlwZSA9IHtcbiAgdHlwZTogUXVlcnlDdXN0b21UeXBlcztcbiAgdmFsdWU6IGFueTtcbiAgbmFtZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBWYWx1ZSA9IHN0cmluZyB8IERhdGUgfCBudW1iZXIgfCBib29sZWFuIHwgUXVlcnlDdXN0b21UeXBlO1xuXG4vL2h0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfUXVlcnlPcHRpb25zXG5leHBvcnQgY29uc3QgcmF3ID0gKHZhbHVlOiBzdHJpbmcpOiBRdWVyeUN1c3RvbVR5cGUgPT4gKHtcbiAgdHlwZTogUXVlcnlDdXN0b21UeXBlcy5SYXcsXG4gIHZhbHVlLFxufSk7XG5leHBvcnQgY29uc3QgYWxpYXMgPSAodmFsdWU6IGFueSwgbmFtZT86IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLkFsaWFzLFxuICB2YWx1ZSxcbiAgbmFtZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uID0gKHZhbHVlOiBzdHJpbmcpOiBRdWVyeUN1c3RvbVR5cGUgPT4gKHtcbiAgdHlwZTogUXVlcnlDdXN0b21UeXBlcy5EdXJhdGlvbixcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBiaW5hcnkgPSAodmFsdWU6IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLkJpbmFyeSxcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBpc1F1ZXJ5Q3VzdG9tVHlwZSA9ICh2YWx1ZTogYW55KSA9PlxuICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICd0eXBlJyBpbiB2YWx1ZSAmJlxuICB2YWx1ZS50eXBlIGluIFF1ZXJ5Q3VzdG9tVHlwZXM7XG5cbmV4cG9ydCBjb25zdCBpc1Jhd1R5cGUgPSAodmFsdWU6IGFueSkgPT5cbiAgaXNRdWVyeUN1c3RvbVR5cGUodmFsdWUpICYmXG4gICh2YWx1ZSBhcyBRdWVyeUN1c3RvbVR5cGUpLnR5cGUgPT09IFF1ZXJ5Q3VzdG9tVHlwZXMuUmF3O1xuXG5leHBvcnQgdHlwZSBRdWVyeU9wdGlvbnM8VD4gPSBFeHBhbmRPcHRpb25zPFQ+ICYge1xuICBzZWFyY2g6IHN0cmluZztcbiAgYXBwbHk6IHN0cmluZztcbiAgdHJhbnNmb3JtOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W107XG4gIHNraXA6IG51bWJlcjtcbiAgc2tpcHRva2VuOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nIHwgbnVtYmVyIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIGNvdW50OiBib29sZWFuIHwgRmlsdGVyPFQ+O1xuICBhY3Rpb246IHN0cmluZztcbiAgZnVuYzogc3RyaW5nIHwgeyBbZnVuY3Rpb25OYW1lOiBzdHJpbmddOiB7IFtwYXJhbWV0ZXJOYW1lOiBzdHJpbmddOiBhbnkgfSB9O1xuICBmb3JtYXQ6IHN0cmluZztcbiAgYWxpYXNlczogUXVlcnlDdXN0b21UeXBlW107XG4gIGVzY2FwZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBJVEVNX1JPT1QgPSAnJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gPFQ+KHtcbiAgc2VsZWN0LFxuICBzZWFyY2gsXG4gIHNraXB0b2tlbixcbiAgZm9ybWF0LFxuICB0b3AsXG4gIHNraXAsXG4gIGZpbHRlcixcbiAgdHJhbnNmb3JtLFxuICBvcmRlckJ5LFxuICBrZXksXG4gIGNvdW50LFxuICBleHBhbmQsXG4gIGFjdGlvbixcbiAgZnVuYyxcbiAgYWxpYXNlcyxcbiAgZXNjYXBlLFxufTogUGFydGlhbDxRdWVyeU9wdGlvbnM8VD4+ID0ge30pIHtcbiAgY29uc3QgW3BhdGgsIHBhcmFtc10gPSBidWlsZFBhdGhBbmRRdWVyeSh7XG4gICAgc2VsZWN0LFxuICAgIHNlYXJjaCxcbiAgICBza2lwdG9rZW4sXG4gICAgZm9ybWF0LFxuICAgIHRvcCxcbiAgICBza2lwLFxuICAgIGZpbHRlcixcbiAgICB0cmFuc2Zvcm0sXG4gICAgb3JkZXJCeSxcbiAgICBrZXksXG4gICAgY291bnQsXG4gICAgZXhwYW5kLFxuICAgIGFjdGlvbixcbiAgICBmdW5jLFxuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICB9KTtcblxuICByZXR1cm4gYnVpbGRVcmwocGF0aCwgcGFyYW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGF0aEFuZFF1ZXJ5PFQ+KHtcbiAgc2VsZWN0LFxuICBzZWFyY2gsXG4gIHNraXB0b2tlbixcbiAgZm9ybWF0LFxuICB0b3AsXG4gIHNraXAsXG4gIGZpbHRlcixcbiAgYXBwbHksXG4gIHRyYW5zZm9ybSxcbiAgb3JkZXJCeSxcbiAga2V5LFxuICBjb3VudCxcbiAgZXhwYW5kLFxuICBhY3Rpb24sXG4gIGZ1bmMsXG4gIGFsaWFzZXMsXG4gIGVzY2FwZSxcbn06IFBhcnRpYWw8UXVlcnlPcHRpb25zPFQ+PiA9IHt9KTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dIHtcbiAgbGV0IHBhdGg6IHN0cmluZyA9ICcnO1xuICBhbGlhc2VzID0gYWxpYXNlcyB8fCBbXTtcblxuICBjb25zdCBxdWVyeTogYW55ID0ge307XG5cbiAgLy8ga2V5IGlzIG5vdCAobnVsbCwgdW5kZWZpbmVkKVxuICBpZiAoa2V5ICE9IHVuZGVmaW5lZCkge1xuICAgIHBhdGggKz0gYCgke25vcm1hbGl6ZVZhbHVlKGtleSBhcyBWYWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9KWA7XG4gIH1cblxuICAvLyBTZWxlY3RcbiAgaWYgKHNlbGVjdCkge1xuICAgIHF1ZXJ5LiRzZWxlY3QgPSBpc1Jhd1R5cGUoc2VsZWN0KVxuICAgICAgPyAoc2VsZWN0IGFzIHVua25vd24gYXMgUXVlcnlDdXN0b21UeXBlKS52YWx1ZVxuICAgICAgOiBBcnJheS5pc0FycmF5KHNlbGVjdClcbiAgICAgICAgPyBzZWxlY3Quam9pbignLCcpXG4gICAgICAgIDogc2VsZWN0O1xuICB9XG5cbiAgLy8gU2VhcmNoXG4gIGlmIChzZWFyY2gpIHtcbiAgICBxdWVyeS4kc2VhcmNoID0gc2VhcmNoO1xuICB9XG5cbiAgLy8gU2tpcHRva2VuXG4gIGlmIChza2lwdG9rZW4pIHtcbiAgICBxdWVyeS4kc2tpcHRva2VuID0gc2tpcHRva2VuO1xuICB9XG5cbiAgLy8gRm9ybWF0XG4gIGlmIChmb3JtYXQpIHtcbiAgICBxdWVyeS4kZm9ybWF0ID0gZm9ybWF0O1xuICB9XG5cbiAgLy8gRmlsdGVyXG4gIGlmIChmaWx0ZXIgfHwgdHlwZW9mIGNvdW50ID09PSAnb2JqZWN0Jykge1xuICAgIHF1ZXJ5LiRmaWx0ZXIgPSBidWlsZEZpbHRlcih0eXBlb2YgY291bnQgPT09ICdvYmplY3QnID8gY291bnQgOiBmaWx0ZXIsIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBlc2NhcGUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBUcmFuc2Zvcm1cbiAgaWYgKHRyYW5zZm9ybSkge1xuICAgIHF1ZXJ5LiRhcHBseSA9IGJ1aWxkVHJhbnNmb3Jtcyh0cmFuc2Zvcm0sIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICB9XG5cbiAgLy8gQXBwbHlcbiAgaWYgKGFwcGx5KSB7XG4gICAgcXVlcnkuJGFwcGx5ID0gcXVlcnkuJGFwcGx5XG4gICAgICA/IHF1ZXJ5LiRhcHBseSArICcvJyArIGJ1aWxkQXBwbHkoYXBwbHksIHsgYWxpYXNlcywgZXNjYXBlIH0pXG4gICAgICA6IGJ1aWxkQXBwbHkoYXBwbHksIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICB9XG5cbiAgLy8gRXhwYW5kXG4gIGlmIChleHBhbmQpIHtcbiAgICBxdWVyeS4kZXhwYW5kID0gYnVpbGRFeHBhbmQoZXhwYW5kLCB7IGFsaWFzZXMsIGVzY2FwZSB9KTtcbiAgfVxuXG4gIC8vIE9yZGVyQnlcbiAgaWYgKG9yZGVyQnkpIHtcbiAgICBxdWVyeS4kb3JkZXJieSA9IGJ1aWxkT3JkZXJCeShvcmRlckJ5KTtcbiAgfVxuXG4gIC8vIENvdW50XG4gIGlmIChpc1Jhd1R5cGUoY291bnQpKSB7XG4gICAgcXVlcnkuJGNvdW50ID0gKGNvdW50IGFzIFF1ZXJ5Q3VzdG9tVHlwZSkudmFsdWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNvdW50ID09PSAnYm9vbGVhbicpIHtcbiAgICBxdWVyeS4kY291bnQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGNvdW50KSB7XG4gICAgcGF0aCArPSAnLyRjb3VudCc7XG4gIH1cblxuICAvLyBUb3BcbiAgaWYgKGlzUmF3VHlwZSh0b3ApKSB7XG4gICAgcXVlcnkuJHRvcCA9ICh0b3AgYXMgdW5rbm93biBhcyBRdWVyeUN1c3RvbVR5cGUpLnZhbHVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB0b3AgPT09ICdudW1iZXInKSB7XG4gICAgcXVlcnkuJHRvcCA9IHRvcDtcbiAgfVxuXG4gIC8vIFNraXBcbiAgaWYgKGlzUmF3VHlwZShza2lwKSkge1xuICAgIHF1ZXJ5LiR0b3AgPSAoc2tpcCBhcyB1bmtub3duIGFzIFF1ZXJ5Q3VzdG9tVHlwZSkudmFsdWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNraXAgPT09ICdudW1iZXInKSB7XG4gICAgcXVlcnkuJHNraXAgPSBza2lwO1xuICB9XG5cbiAgaWYgKGFjdGlvbikge1xuICAgIHBhdGggKz0gYC8ke2FjdGlvbn1gO1xuICB9XG5cbiAgaWYgKGZ1bmMpIHtcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwYXRoICs9IGAvJHtmdW5jfSgpYDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmdW5jID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgW2Z1bmNOYW1lXSA9IE9iamVjdC5rZXlzKGZ1bmMpO1xuICAgICAgY29uc3QgZnVuY0FyZ3MgPSBub3JtYWxpemVWYWx1ZShmdW5jW2Z1bmNOYW1lXSBhcyBWYWx1ZSwge1xuICAgICAgICBhbGlhc2VzLFxuICAgICAgICBlc2NhcGUsXG4gICAgICB9KTtcblxuICAgICAgcGF0aCArPSBgLyR7ZnVuY05hbWV9KCR7ZnVuY0FyZ3N9KWA7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsaWFzZXMubGVuZ3RoID4gMCkge1xuICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICBxdWVyeSxcbiAgICAgIGFsaWFzZXMucmVkdWNlKFxuICAgICAgICAoYWNjLCBhbGlhcykgPT5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKGFjYywge1xuICAgICAgICAgICAgW2BAJHthbGlhcy5uYW1lfWBdOiBub3JtYWxpemVWYWx1ZShhbGlhcy52YWx1ZSwge1xuICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAge30sXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvLyBGaWx0ZXIgZW1wdHkgdmFsdWVzXG4gIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJycpXG4gICAgLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrZXldOiB2YWx1ZSB9KSwge30pO1xuXG4gIHJldHVybiBbcGF0aCwgcGFyYW1zXTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUHJpbWl0aXZlVmFsdWUoXG4gIGtleTogc3RyaW5nLFxuICB2YWw6IGFueSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gIH0sXG4pIHtcbiAgcmV0dXJuIGAke2tleX0gZXEgJHtub3JtYWxpemVWYWx1ZSh2YWwsIHsgYWxpYXNlcywgZXNjYXBlIH0pfWA7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmlsdGVyKFxuICBmaWx0ZXJzOiBGaWx0ZXI8YW55PiA9IHt9LFxuICB7XG4gICAgYWxpYXNlcyxcbiAgICBwcm9wUHJlZml4LFxuICAgIGVzY2FwZSxcbiAgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IHByb3BQcmVmaXg/OiBzdHJpbmc7IGVzY2FwZT86IGJvb2xlYW4gfSxcbik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgKEFycmF5LmlzQXJyYXkoZmlsdGVycykgPyBmaWx0ZXJzIDogW2ZpbHRlcnNdKS5yZWR1Y2UoXG4gICAgICAoYWNjOiBzdHJpbmdbXSwgZmlsdGVyKSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICBjb25zdCBidWlsdEZpbHRlciA9IGJ1aWxkRmlsdGVyQ29yZShmaWx0ZXIsIHtcbiAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICBwcm9wUHJlZml4LFxuICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChidWlsdEZpbHRlcikge1xuICAgICAgICAgICAgYWNjLnB1c2goYnVpbHRGaWx0ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFtdLFxuICAgICkgYXMgc3RyaW5nW11cbiAgKS5qb2luKCcgYW5kICcpO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkRmlsdGVyQ29yZShcbiAgICBmaWx0ZXI6IEZpbHRlcjxhbnk+ID0ge30sXG4gICAge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIHByb3BQcmVmaXgsXG4gICAgICBlc2NhcGUsXG4gICAgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IHByb3BQcmVmaXg/OiBzdHJpbmc7IGVzY2FwZT86IGJvb2xlYW4gfSxcbiAgKSB7XG4gICAgbGV0IGZpbHRlckV4cHIgPSAnJztcbiAgICBpZiAoaXNSYXdUeXBlKGZpbHRlcikpIHtcbiAgICAgIC8vIFVzZSByYXcgcXVlcnkgY3VzdG9tIGZpbHRlciBzdHJpbmdcbiAgICAgIGZpbHRlckV4cHIgPSAoZmlsdGVyIGFzIFF1ZXJ5Q3VzdG9tVHlwZSkudmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVXNlIHJhdyBmaWx0ZXIgc3RyaW5nXG4gICAgICBmaWx0ZXJFeHByID0gZmlsdGVyO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyICYmIHR5cGVvZiBmaWx0ZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzQXJyYXkgPSBPYmplY3Qua2V5cyhmaWx0ZXIpLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdDogYW55W10sIGZpbHRlcktleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKGZpbHRlciBhcyBhbnkpW2ZpbHRlcktleV07XG4gICAgICAgICAgbGV0IHByb3BOYW1lID0gJyc7XG4gICAgICAgICAgaWYgKHByb3BQcmVmaXgpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkgPT09IElURU1fUk9PVCkge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IHByb3BQcmVmaXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKElOREVYT0ZfUkVHRVgudGVzdChmaWx0ZXJLZXkpKSB7XG4gICAgICAgICAgICAgIHByb3BOYW1lID0gZmlsdGVyS2V5LnJlcGxhY2UoSU5ERVhPRl9SRUdFWCwgKF8sICQxKSA9PlxuICAgICAgICAgICAgICAgICQxLnRyaW0oKSA9PT0gSVRFTV9ST09UXG4gICAgICAgICAgICAgICAgICA/IGAoJHtwcm9wUHJlZml4fSlgXG4gICAgICAgICAgICAgICAgICA6IGAoJHtwcm9wUHJlZml4fS8keyQxLnRyaW0oKX0pYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoRlVOQ1RJT05fUkVHRVgudGVzdChmaWx0ZXJLZXkpKSB7XG4gICAgICAgICAgICAgIHByb3BOYW1lID0gZmlsdGVyS2V5LnJlcGxhY2UoRlVOQ1RJT05fUkVHRVgsIChfLCAkMSkgPT5cbiAgICAgICAgICAgICAgICAkMS50cmltKCkgPT09IElURU1fUk9PVFxuICAgICAgICAgICAgICAgICAgPyBgKCR7cHJvcFByZWZpeH0pYFxuICAgICAgICAgICAgICAgICAgOiBgKCR7cHJvcFByZWZpeH0vJHskMS50cmltKCl9KWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IGAke3Byb3BQcmVmaXh9LyR7ZmlsdGVyS2V5fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3BOYW1lID0gZmlsdGVyS2V5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWx0ZXJLZXkgPT09IElURU1fUk9PVCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLm1hcCgoYXJyYXlWYWx1ZTogYW55KSA9PlxuICAgICAgICAgICAgICAgIHJlbmRlclByaW1pdGl2ZVZhbHVlKHByb3BOYW1lLCBhcnJheVZhbHVlLCB7IGVzY2FwZSwgYWxpYXNlcyB9KSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgWydudW1iZXInLCAnc3RyaW5nJywgJ2Jvb2xlYW4nXS5pbmRleE9mKHR5cGVvZiB2YWx1ZSkgIT09IC0xIHx8XG4gICAgICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBTaW1wbGUga2V5L3ZhbHVlIGhhbmRsZWQgYXMgZXF1YWxzIG9wZXJhdG9yXG4gICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgcmVuZGVyUHJpbWl0aXZlVmFsdWUocHJvcE5hbWUsIHZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBmaWx0ZXJLZXk7XG4gICAgICAgICAgICBjb25zdCBidWlsdEZpbHRlcnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAubWFwKCh2KSA9PiBidWlsZEZpbHRlcih2LCB7IGFsaWFzZXMsIHByb3BQcmVmaXgsIGVzY2FwZSB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoZikgPT4gZilcbiAgICAgICAgICAgICAgLm1hcCgoZikgPT5cbiAgICAgICAgICAgICAgICBMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEgPyBgKCR7Zn0pYCA6IGYsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAoTE9HSUNBTF9PUEVSQVRPUlMuaW5kZXhPZihvcCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJ1aWx0RmlsdGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChvcCA9PT0gJ25vdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VOb3QoYnVpbHRGaWx0ZXJzIGFzIHN0cmluZ1tdKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgKCR7YnVpbHRGaWx0ZXJzLmpvaW4oYCAke29wfSBgKX0pYCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJ1aWx0RmlsdGVycy5qb2luKGAgJHtvcH0gYCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKHByb3BOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wID0gcHJvcE5hbWU7XG4gICAgICAgICAgICBjb25zdCBidWlsdEZpbHRlcnMgPSBPYmplY3Qua2V5cyh2YWx1ZSkubWFwKCh2YWx1ZUtleSkgPT5cbiAgICAgICAgICAgICAgYnVpbGRGaWx0ZXJDb3JlKFxuICAgICAgICAgICAgICAgIHsgW3ZhbHVlS2V5XTogdmFsdWVbdmFsdWVLZXldIH0sXG4gICAgICAgICAgICAgICAgeyBhbGlhc2VzLCBlc2NhcGUgfSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAob3AgPT09ICdub3QnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VOb3QoYnVpbHRGaWx0ZXJzIGFzIHN0cmluZ1tdKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7YnVpbHRGaWx0ZXJzLmpvaW4oYCAke29wfSBgKX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCd0eXBlJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICByZW5kZXJQcmltaXRpdmVWYWx1ZShwcm9wTmFtZSwgdmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICAgICAgICBvcGVyYXRvcnMuZm9yRWFjaCgob3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQ09NUEFSSVNPTl9PUEVSQVRPUlMuaW5kZXhPZihvcCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgYCR7cHJvcE5hbWV9ICR7b3B9ICR7bm9ybWFsaXplVmFsdWUodmFsdWVbb3BdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfWAsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTE9HSUNBTF9PUEVSQVRPUlMuaW5kZXhPZihvcCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVtvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW29wXVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHY6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkRmlsdGVyQ29yZSh2LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFByZWZpeDogcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKGAgJHtvcH0gYCksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAnKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRGaWx0ZXJDb3JlKHZhbHVlW29wXSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wUHJlZml4OiBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyknLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQ09MTEVDVElPTl9PUEVSQVRPUlMuaW5kZXhPZihvcCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uQ2xhdXNlID0gYnVpbGRDb2xsZWN0aW9uQ2xhdXNlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJLZXkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVbb3BdLFxuICAgICAgICAgICAgICAgICAgICBvcCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25DbGF1c2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sbGVjdGlvbkNsYXVzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2hhcycpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBgJHtwcm9wTmFtZX0gJHtvcH0gJHtub3JtYWxpemVWYWx1ZSh2YWx1ZVtvcF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9YCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2luJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0aW5nVmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtvcF0pXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWVbb3BdXG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWVbb3BdLnZhbHVlLm1hcCgodHlwZWRWYWx1ZTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdmFsdWVbb3BdLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHlwZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgJyBpbiAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKCh2OiBhbnkpID0+IG5vcm1hbGl6ZVZhbHVlKHYsIHsgYWxpYXNlcywgZXNjYXBlIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywnKSArXG4gICAgICAgICAgICAgICAgICAgICAgJyknLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEJPT0xFQU5fRlVOQ1RJT05TLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgLy8gU2ltcGxlIGJvb2xlYW4gZnVuY3Rpb25zIChzdGFydHN3aXRoLCBlbmRzd2l0aCwgY29udGFpbnMpXG4gICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgYCR7b3B9KCR7cHJvcE5hbWV9LCR7bm9ybWFsaXplVmFsdWUodmFsdWVbb3BdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfSlgLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gTmVzdGVkIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBidWlsZEZpbHRlckNvcmUodmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcFByZWZpeDogcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUvb21pdCBmaWx0ZXIgaWYgdmFsdWUgaXMgYHVuZGVmaW5lZGBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIHR5cGU6ICR7dmFsdWV9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgW10sXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXJFeHByID0gZmlsdGVyc0FycmF5LmpvaW4oJyBhbmQgJyk7XG4gICAgfSAvKiBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGZpbHRlcnMgdHlwZTogJHtmaWx0ZXJ9YCk7XG4gICAgICB9ICovXG4gICAgcmV0dXJuIGZpbHRlckV4cHI7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZENvbGxlY3Rpb25DbGF1c2UoXG4gICAgbGFtYmRhUGFyYW1ldGVyOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgICBvcDogc3RyaW5nLFxuICAgIHByb3BOYW1lOiBzdHJpbmcsXG4gICkge1xuICAgIGxldCBjbGF1c2UgPSAnJztcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBjbGF1c2UgPSBnZXRTdHJpbmdDb2xsZWN0aW9uQ2xhdXNlKGxhbWJkYVBhcmFtZXRlciwgdmFsdWUsIG9wLCBwcm9wTmFtZSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgLy8gbm9ybWFsaXplIHthbnk6W3twcm9wMTogMX0sIHtwcm9wMjogMX1dfSAtLT4ge2FueTp7cHJvcDE6IDEsIHByb3AyOiAxfX07IHNhbWUgZm9yICdhbGwnLFxuICAgICAgLy8gc2ltcGxlIHZhbHVlcyBjb2xsZWN0aW9uOiB7YW55Olt7Jyc6ICdzaW1wbGVWYWwxJ30sIHsnJzogJ3NpbXBsZVZhbDInfV19IC0tPiB7YW55OnsnJzogWydzaW1wbGVWYWwxJywgJ3NpbXBsZVZhbDInXX19OyBzYW1lIGZvciAnYWxsJyxcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoSVRFTV9ST09UKSkge1xuICAgICAgICAgICAgICBpZiAoIWFjYy5oYXNPd25Qcm9wZXJ0eShJVEVNX1JPT1QpKSB7XG4gICAgICAgICAgICAgICAgYWNjW0lURU1fUk9PVF0gPSBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhY2NbSVRFTV9ST09UXS5wdXNoKGl0ZW1bSVRFTV9ST09UXSk7XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIC4uLml0ZW0gfTtcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB2YWx1ZTtcblxuICAgICAgY29uc3QgZmlsdGVyID0gYnVpbGRGaWx0ZXJDb3JlKGZpbHRlclZhbHVlLCB7XG4gICAgICAgIGFsaWFzZXMsXG4gICAgICAgIHByb3BQcmVmaXg6IGxhbWJkYVBhcmFtZXRlcixcbiAgICAgICAgZXNjYXBlLFxuICAgICAgfSk7XG4gICAgICBjbGF1c2UgPSBgJHtwcm9wTmFtZX0vJHtvcH0oJHtcbiAgICAgICAgZmlsdGVyID8gYCR7bGFtYmRhUGFyYW1ldGVyfToke2ZpbHRlcn1gIDogJydcbiAgICAgIH0pYDtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXVzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdHJpbmdDb2xsZWN0aW9uQ2xhdXNlKFxuICBsYW1iZGFQYXJhbWV0ZXI6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgY29sbGVjdGlvbk9wZXJhdG9yOiBzdHJpbmcsXG4gIHByb3BOYW1lOiBzdHJpbmcsXG4pIHtcbiAgbGV0IGNsYXVzZSA9ICcnO1xuICBjb25zdCBjb25kaXRpb25PcGVyYXRvciA9IGNvbGxlY3Rpb25PcGVyYXRvciA9PSAnYWxsJyA/ICduZScgOiAnZXEnO1xuICBjbGF1c2UgPSBgJHtwcm9wTmFtZX0vJHtjb2xsZWN0aW9uT3BlcmF0b3J9KCR7bGFtYmRhUGFyYW1ldGVyfTogJHtsYW1iZGFQYXJhbWV0ZXJ9ICR7Y29uZGl0aW9uT3BlcmF0b3J9ICcke3ZhbHVlfScpYDtcblxuICByZXR1cm4gY2xhdXNlO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVJbGxlZ2FsQ2hhcnMoc3RyaW5nOiBzdHJpbmcpIHtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyUvZywgJyUyNScpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwrL2csICclMkInKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcLy9nLCAnJTJGJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXD8vZywgJyUzRicpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvIy9nLCAnJTIzJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC8mL2csICclMjYnKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLycvZywgXCInJ1wiKTtcbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKFxuICB2YWx1ZTogVmFsdWUsXG4gIHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSA9IGZhbHNlLFxuICB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9ID0ge30sXG4pOiBhbnkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlc2NhcGUgPyBgJyR7ZXNjYXBlSWxsZWdhbENoYXJzKHZhbHVlKX0nYCA6IGAnJHt2YWx1ZX0nYDtcbiAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGBbJHt2YWx1ZVxuICAgICAgLm1hcCgoZCkgPT4gbm9ybWFsaXplVmFsdWUoZCwgeyBhbGlhc2VzLCBlc2NhcGUgfSkpXG4gICAgICAuam9pbignLCcpfV1gO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5SYXc6XG4gICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5EdXJhdGlvbjpcbiAgICAgICAgcmV0dXJuIGBkdXJhdGlvbicke3ZhbHVlLnZhbHVlfSdgO1xuICAgICAgY2FzZSBRdWVyeUN1c3RvbVR5cGVzLkJpbmFyeTpcbiAgICAgICAgcmV0dXJuIGBiaW5hcnknJHt2YWx1ZS52YWx1ZX0nYDtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5BbGlhczpcbiAgICAgICAgLy8gU3RvcmVcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWxpYXNlcykpIHtcbiAgICAgICAgICBpZiAodmFsdWUubmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZS5uYW1lID0gYGEke2FsaWFzZXMubGVuZ3RoICsgMX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhbGlhc2VzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgQCR7dmFsdWUubmFtZX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKVxuICAgICAgICAgIC5maWx0ZXIoKFssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChbaywgdl0pID0+XG4gICAgICAgICAgICAgIGAke2t9PSR7bm9ybWFsaXplVmFsdWUodiBhcyBWYWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9YCxcbiAgICAgICAgICApXG4gICAgICAgICAgLmpvaW4oJywnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBidWlsZEV4cGFuZDxUPihcbiAgZXhwYW5kczogRXhwYW5kPFQ+LFxuICB7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUgPSBmYWxzZSxcbiAgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfSxcbik6IHN0cmluZyB7XG4gIGlmIChpc1Jhd1R5cGUoZXhwYW5kcykpIHtcbiAgICByZXR1cm4gKGV4cGFuZHMgYXMgUXVlcnlDdXN0b21UeXBlKS52YWx1ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwYW5kcyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZXhwYW5kcyBhcyBhbnk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cGFuZHMgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGV4cGFuZHMuaW5kZXhPZignLycpID09PSAtMSkge1xuICAgICAgcmV0dXJuIGV4cGFuZHM7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdlIGBGb28vQmFyL0JhemAgdG8gYEZvbygkZXhwYW5kPUJhcigkZXhwYW5kPUJheikpYFxuICAgIHJldHVybiBleHBhbmRzXG4gICAgICAuc3BsaXQoJy8nKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLnJlZHVjZSgocmVzdWx0cywgaXRlbSwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAvLyBJbm5lci1tb3N0IGl0ZW1cbiAgICAgICAgICByZXR1cm4gYCRleHBhbmQ9JHtpdGVtfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IGFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgLy8gT3V0ZXItbW9zdCBpdGVtLCBkb24ndCBhZGQgYCRleHBhbmQ9YCBwcmVmaXggKGFkZGVkIGFib3ZlKVxuICAgICAgICAgIHJldHVybiBgJHtpdGVtfSgke3Jlc3VsdHN9KWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXIgaXRlbXNcbiAgICAgICAgICByZXR1cm4gYCRleHBhbmQ9JHtpdGVtfSgke3Jlc3VsdHN9KWA7XG4gICAgICAgIH1cbiAgICAgIH0sICcnKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV4cGFuZHMpKSB7XG4gICAgcmV0dXJuIGAkeyhleHBhbmRzIGFzIEFycmF5PE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pj4pXG4gICAgICAubWFwKChlKSA9PiBidWlsZEV4cGFuZChlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSlcbiAgICAgIC5qb2luKCcsJyl9YDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwYW5kcyA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBleHBhbmRLZXlzID0gT2JqZWN0LmtleXMoZXhwYW5kcyk7XG5cbiAgICBpZiAoXG4gICAgICBleHBhbmRLZXlzLnNvbWUoXG4gICAgICAgIChrZXkpID0+IFNVUFBPUlRFRF9FWFBBTkRfUFJPUEVSVElFUy5pbmRleE9mKGtleS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEsXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZXhwYW5kS2V5c1xuICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAgICAgICAgIHZhbHVlID0gYnVpbGRGaWx0ZXIoKGV4cGFuZHMgYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+KVtrZXldLCB7XG4gICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyQnknOlxuICAgICAgICAgICAgICB2YWx1ZSA9IGJ1aWxkT3JkZXJCeShcbiAgICAgICAgICAgICAgICAoZXhwYW5kcyBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4pW2tleV0gYXMgT3JkZXJCeTxUPixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZXZlbHMnOlxuICAgICAgICAgICAgY2FzZSAnY291bnQnOlxuICAgICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIGNhc2UgJ3NraXAnOlxuICAgICAgICAgICAgICB2YWx1ZSA9IGAkeyhleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pilba2V5XX1gO1xuICAgICAgICAgICAgICBpZiAoaXNSYXdUeXBlKHZhbHVlKSlcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSBhcyB1bmtub3duIGFzIFF1ZXJ5Q3VzdG9tVHlwZSkudmFsdWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdmFsdWUgPSBidWlsZEV4cGFuZChcbiAgICAgICAgICAgICAgICAoZXhwYW5kcyBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4pW2tleV0gYXMgRXhwYW5kPFQ+LFxuICAgICAgICAgICAgICAgIHsgYWxpYXNlcywgZXNjYXBlIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgJCR7a2V5LnRvTG93ZXJDYXNlKCl9PSR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJzsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGV4cGFuZEtleXNcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVpbHRFeHBhbmQgPSBidWlsZEV4cGFuZChcbiAgICAgICAgICAgIChleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55PilbXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgXSBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4sXG4gICAgICAgICAgICB7IGFsaWFzZXMsIGVzY2FwZSB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGJ1aWx0RXhwYW5kID8gYCR7a2V5fSgke2J1aWx0RXhwYW5kfSlgIDoga2V5O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignLCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVHJhbnNmb3JtczxUPihcbiAgdHJhbnNmb3JtczogVHJhbnNmb3JtPFQ+IHwgVHJhbnNmb3JtPFQ+W10sXG4gIHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSA9IGZhbHNlLFxuICB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9LFxuKSB7XG4gIC8vIFdyYXAgc2luZ2xlIG9iamVjdCBhbiBhcnJheSBmb3Igc2ltcGxpZmllZCBwcm9jZXNzaW5nXG4gIGNvbnN0IHRyYW5zZm9ybXNBcnJheSA9IEFycmF5LmlzQXJyYXkodHJhbnNmb3JtcykgPyB0cmFuc2Zvcm1zIDogW3RyYW5zZm9ybXNdO1xuXG4gIGNvbnN0IHRyYW5zZm9ybXNSZXN1bHQgPSB0cmFuc2Zvcm1zQXJyYXkucmVkdWNlKFxuICAgIChyZXN1bHQ6IHN0cmluZ1tdLCB0cmFuc2Zvcm0pID0+IHtcbiAgICAgIGNvbnN0IHsgYWdncmVnYXRlLCBmaWx0ZXIsIGdyb3VwQnksIC4uLnJlc3QgfSA9IHRyYW5zZm9ybTtcblxuICAgICAgLy8gVE9ETzogc3VwcG9ydCBhcyBtYW55IG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICAvLyAgIHRvcGNvdW50LCB0b3BzdW0sIHRvcHBlcmNlbnQsXG4gICAgICAvLyAgIGJvdHRvbXN1bSwgYm90dG9tY291bnQsIGJvdHRvbXBlcmNlbnQsXG4gICAgICAvLyAgIGlkZW50aXR5LCBjb25jYXQsIGV4cGFuZCwgc2VhcmNoLCBjb21wdXRlLCBpc2RlZmluZWRcbiAgICAgIGNvbnN0IHVuc3VwcG9ydGVkS2V5cyA9IE9iamVjdC5rZXlzKHJlc3QpO1xuICAgICAgaWYgKHVuc3VwcG9ydGVkS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0cmFuc2Zvcm0ocyk6ICR7dW5zdXBwb3J0ZWRLZXlzfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWdncmVnYXRlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGBhZ2dyZWdhdGUoJHtidWlsZEFnZ3JlZ2F0ZShhZ2dyZWdhdGUpfSlgKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgY29uc3QgYnVpbHRGaWx0ZXIgPSBidWlsZEZpbHRlcihmaWx0ZXIsIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICAgICAgICBpZiAoYnVpbHRGaWx0ZXIpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIGBmaWx0ZXIoJHtidWlsZEZpbHRlcihidWlsdEZpbHRlciwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9KWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYGdyb3VwYnkoJHtidWlsZEdyb3VwQnkoZ3JvdXBCeSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9KWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgW10sXG4gICk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybXNSZXN1bHQuam9pbignLycpIHx8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRBZ2dyZWdhdGUoYWdncmVnYXRlOiBBZ2dyZWdhdGVUeXBlIHwgQWdncmVnYXRlVHlwZVtdKSB7XG4gIC8vIFdyYXAgc2luZ2xlIG9iamVjdCBpbiBhbiBhcnJheSBmb3Igc2ltcGxpZmllZCBwcm9jZXNzaW5nXG4gIGNvbnN0IGFnZ3JlZ2F0ZUFycmF5ID0gQXJyYXkuaXNBcnJheShhZ2dyZWdhdGUpID8gYWdncmVnYXRlIDogW2FnZ3JlZ2F0ZV07XG5cbiAgcmV0dXJuIGFnZ3JlZ2F0ZUFycmF5XG4gICAgLm1hcCgoYWdncmVnYXRlSXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIHR5cGVvZiBhZ2dyZWdhdGVJdGVtID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGFnZ3JlZ2F0ZUl0ZW1cbiAgICAgICAgOiBPYmplY3Qua2V5cyhhZ2dyZWdhdGVJdGVtKS5tYXAoKGFnZ3JlZ2F0ZUtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlVmFsdWUgPSBhZ2dyZWdhdGVJdGVtW2FnZ3JlZ2F0ZUtleV07XG5cbiAgICAgICAgICAgIC8vIFRPRE86IEFyZSB0aGVzZSBhbHdheXMgcmVxdWlyZWQ/ICBDYW4vc2hvdWxkIHdlIGRlZmF1bHQgdGhlbSBpZiBzbz9cbiAgICAgICAgICAgIGlmICghYWdncmVnYXRlVmFsdWUud2l0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCd3aXRoJyBwcm9wZXJ0eSByZXF1aXJlZCBmb3IgJyR7YWdncmVnYXRlS2V5fSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWdncmVnYXRlVmFsdWUuYXMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnYXMnIHByb3BlcnR5IHJlcXVpcmVkIGZvciAnJHthZ2dyZWdhdGVLZXl9J2ApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYCR7YWdncmVnYXRlS2V5fSB3aXRoICR7YWdncmVnYXRlVmFsdWUud2l0aH0gYXMgJHthZ2dyZWdhdGVWYWx1ZS5hc31gO1xuICAgICAgICAgIH0pO1xuICAgIH0pXG4gICAgLmpvaW4oJywnKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRHcm91cEJ5PFQ+KFxuICBncm91cEJ5OiBHcm91cEJ5VHlwZTxUPixcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlID0gZmFsc2UsXG4gIH06IHsgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdOyBlc2NhcGU/OiBib29sZWFuIH0sXG4pIHtcbiAgaWYgKCFncm91cEJ5LnByb3BlcnRpZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCdwcm9wZXJ0aWVzJyBwcm9wZXJ0eSByZXF1aXJlZCBmb3IgZ3JvdXBCeWApO1xuICB9XG5cbiAgbGV0IHJlc3VsdCA9IGAoJHtncm91cEJ5LnByb3BlcnRpZXMuam9pbignLCcpfSlgO1xuXG4gIGlmIChncm91cEJ5LnRyYW5zZm9ybSkge1xuICAgIHJlc3VsdCArPSBgLCR7YnVpbGRUcmFuc2Zvcm1zKGdyb3VwQnkudHJhbnNmb3JtLCB7IGFsaWFzZXMsIGVzY2FwZSB9KX1gO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYnVpbGRPcmRlckJ5PFQ+KG9yZGVyQnk6IE9yZGVyQnk8VD4sIHByZWZpeDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICBpZiAoaXNSYXdUeXBlKG9yZGVyQnkpKSB7XG4gICAgcmV0dXJuIChvcmRlckJ5IGFzIFF1ZXJ5Q3VzdG9tVHlwZSkudmFsdWU7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvcmRlckJ5KSkge1xuICAgIHJldHVybiAob3JkZXJCeSBhcyBPcmRlckJ5T2JqZWN0PFQ+W10pXG4gICAgICAubWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgdmFsdWUubGVuZ3RoID09PSAyICYmXG4gICAgICAgIFsnYXNjJywgJ2Rlc2MnXS5pbmRleE9mKHZhbHVlWzFdKSAhPT0gLTFcbiAgICAgICAgICA/IHZhbHVlLmpvaW4oJyAnKVxuICAgICAgICAgIDogdmFsdWUsXG4gICAgICApXG4gICAgICAubWFwKCh2KSA9PiBgJHtwcmVmaXh9JHt2IGFzIHN0cmluZ31gKVxuICAgICAgLmpvaW4oJywnKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3JkZXJCeSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3JkZXJCeSlcbiAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYnVpbGRPcmRlckJ5KHYgYXMgT3JkZXJCeTxhbnk+LCBgJHtrfS9gKSlcbiAgICAgIC5tYXAoKHYpID0+IGAke3ByZWZpeH0ke3Z9YClcbiAgICAgIC5qb2luKCcsJyk7XG4gIH1cbiAgcmV0dXJuIGAke3ByZWZpeH0ke29yZGVyQnkgYXMgc3RyaW5nfWA7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXBwbHkoXG4gIGFwcGx5OiBhbnksXG4gIHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSA9IGZhbHNlLFxuICB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgZXNjYXBlPzogYm9vbGVhbiB9LFxuKSB7XG4gIGNvbnN0IGFwcGx5QXJyYXkgPSBBcnJheS5pc0FycmF5KGFwcGx5KSA/IGFwcGx5IDogW2FwcGx5XTtcbiAgcmV0dXJuIGFwcGx5QXJyYXlcbiAgICAubWFwKCh2KSA9PiBub3JtYWxpemVWYWx1ZSh2LCB7IGFsaWFzZXMsIGVzY2FwZSB9KSlcbiAgICAuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcge1xuICAvLyBUaGlzIGNhbiBiZSByZWZhY3RvcmVkIHVzaW5nIFVSTCBBUEkuIEJ1dCBJRSBkb2VzIG5vdCBzdXBwb3J0IGl0LlxuICBjb25zdCBxdWVyaWVzOiBzdHJpbmdbXSA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcykubWFwKFxuICAgIChba2V5LCB2YWx1ZV0pID0+IGAke2tleX09JHt2YWx1ZX1gLFxuICApO1xuICByZXR1cm4gcXVlcmllcy5sZW5ndGggPyBgJHtwYXRofT8ke3F1ZXJpZXMuam9pbignJicpfWAgOiBwYXRoO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5vdChidWlsdEZpbHRlcnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBub3QoJHtidWlsdEZpbHRlcnMuam9pbignIGFuZCAnKX0pYDtcbn1cbiJdfQ==