@finbourne/lusid-sdk-angular18 0.11.10068 → 0.11.10120

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 (218) hide show
  1. package/esm2022/lib/.generated/api/allocationEvents.service.mjs +626 -0
  2. package/esm2022/lib/.generated/api/allocationMaps.service.mjs +700 -0
  3. package/esm2022/lib/.generated/api/api.mjs +6 -2
  4. package/esm2022/lib/.generated/api/compliance.service.mjs +66 -1
  5. package/esm2022/lib/.generated/api/entities.service.mjs +69 -1
  6. package/esm2022/lib/.generated/api/fundStructures.service.mjs +303 -1
  7. package/esm2022/lib/.generated/api/funds.service.mjs +5 -1
  8. package/esm2022/lib/.generated/api/identifierDefinitions.service.mjs +4 -4
  9. package/esm2022/lib/.generated/api/propertyDefinitions.service.mjs +8 -8
  10. package/esm2022/lib/.generated/api/recs.service.mjs +13 -1
  11. package/esm2022/lib/.generated/api/transfers.service.mjs +91 -1
  12. package/esm2022/lib/.generated/model/aggregateNumericTolerance.mjs +1 -1
  13. package/esm2022/lib/.generated/model/allocationEvent.mjs +2 -0
  14. package/esm2022/lib/.generated/model/allocationEventBookRequest.mjs +12 -0
  15. package/esm2022/lib/.generated/model/allocationEventReallocateRequest.mjs +2 -0
  16. package/esm2022/lib/.generated/model/allocationEventRequest.mjs +2 -0
  17. package/esm2022/lib/.generated/model/allocationMap.mjs +2 -0
  18. package/esm2022/lib/.generated/model/allocationMapAllocation.mjs +12 -0
  19. package/esm2022/lib/.generated/model/allocationMapBasis.mjs +2 -0
  20. package/esm2022/lib/.generated/model/allocationMapBasisValue.mjs +12 -0
  21. package/esm2022/lib/.generated/model/allocationMapEventBasis.mjs +2 -0
  22. package/esm2022/lib/.generated/model/allocationMapException.mjs +12 -0
  23. package/esm2022/lib/.generated/model/allocationMapFixedFactor.mjs +12 -0
  24. package/esm2022/lib/.generated/model/allocationMapParticipants.mjs +2 -0
  25. package/esm2022/lib/.generated/model/allocationMapRequest.mjs +2 -0
  26. package/esm2022/lib/.generated/model/allocationMapResolution.mjs +2 -0
  27. package/esm2022/lib/.generated/model/allocationMapResolveRequest.mjs +2 -0
  28. package/esm2022/lib/.generated/model/bondForwardModelOptions.mjs +3 -2
  29. package/esm2022/lib/.generated/model/bondLookupModelOptions.mjs +3 -2
  30. package/esm2022/lib/.generated/model/bucketSetResult.mjs +1 -1
  31. package/esm2022/lib/.generated/model/cashFlowDetail.mjs +1 -1
  32. package/esm2022/lib/.generated/model/cdsIndex.mjs +1 -1
  33. package/esm2022/lib/.generated/model/cdsModelOptions.mjs +3 -2
  34. package/esm2022/lib/.generated/model/consentEvent.mjs +1 -1
  35. package/esm2022/lib/.generated/model/coreAttributeOptionalityTolerance.mjs +1 -1
  36. package/esm2022/lib/.generated/model/coreDateTolerance.mjs +1 -1
  37. package/esm2022/lib/.generated/model/coreStringCrossTolerance.mjs +1 -1
  38. package/esm2022/lib/.generated/model/corporateActionSource.mjs +1 -1
  39. package/esm2022/lib/.generated/model/corporateActionSourceEntity.mjs +2 -0
  40. package/esm2022/lib/.generated/model/createDerivedPropertyDefinitionRequest.mjs +3 -2
  41. package/esm2022/lib/.generated/model/createIdentifierDefinitionRequest.mjs +3 -2
  42. package/esm2022/lib/.generated/model/createMatchingRulesetRequest.mjs +1 -1
  43. package/esm2022/lib/.generated/model/createPropertyDefinitionRequest.mjs +3 -2
  44. package/esm2022/lib/.generated/model/createRecDefinitionRequest.mjs +1 -1
  45. package/esm2022/lib/.generated/model/creditDefaultSwap.mjs +1 -1
  46. package/esm2022/lib/.generated/model/decoratedComplianceRunSummaryRequest.mjs +2 -0
  47. package/esm2022/lib/.generated/model/emptyModelOptions.mjs +3 -2
  48. package/esm2022/lib/.generated/model/equityModelOptions.mjs +3 -2
  49. package/esm2022/lib/.generated/model/feeAccrual.mjs +1 -1
  50. package/esm2022/lib/.generated/model/fixedSchedule.mjs +1 -1
  51. package/esm2022/lib/.generated/model/flexibleLoan.mjs +1 -1
  52. package/esm2022/lib/.generated/model/flexibleLoanPricerOptions.mjs +3 -2
  53. package/esm2022/lib/.generated/model/floatSchedule.mjs +1 -1
  54. package/esm2022/lib/.generated/model/fund.mjs +1 -1
  55. package/esm2022/lib/.generated/model/fundDefinitionRequest.mjs +1 -1
  56. package/esm2022/lib/.generated/model/fundRequest.mjs +1 -1
  57. package/esm2022/lib/.generated/model/fundStructure.mjs +1 -1
  58. package/esm2022/lib/.generated/model/fundStructureAllocationBasis.mjs +2 -0
  59. package/esm2022/lib/.generated/model/fundStructureEdge.mjs +1 -1
  60. package/esm2022/lib/.generated/model/fundStructureEdgeTarget.mjs +1 -1
  61. package/esm2022/lib/.generated/model/fundStructureMemberRequest.mjs +2 -0
  62. package/esm2022/lib/.generated/model/fundStructureNode.mjs +1 -11
  63. package/esm2022/lib/.generated/model/fundStructureRequest.mjs +1 -1
  64. package/esm2022/lib/.generated/model/fundingLegModelOptions.mjs +3 -2
  65. package/esm2022/lib/.generated/model/fxForwardModelOptions.mjs +3 -2
  66. package/esm2022/lib/.generated/model/fxForwardPipsCurveData.mjs +1 -1
  67. package/esm2022/lib/.generated/model/fxForwardTenorPipsCurveData.mjs +1 -1
  68. package/esm2022/lib/.generated/model/hullWhiteModelOptions.mjs +3 -2
  69. package/esm2022/lib/.generated/model/identifierDefinition.mjs +3 -2
  70. package/esm2022/lib/.generated/model/indexModelOptions.mjs +3 -2
  71. package/esm2022/lib/.generated/model/inflationLinkedBond.mjs +1 -1
  72. package/esm2022/lib/.generated/model/matchingRuleset.mjs +1 -1
  73. package/esm2022/lib/.generated/model/modelOptions.mjs +3 -2
  74. package/esm2022/lib/.generated/model/modelOptionsType.mjs +3 -2
  75. package/esm2022/lib/.generated/model/models.mjs +29 -1
  76. package/esm2022/lib/.generated/model/navType.mjs +1 -1
  77. package/esm2022/lib/.generated/model/navTypeDefinition.mjs +1 -1
  78. package/esm2022/lib/.generated/model/opaqueModelOptions.mjs +3 -2
  79. package/esm2022/lib/.generated/model/pagedResourceListOfAllocationEvent.mjs +2 -0
  80. package/esm2022/lib/.generated/model/pagedResourceListOfAllocationMap.mjs +2 -0
  81. package/esm2022/lib/.generated/model/pikSchedule.mjs +1 -1
  82. package/esm2022/lib/.generated/model/placementUpdateRequest.mjs +1 -1
  83. package/esm2022/lib/.generated/model/propertyDefinition.mjs +3 -2
  84. package/esm2022/lib/.generated/model/propertyDefinitionSearchResult.mjs +3 -2
  85. package/esm2022/lib/.generated/model/propertyDomain.mjs +3 -2
  86. package/esm2022/lib/.generated/model/queryBucketCashFlowDrillDownRequest.mjs +1 -1
  87. package/esm2022/lib/.generated/model/recDatasetSchema.mjs +1 -1
  88. package/esm2022/lib/.generated/model/recDefSource.mjs +1 -1
  89. package/esm2022/lib/.generated/model/recDefinition.mjs +1 -1
  90. package/esm2022/lib/.generated/model/recResultHoldingItem.mjs +1 -1
  91. package/esm2022/lib/.generated/model/recResultItem.mjs +1 -1
  92. package/esm2022/lib/.generated/model/recResultSettlementActivityItem.mjs +1 -1
  93. package/esm2022/lib/.generated/model/recResultTransactionItem.mjs +1 -1
  94. package/esm2022/lib/.generated/model/recReviewRequirementRule.mjs +1 -1
  95. package/esm2022/lib/.generated/model/settleExpectedActivityRuleNames.mjs +12 -0
  96. package/esm2022/lib/.generated/model/settleExpectedActivityWritebackConfiguration.mjs +2 -0
  97. package/esm2022/lib/.generated/model/settleExpectedActivityWritebackSuggestion.mjs +2 -0
  98. package/esm2022/lib/.generated/model/simpleModelOptions.mjs +19 -0
  99. package/esm2022/lib/.generated/model/subscriptionDefinition.mjs +1 -1
  100. package/esm2022/lib/.generated/model/totalReturnSwap.mjs +1 -1
  101. package/esm2022/lib/.generated/model/transactionEntityLink.mjs +1 -1
  102. package/esm2022/lib/.generated/model/updateIdentifierDefinitionRequest.mjs +1 -1
  103. package/esm2022/lib/.generated/model/updateMatchingRulesetRequest.mjs +1 -1
  104. package/esm2022/lib/.generated/model/updateRecDefinitionRequest.mjs +1 -1
  105. package/esm2022/lib/.generated/model/valuationPointDataResponse.mjs +1 -1
  106. package/esm2022/lib/.generated/model/writebackConfiguration.mjs +2 -0
  107. package/esm2022/lib/.generated/model/writebackResultPattern.mjs +12 -0
  108. package/esm2022/lib/.generated/model/writebackSuggestion.mjs +2 -0
  109. package/fesm2022/finbourne-lusid-sdk-angular18.mjs +2380 -426
  110. package/fesm2022/finbourne-lusid-sdk-angular18.mjs.map +2 -2
  111. package/lib/.generated/api/allocationEvents.service.d.ts +242 -0
  112. package/lib/.generated/api/allocationMaps.service.d.ts +277 -0
  113. package/lib/.generated/api/api.d.ts +5 -1
  114. package/lib/.generated/api/compliance.service.d.ts +27 -0
  115. package/lib/.generated/api/entities.service.d.ts +31 -0
  116. package/lib/.generated/api/fundStructures.service.d.ts +131 -1
  117. package/lib/.generated/api/funds.service.d.ts +2 -0
  118. package/lib/.generated/api/identifierDefinitions.service.d.ts +6 -6
  119. package/lib/.generated/api/propertyDefinitions.service.d.ts +14 -14
  120. package/lib/.generated/api/recs.service.d.ts +5 -1
  121. package/lib/.generated/api/transfers.service.d.ts +37 -0
  122. package/lib/.generated/model/aggregateNumericTolerance.d.ts +4 -4
  123. package/lib/.generated/model/allocationEvent.d.ts +71 -0
  124. package/lib/.generated/model/allocationEventBookRequest.d.ts +19 -0
  125. package/lib/.generated/model/allocationEventReallocateRequest.d.ts +24 -0
  126. package/lib/.generated/model/allocationEventRequest.d.ts +50 -0
  127. package/lib/.generated/model/allocationMap.d.ts +42 -0
  128. package/lib/.generated/model/allocationMapAllocation.d.ts +35 -0
  129. package/lib/.generated/model/allocationMapBasis.d.ts +30 -0
  130. package/lib/.generated/model/allocationMapBasisValue.d.ts +23 -0
  131. package/lib/.generated/model/allocationMapEventBasis.d.ts +21 -0
  132. package/lib/.generated/model/allocationMapException.d.ts +35 -0
  133. package/lib/.generated/model/allocationMapFixedFactor.d.ts +23 -0
  134. package/lib/.generated/model/allocationMapParticipants.d.ts +33 -0
  135. package/lib/.generated/model/allocationMapRequest.d.ts +41 -0
  136. package/lib/.generated/model/allocationMapResolution.d.ts +56 -0
  137. package/lib/.generated/model/allocationMapResolveRequest.d.ts +32 -0
  138. package/lib/.generated/model/bondForwardModelOptions.d.ts +3 -2
  139. package/lib/.generated/model/bondLookupModelOptions.d.ts +4 -3
  140. package/lib/.generated/model/bucketSetResult.d.ts +4 -0
  141. package/lib/.generated/model/cashFlowDetail.d.ts +9 -1
  142. package/lib/.generated/model/cdsIndex.d.ts +1 -1
  143. package/lib/.generated/model/cdsModelOptions.d.ts +3 -2
  144. package/lib/.generated/model/consentEvent.d.ts +2 -2
  145. package/lib/.generated/model/coreAttributeOptionalityTolerance.d.ts +1 -1
  146. package/lib/.generated/model/coreDateTolerance.d.ts +2 -2
  147. package/lib/.generated/model/coreStringCrossTolerance.d.ts +1 -1
  148. package/lib/.generated/model/corporateActionSource.d.ts +2 -0
  149. package/lib/.generated/model/corporateActionSourceEntity.d.ts +54 -0
  150. package/lib/.generated/model/createDerivedPropertyDefinitionRequest.d.ts +3 -2
  151. package/lib/.generated/model/createIdentifierDefinitionRequest.d.ts +3 -2
  152. package/lib/.generated/model/createMatchingRulesetRequest.d.ts +5 -0
  153. package/lib/.generated/model/createPropertyDefinitionRequest.d.ts +3 -2
  154. package/lib/.generated/model/createRecDefinitionRequest.d.ts +8 -1
  155. package/lib/.generated/model/creditDefaultSwap.d.ts +1 -1
  156. package/lib/.generated/model/decoratedComplianceRunSummaryRequest.d.ts +20 -0
  157. package/lib/.generated/model/emptyModelOptions.d.ts +3 -2
  158. package/lib/.generated/model/equityModelOptions.d.ts +3 -2
  159. package/lib/.generated/model/feeAccrual.d.ts +1 -1
  160. package/lib/.generated/model/fixedSchedule.d.ts +16 -0
  161. package/lib/.generated/model/flexibleLoan.d.ts +4 -0
  162. package/lib/.generated/model/flexibleLoanPricerOptions.d.ts +3 -2
  163. package/lib/.generated/model/floatSchedule.d.ts +16 -0
  164. package/lib/.generated/model/fund.d.ts +5 -1
  165. package/lib/.generated/model/fundDefinitionRequest.d.ts +5 -1
  166. package/lib/.generated/model/fundRequest.d.ts +1 -1
  167. package/lib/.generated/model/fundStructure.d.ts +8 -3
  168. package/lib/.generated/model/fundStructureAllocationBasis.d.ts +25 -0
  169. package/lib/.generated/model/fundStructureEdge.d.ts +8 -2
  170. package/lib/.generated/model/fundStructureEdgeTarget.d.ts +4 -4
  171. package/lib/.generated/model/fundStructureMemberRequest.d.ts +22 -0
  172. package/lib/.generated/model/fundStructureNode.d.ts +9 -1
  173. package/lib/.generated/model/fundStructureRequest.d.ts +13 -9
  174. package/lib/.generated/model/fundingLegModelOptions.d.ts +3 -2
  175. package/lib/.generated/model/fxForwardModelOptions.d.ts +3 -2
  176. package/lib/.generated/model/fxForwardPipsCurveData.d.ts +4 -0
  177. package/lib/.generated/model/fxForwardTenorPipsCurveData.d.ts +4 -0
  178. package/lib/.generated/model/hullWhiteModelOptions.d.ts +3 -2
  179. package/lib/.generated/model/identifierDefinition.d.ts +3 -2
  180. package/lib/.generated/model/indexModelOptions.d.ts +3 -2
  181. package/lib/.generated/model/inflationLinkedBond.d.ts +16 -0
  182. package/lib/.generated/model/matchingRuleset.d.ts +5 -0
  183. package/lib/.generated/model/modelOptions.d.ts +3 -2
  184. package/lib/.generated/model/modelOptionsType.d.ts +2 -1
  185. package/lib/.generated/model/models.d.ts +28 -0
  186. package/lib/.generated/model/navType.d.ts +4 -0
  187. package/lib/.generated/model/navTypeDefinition.d.ts +4 -0
  188. package/lib/.generated/model/opaqueModelOptions.d.ts +3 -2
  189. package/lib/.generated/model/pagedResourceListOfAllocationEvent.d.ts +19 -0
  190. package/lib/.generated/model/pagedResourceListOfAllocationMap.d.ts +19 -0
  191. package/lib/.generated/model/pikSchedule.d.ts +3 -1
  192. package/lib/.generated/model/placementUpdateRequest.d.ts +1 -1
  193. package/lib/.generated/model/propertyDefinition.d.ts +3 -2
  194. package/lib/.generated/model/propertyDefinitionSearchResult.d.ts +3 -2
  195. package/lib/.generated/model/propertyDomain.d.ts +2 -1
  196. package/lib/.generated/model/queryBucketCashFlowDrillDownRequest.d.ts +4 -0
  197. package/lib/.generated/model/recDatasetSchema.d.ts +1 -1
  198. package/lib/.generated/model/recDefSource.d.ts +1 -1
  199. package/lib/.generated/model/recDefinition.d.ts +8 -1
  200. package/lib/.generated/model/recResultHoldingItem.d.ts +5 -0
  201. package/lib/.generated/model/recResultSettlementActivityItem.d.ts +5 -0
  202. package/lib/.generated/model/recResultTransactionItem.d.ts +5 -0
  203. package/lib/.generated/model/recReviewRequirementRule.d.ts +1 -1
  204. package/lib/.generated/model/settleExpectedActivityRuleNames.d.ts +27 -0
  205. package/lib/.generated/model/settleExpectedActivityWritebackConfiguration.d.ts +30 -0
  206. package/lib/.generated/model/settleExpectedActivityWritebackSuggestion.d.ts +25 -0
  207. package/lib/.generated/model/simpleModelOptions.d.ts +46 -0
  208. package/lib/.generated/model/subscriptionDefinition.d.ts +1 -1
  209. package/lib/.generated/model/totalReturnSwap.d.ts +1 -1
  210. package/lib/.generated/model/transactionEntityLink.d.ts +1 -1
  211. package/lib/.generated/model/updateIdentifierDefinitionRequest.d.ts +4 -0
  212. package/lib/.generated/model/updateMatchingRulesetRequest.d.ts +5 -0
  213. package/lib/.generated/model/updateRecDefinitionRequest.d.ts +8 -1
  214. package/lib/.generated/model/valuationPointDataResponse.d.ts +4 -0
  215. package/lib/.generated/model/writebackConfiguration.d.ts +10 -0
  216. package/lib/.generated/model/writebackResultPattern.d.ts +27 -0
  217. package/lib/.generated/model/writebackSuggestion.d.ts +10 -0
  218. package/package.json +1 -1
@@ -0,0 +1,626 @@
1
+ /**
2
+ * LUSID API
3
+ * # Introduction This page documents the [LUSID APIs](../../../api/swagger), which allows authorised clients to query and update their data within the LUSID platform. SDKs to interact with the LUSID APIs are available in the following languages and frameworks: * [C#](https://github.com/finbourne/lusid-sdk-csharp) * [Java](https://github.com/finbourne/lusid-sdk-java) * [JavaScript](https://github.com/finbourne/lusid-sdk-js) * [Python](https://github.com/finbourne/lusid-sdk-python) * [Angular](https://github.com/finbourne/lusid-sdk-angular) The LUSID platform is made up of a number of sub-applications. You can find the API / swagger documentation by following the links in the table below. | Application | Description | API / Swagger Documentation | |---------------|-----------------------------------------------------------------------------------|------------------------------------------------------| | LUSID | Open, API-first, developer-friendly investment data platform. | [Swagger](../../../api/swagger/index.html) | | Web app | User-facing front end for LUSID. | [Swagger](../../../app/swagger/index.html) | | Scheduler | Automated job scheduler. | [Swagger](../../../scheduler2/swagger/index.html) | | Insights | Monitoring and troubleshooting service. | [Swagger](../../../insights/swagger/index.html) | | Identity | Identity management for LUSID (in conjunction with Access) | [Swagger](../../../identity/swagger/index.html) | | Access | Access control for LUSID (in conjunction with Identity) | [Swagger](../../../access/swagger/index.html) | | Drive | Secure file repository and manager for collaboration. | [Swagger](../../../drive/swagger/index.html) | | Luminesce | Data virtualisation service (query data from multiple providers, including LUSID) | [Swagger](../../../honeycomb/swagger/index.html) | | Notification | Notification service. | [Swagger](../../../notification/swagger/index.html) | | Configuration | File store for secrets and other sensitive information. | [Swagger](../../../configuration/swagger/index.html) | | Workflow | Workflow service. | [Swagger](../../../workflow/swagger/index.html) | # Error Codes | Code|Name|Description | | ---|---|--- | | <a name=\"-10\">-10</a>|Server Configuration Error| | | <a name=\"-1\">-1</a>|Unknown error|An unexpected error was encountered on our side. | | <a name=\"102\">102</a>|Version Not Found| | | <a name=\"103\">103</a>|Api Rate Limit Violation| | | <a name=\"104\">104</a>|Instrument Not Found| | | <a name=\"105\">105</a>|Property Not Found| | | <a name=\"106\">106</a>|Portfolio Recursion Depth| | | <a name=\"108\">108</a>|Group Not Found| | | <a name=\"109\">109</a>|Portfolio Not Found| | | <a name=\"110\">110</a>|Property Schema Not Found| | | <a name=\"111\">111</a>|Portfolio Ancestry Not Found| | | <a name=\"112\">112</a>|Portfolio With Id Already Exists| | | <a name=\"113\">113</a>|Orphaned Portfolio| | | <a name=\"119\">119</a>|Missing Base Claims| | | <a name=\"121\">121</a>|Property Not Defined| | | <a name=\"122\">122</a>|Cannot Delete System Property| | | <a name=\"123\">123</a>|Cannot Modify Immutable Property Field| | | <a name=\"124\">124</a>|Property Already Exists| | | <a name=\"125\">125</a>|Invalid Property Life Time| | | <a name=\"126\">126</a>|Property Constraint Style Excludes Properties| | | <a name=\"127\">127</a>|Cannot Modify Default Data Type| | | <a name=\"128\">128</a>|Group Already Exists| | | <a name=\"129\">129</a>|No Such Data Type| | | <a name=\"130\">130</a>|Undefined Value For Data Type| | | <a name=\"131\">131</a>|Unsupported Value Type Defined On Data Type| | | <a name=\"132\">132</a>|Validation Error| | | <a name=\"133\">133</a>|Loop Detected In Group Hierarchy| | | <a name=\"134\">134</a>|Undefined Acceptable Values| | | <a name=\"135\">135</a>|Sub Group Already Exists| | | <a name=\"138\">138</a>|Price Source Not Found| | | <a name=\"139\">139</a>|Analytic Store Not Found| | | <a name=\"141\">141</a>|Analytic Store Already Exists| | | <a name=\"143\">143</a>|Client Instrument Already Exists| | | <a name=\"144\">144</a>|Duplicate In Parameter Set| | | <a name=\"147\">147</a>|Results Not Found| | | <a name=\"148\">148</a>|Order Field Not In Result Set| | | <a name=\"149\">149</a>|Operation Failed| | | <a name=\"150\">150</a>|Elastic Search Error| | | <a name=\"151\">151</a>|Invalid Parameter Value| | | <a name=\"153\">153</a>|Command Processing Failure| | | <a name=\"154\">154</a>|Entity State Construction Failure| | | <a name=\"155\">155</a>|Entity Timeline Does Not Exist| | | <a name=\"156\">156</a>|Concurrency Conflict Failure| | | <a name=\"157\">157</a>|Invalid Request| | | <a name=\"158\">158</a>|Event Publish Unknown| | | <a name=\"159\">159</a>|Event Query Failure| | | <a name=\"160\">160</a>|Blob Did Not Exist| | | <a name=\"162\">162</a>|Sub System Request Failure| | | <a name=\"163\">163</a>|Sub System Configuration Failure| | | <a name=\"165\">165</a>|Failed To Delete| | | <a name=\"166\">166</a>|Upsert Client Instrument Failure| | | <a name=\"167\">167</a>|Illegal As At Interval| | | <a name=\"168\">168</a>|Illegal Bitemporal Query| | | <a name=\"169\">169</a>|Invalid Alternate Id| | | <a name=\"170\">170</a>|Cannot Add Non-Writable Properties To Entity| | | <a name=\"171\">171</a>|Entity Already Exists In Group| | | <a name=\"172\">172</a>|Entity With Id Does Not Exist| | | <a name=\"173\">173</a>|Entity With Id Already Exists| | | <a name=\"174\">174</a>|Derived Portfolio Details Do Not Exist| | | <a name=\"175\">175</a>|Entity Not In Group| | | <a name=\"176\">176</a>|Portfolio With Name Already Exists| | | <a name=\"177\">177</a>|Invalid Transactions| | | <a name=\"178\">178</a>|Reference Portfolio Not Found| | | <a name=\"179\">179</a>|Duplicate Id| | | <a name=\"180\">180</a>|Command Retrieval Failure| | | <a name=\"181\">181</a>|Data Filter Application Failure| | | <a name=\"182\">182</a>|Search Failed| | | <a name=\"183\">183</a>|Movements Engine Configuration Key Failure| | | <a name=\"184\">184</a>|Fx Rate Source Not Found| | | <a name=\"185\">185</a>|Accrual Source Not Found| | | <a name=\"186\">186</a>|Access Denied| | | <a name=\"187\">187</a>|Invalid Identity Token| | | <a name=\"188\">188</a>|Invalid Request Headers| | | <a name=\"189\">189</a>|Price Not Found| | | <a name=\"190\">190</a>|Invalid Sub Holding Keys Provided| | | <a name=\"191\">191</a>|Duplicate Sub Holding Keys Provided| | | <a name=\"192\">192</a>|Cut Definition Not Found| | | <a name=\"193\">193</a>|Cut Definition Invalid| | | <a name=\"194\">194</a>|Time Variant Property Deletion Date Unspecified| | | <a name=\"195\">195</a>|Perpetual Property Deletion Date Specified| | | <a name=\"196\">196</a>|Time Variant Property Upsert Date Unspecified| | | <a name=\"197\">197</a>|Perpetual Property Upsert Date Specified| | | <a name=\"200\">200</a>|Invalid Unit For Data Type| | | <a name=\"201\">201</a>|Invalid Type For Data Type| | | <a name=\"202\">202</a>|Invalid Value For Data Type| | | <a name=\"203\">203</a>|Unit Not Defined For Data Type| | | <a name=\"204\">204</a>|Units Not Supported On Data Type| | | <a name=\"205\">205</a>|Cannot Specify Units On Data Type| | | <a name=\"206\">206</a>|Unit Schema Inconsistent With Data Type| | | <a name=\"207\">207</a>|Unit Definition Not Specified| | | <a name=\"208\">208</a>|Duplicate Unit Definitions Specified| | | <a name=\"209\">209</a>|Invalid Units Definition| | | <a name=\"210\">210</a>|Invalid Instrument Identifier Unit| | | <a name=\"211\">211</a>|Holdings Adjustment Does Not Exist| | | <a name=\"212\">212</a>|Could Not Build Excel Url| | | <a name=\"213\">213</a>|Could Not Get Excel Version| | | <a name=\"214\">214</a>|Instrument By Code Not Found| | | <a name=\"215\">215</a>|Entity Schema Does Not Exist| | | <a name=\"216\">216</a>|Feature Not Supported On Portfolio Type| | | <a name=\"217\">217</a>|Quote Not Found| | | <a name=\"218\">218</a>|Invalid Quote Identifier| | | <a name=\"219\">219</a>|Invalid Metric For Data Type| | | <a name=\"220\">220</a>|Invalid Instrument Definition| | | <a name=\"221\">221</a>|Instrument Upsert Failure| | | <a name=\"222\">222</a>|Reference Portfolio Request Not Supported| | | <a name=\"223\">223</a>|Transaction Portfolio Request Not Supported| | | <a name=\"224\">224</a>|Invalid Property Value Assignment| | | <a name=\"230\">230</a>|Transaction Type Not Found| | | <a name=\"231\">231</a>|Transaction Type Duplication| | | <a name=\"232\">232</a>|Portfolio Does Not Exist At Given Date| | | <a name=\"233\">233</a>|Query Parser Failure| | | <a name=\"234\">234</a>|Duplicate Constituent| | | <a name=\"235\">235</a>|Unresolved Instrument Constituent| | | <a name=\"236\">236</a>|Unresolved Instrument In Transition| | | <a name=\"237\">237</a>|Missing Side Definitions| | | <a name=\"240\">240</a>|Duplicate Calculations Failure| | | <a name=\"299\">299</a>|Invalid Recipe| | | <a name=\"300\">300</a>|Missing Recipe| | | <a name=\"301\">301</a>|Dependencies| | | <a name=\"304\">304</a>|Portfolio Preprocess Failure| | | <a name=\"310\">310</a>|Valuation Engine Failure| | | <a name=\"311\">311</a>|Task Factory Failure| | | <a name=\"312\">312</a>|Task Evaluation Failure| | | <a name=\"313\">313</a>|Task Generation Failure| | | <a name=\"314\">314</a>|Engine Configuration Failure| | | <a name=\"315\">315</a>|Model Specification Failure| | | <a name=\"320\">320</a>|Market Data Key Failure| | | <a name=\"321\">321</a>|Market Resolver Failure| | | <a name=\"322\">322</a>|Market Data Failure| | | <a name=\"330\">330</a>|Curve Failure| | | <a name=\"331\">331</a>|Volatility Surface Failure| | | <a name=\"332\">332</a>|Volatility Cube Failure| | | <a name=\"350\">350</a>|Instrument Failure| | | <a name=\"351\">351</a>|Cash Flows Failure| | | <a name=\"352\">352</a>|Reference Data Failure| | | <a name=\"360\">360</a>|Aggregation Failure| | | <a name=\"361\">361</a>|Aggregation Measure Failure| | | <a name=\"370\">370</a>|Result Retrieval Failure| | | <a name=\"371\">371</a>|Result Processing Failure| | | <a name=\"372\">372</a>|Vendor Result Processing Failure| | | <a name=\"373\">373</a>|Vendor Result Mapping Failure| | | <a name=\"374\">374</a>|Vendor Library Unauthorised| | | <a name=\"375\">375</a>|Vendor Connectivity Error| | | <a name=\"376\">376</a>|Vendor Interface Error| | | <a name=\"377\">377</a>|Vendor Pricing Failure| | | <a name=\"378\">378</a>|Vendor Translation Failure| | | <a name=\"379\">379</a>|Vendor Key Mapping Failure| | | <a name=\"380\">380</a>|Vendor Reflection Failure| | | <a name=\"381\">381</a>|Vendor Process Failure| | | <a name=\"382\">382</a>|Vendor System Failure| | | <a name=\"390\">390</a>|Attempt To Upsert Duplicate Quotes| | | <a name=\"391\">391</a>|Corporate Action Source Does Not Exist| | | <a name=\"392\">392</a>|Corporate Action Source Already Exists| | | <a name=\"393\">393</a>|Instrument Identifier Already In Use| | | <a name=\"394\">394</a>|Properties Not Found| | | <a name=\"395\">395</a>|Batch Operation Aborted| | | <a name=\"400\">400</a>|Invalid Iso4217 Currency Code| | | <a name=\"401\">401</a>|Cannot Assign Instrument Identifier To Currency| | | <a name=\"402\">402</a>|Cannot Assign Currency Identifier To Non Currency| | | <a name=\"403\">403</a>|Currency Instrument Cannot Be Deleted| | | <a name=\"404\">404</a>|Currency Instrument Cannot Have Economic Definition| | | <a name=\"405\">405</a>|Currency Instrument Cannot Have Lookthrough Portfolio| | | <a name=\"406\">406</a>|Cannot Create Currency Instrument With Multiple Identifiers| | | <a name=\"407\">407</a>|Specified Currency Is Undefined| | | <a name=\"410\">410</a>|Index Does Not Exist| | | <a name=\"411\">411</a>|Sort Field Does Not Exist| | | <a name=\"413\">413</a>|Negative Pagination Parameters| | | <a name=\"414\">414</a>|Invalid Search Syntax| | | <a name=\"415\">415</a>|Filter Execution Timeout| | | <a name=\"420\">420</a>|Side Definition Inconsistent| | | <a name=\"450\">450</a>|Invalid Quote Access Metadata Rule| | | <a name=\"451\">451</a>|Access Metadata Not Found| | | <a name=\"452\">452</a>|Invalid Access Metadata Identifier| | | <a name=\"460\">460</a>|Standard Resource Not Found| | | <a name=\"461\">461</a>|Standard Resource Conflict| | | <a name=\"462\">462</a>|Calendar Not Found| | | <a name=\"463\">463</a>|Date In A Calendar Not Found| | | <a name=\"464\">464</a>|Invalid Date Source Data| | | <a name=\"465\">465</a>|Invalid Timezone| | | <a name=\"601\">601</a>|Person Identifier Already In Use| | | <a name=\"602\">602</a>|Person Not Found| | | <a name=\"603\">603</a>|Cannot Set Identifier| | | <a name=\"617\">617</a>|Invalid Recipe Specification In Request| | | <a name=\"618\">618</a>|Inline Recipe Deserialisation Failure| | | <a name=\"619\">619</a>|Identifier Types Not Set For Entity| | | <a name=\"620\">620</a>|Cannot Delete All Client Defined Identifiers| | | <a name=\"650\">650</a>|The Order requested was not found.| | | <a name=\"654\">654</a>|The Allocation requested was not found.| | | <a name=\"655\">655</a>|Cannot build the fx forward target with the given holdings.| | | <a name=\"656\">656</a>|Group does not contain expected entities.| | | <a name=\"665\">665</a>|Destination directory not found| | | <a name=\"667\">667</a>|Relation definition already exists| | | <a name=\"672\">672</a>|Could not retrieve file contents| | | <a name=\"673\">673</a>|Missing entitlements for entities in Group| | | <a name=\"674\">674</a>|Next Best Action not found| | | <a name=\"676\">676</a>|Relation definition not defined| | | <a name=\"677\">677</a>|Invalid entity identifier for relation| | | <a name=\"681\">681</a>|Sorting by specified field not supported|One or more of the provided fields to order by were either invalid or not supported. | | <a name=\"682\">682</a>|Too many fields to sort by|The number of fields to sort the data by exceeds the number allowed by the endpoint | | <a name=\"684\">684</a>|Sequence Not Found| | | <a name=\"685\">685</a>|Sequence Already Exists| | | <a name=\"686\">686</a>|Non-cycling sequence has been exhausted| | | <a name=\"687\">687</a>|Legal Entity Identifier Already In Use| | | <a name=\"688\">688</a>|Legal Entity Not Found| | | <a name=\"689\">689</a>|The supplied pagination token is invalid| | | <a name=\"690\">690</a>|Property Type Is Not Supported| | | <a name=\"691\">691</a>|Multiple Tax-lots For Currency Type Is Not Supported| | | <a name=\"692\">692</a>|This endpoint does not support impersonation| | | <a name=\"693\">693</a>|Entity type is not supported for Relationship| | | <a name=\"694\">694</a>|Relationship Validation Failure| | | <a name=\"695\">695</a>|Relationship Not Found| | | <a name=\"697\">697</a>|Derived Property Formula No Longer Valid| | | <a name=\"698\">698</a>|Story is not available| | | <a name=\"703\">703</a>|Corporate Action Does Not Exist| | | <a name=\"720\">720</a>|The provided sort and filter combination is not valid| | | <a name=\"721\">721</a>|A2B generation failed| | | <a name=\"722\">722</a>|Aggregated Return Calculation Failure| | | <a name=\"723\">723</a>|Custom Entity Definition Identifier Already In Use| | | <a name=\"724\">724</a>|Custom Entity Definition Not Found| | | <a name=\"725\">725</a>|The Placement requested was not found.| | | <a name=\"726\">726</a>|The Execution requested was not found.| | | <a name=\"727\">727</a>|The Block requested was not found.| | | <a name=\"728\">728</a>|The Participation requested was not found.| | | <a name=\"729\">729</a>|The Package requested was not found.| | | <a name=\"730\">730</a>|The OrderInstruction requested was not found.| | | <a name=\"732\">732</a>|Custom Entity not found.| | | <a name=\"733\">733</a>|Custom Entity Identifier already in use.| | | <a name=\"735\">735</a>|Calculation Failed.| | | <a name=\"736\">736</a>|An expected key on HttpResponse is missing.| | | <a name=\"737\">737</a>|A required fee detail is missing.| | | <a name=\"738\">738</a>|Zero rows were returned from Luminesce| | | <a name=\"739\">739</a>|Provided Weekend Mask was invalid| | | <a name=\"742\">742</a>|Custom Entity fields do not match the definition| | | <a name=\"746\">746</a>|The provided sequence is not valid.| | | <a name=\"751\">751</a>|The type of the Custom Entity is different than the type provided in the definition.| | | <a name=\"752\">752</a>|Luminesce process returned an error.| | | <a name=\"753\">753</a>|File name or content incompatible with operation.| | | <a name=\"755\">755</a>|Schema of response from Drive is not as expected.| | | <a name=\"757\">757</a>|Schema of response from Luminesce is not as expected.| | | <a name=\"758\">758</a>|Luminesce timed out.| | | <a name=\"763\">763</a>|Invalid Lusid Entity Identifier Unit| | | <a name=\"768\">768</a>|Fee rule not found.| | | <a name=\"769\">769</a>|Cannot update the base currency of a portfolio with transactions loaded| | | <a name=\"771\">771</a>|Transaction configuration source not found| | | <a name=\"774\">774</a>|Compliance rule not found.| | | <a name=\"775\">775</a>|Fund accounting document cannot be processed.| | | <a name=\"778\">778</a>|Unable to look up FX rate from trade ccy to portfolio ccy for some of the trades.| | | <a name=\"782\">782</a>|The Property definition dataType is not matching the derivation formula dataType| | | <a name=\"783\">783</a>|The Property definition domain is not supported for derived properties| | | <a name=\"788\">788</a>|Compliance run not found failure.| | | <a name=\"790\">790</a>|Custom Entity has missing or invalid identifiers| | | <a name=\"791\">791</a>|Custom Entity definition already exists| | | <a name=\"792\">792</a>|Compliance PropertyKey is missing.| | | <a name=\"793\">793</a>|Compliance Criteria Value for matching is missing.| | | <a name=\"795\">795</a>|Cannot delete identifier definition| | | <a name=\"796\">796</a>|Tax rule set not found.| | | <a name=\"797\">797</a>|A tax rule set with this id already exists.| | | <a name=\"798\">798</a>|Multiple rule sets for the same property key are applicable.| | | <a name=\"799\">799</a>|The request must contain a date or diary entry.| | | <a name=\"800\">800</a>|Can not upsert an instrument event of this type.| | | <a name=\"801\">801</a>|The instrument event does not exist.| | | <a name=\"802\">802</a>|The Instrument event is missing salient information.| | | <a name=\"803\">803</a>|The Instrument event could not be processed.| | | <a name=\"804\">804</a>|Some data requested does not follow the order graph assumptions.| | | <a name=\"805\">805</a>|The instrument event type does not exist.| | | <a name=\"806\">806</a>|The transaction template specification does not exist.| | | <a name=\"807\">807</a>|The default transaction template does not exist.| | | <a name=\"808\">808</a>|The transaction template does not exist.| | | <a name=\"811\">811</a>|A price could not be found for an order.| | | <a name=\"812\">812</a>|A price could not be found for an allocation.| | | <a name=\"813\">813</a>|Chart of Accounts not found.| | | <a name=\"814\">814</a>|Account not found.| | | <a name=\"815\">815</a>|Abor not found.| | | <a name=\"816\">816</a>|Abor Configuration not found.| | | <a name=\"817\">817</a>|Reconciliation mapping not found| | | <a name=\"818\">818</a>|Attribute type could not be deleted because it doesn\'t exist.| | | <a name=\"819\">819</a>|Reconciliation not found.| | | <a name=\"820\">820</a>|Custodian Account not found.| | | <a name=\"821\">821</a>|Allocation Failure| | | <a name=\"822\">822</a>|Reconciliation run not found| | | <a name=\"823\">823</a>|Reconciliation break not found| | | <a name=\"824\">824</a>|Entity link type could not be deleted because it doesn\'t exist.| | | <a name=\"828\">828</a>|Address key definition not found.| | | <a name=\"829\">829</a>|Compliance template not found.| | | <a name=\"830\">830</a>|Action not supported| | | <a name=\"831\">831</a>|Reference list not found.| | | <a name=\"832\">832</a>|Posting Module not found.| | | <a name=\"833\">833</a>|The type of parameter provided did not match that required by the compliance rule.| | | <a name=\"834\">834</a>|The parameters provided by a rule did not match those required by its template.| | | <a name=\"835\">835</a>|The entity has a property in a domain that is not supprted for that entity type.| | | <a name=\"836\">836</a>|Structured result data not found.| | | <a name=\"837\">837</a>|Diary entry not found.| | | <a name=\"838\">838</a>|Diary entry could not be created.| | | <a name=\"839\">839</a>|Diary entry already exists.| | | <a name=\"861\">861</a>|Compliance run summary not found.| | | <a name=\"869\">869</a>|Conflicting instrument properties in batch.| | | <a name=\"870\">870</a>|Compliance run summary already exists.| | | <a name=\"871\">871</a>|The specified impersonated user does not exist| | | <a name=\"874\">874</a>|Provided Property Domain is not supported for entity filter.| | | <a name=\"875\">875</a>|Cannot Delete System Reference List.| | | <a name=\"876\">876</a>|Cleardown Module not found.| | | <a name=\"879\">879</a>|Portfolios do not have the same base currency| | | <a name=\"880\">880</a>|There was a problem with the definition of the compliance expression.| | | <a name=\"881\">881</a>|Block overplaced.| | | <a name=\"882\">882</a>|Order not approved.| | | <a name=\"883\">883</a>|Cannot update the shared fields of a block with associated orders.| | | <a name=\"886\">886</a>|Cannot lock the period.| | | <a name=\"887\">887</a>|Cannot apply clear down module.| | | <a name=\"888\">888</a>|Cannot upsert Instrument Event Instruction.| | | <a name=\"889\">889</a>|Cannot read Instrument Event Instruction.| | | <a name=\"895\">895</a>|The Capital Ratio Calculation Is Wrong.| | | <a name=\"910\">910</a>|Cannot update a block referenced by a placement.| | | <a name=\"911\">911</a>|A Fund that references this Abor already exists.| | | <a name=\"912\">912</a>|Cannot add decision to Staged Modification.| | | <a name=\"913\">913</a>|The Staged Modification could not be applied.| | | <a name=\"914\">914</a>|Action cannot be executed.| | | <a name=\"915\">915</a>|Cannot upsert multiple versions of the same property in one request.| | | <a name=\"916\">916</a>|Placement and direct descendents have more executed quantity than total placement quantity.| | | <a name=\"917\">917</a>|Cannot update a placement with this EntryType.| | | <a name=\"918\">918</a>|Cannot update a placement in this State.| | | <a name=\"919\">919</a>|Placement could not be cancelled.| | | <a name=\"920\">920</a>|Share Class not configured in Fund| | | <a name=\"921\">921</a>|Share Class Sub Holding Key not configured in Portfolio| | | <a name=\"922\">922</a>|Could not update an order.| | | <a name=\"923\">923</a>|Multiple sets of Share Class Sub Holding Keys configured across the Portfolios of a Fund.| | | <a name=\"924\">924</a>|One or more matrix cells could not be added to the matrix.| | | <a name=\"925\">925</a>|There was a problem with the provided matrix definition.| | | <a name=\"926\">926</a>|Matrix definition does not exist.| | | <a name=\"927\">927</a>|Matrix definition could not be deleted because it doesn\'t exist.| | | <a name=\"928\">928</a>|DataType with Id already exists.| | | <a name=\"929\">929</a>|Square matrix is incomplete.| | | <a name=\"930\">930</a>|A conditional license term has been exceeded.| | | <a name=\"931\">931</a>|The Custom Data Model requested is not intended for the entity provided.| | | <a name=\"932\">932</a>|The entity provided does not have a mandatory property specified by the Custom Data Model.| | | <a name=\"933\">933</a>|The entity provided has a property not allowed by the specified Custom Data Model.| | | <a name=\"934\">934</a>|The entity provided does not have a mandatory identifier specified by the Custom Data Model.| | | <a name=\"935\">935</a>|The entity provided has an identifier not allowed by the specified Custom Data Model.| | | <a name=\"936\">936</a>|The Custom Data Model included an alias or sort-by attribute that was not on the definition.| | | <a name=\"937\">937</a>|The ClosedPeriod with the Id already exists on the Timeline| | | <a name=\"938\">938</a>|The new Closed Period would cause the Timeline to have non-contiguous Closed Periods| | | <a name=\"939\">939</a>|Blocked by a Network Zone| | | <a name=\"940\">940</a>|The entity provided does not meet the conditions of the Custom Data Model.| | | <a name=\"941\">941</a>|Order not compliant.| | | <a name=\"942\">942</a>|Action would create a circular dependency.| | | <a name=\"944\">944</a>|Derived Property calculation not complete.| | | <a name=\"945\">945</a>|Derived Property is not filterable.| | | <a name=\"946\">946</a>|The conditions provided have one or more errors.| | | <a name=\"947\">947</a>|The property/identifier domain and entity domain do not match.| | | <a name=\"948\">948</a>|Invalid Timeline| | | <a name=\"949\">949</a>|Filterable Derived Property limit reached.| | | <a name=\"950\">950</a>|Investor Record Identifier Already In Use| | | <a name=\"951\">951</a>|Investor Record Not Found| | | <a name=\"952\">952</a>|Investment Account Identifier Already In Use| | | <a name=\"953\">953</a>|Investment Account Not Found| | | <a name=\"954\">954</a>|Could Not Sweep Block| | | <a name=\"955\">955</a>|Entity Unique Id has the wrong format| | | <a name=\"956\">956</a>|Post Close Activity is invalid| | | <a name=\"957\">957</a>|The ClosedPeriod with the Id does not exist on the Timeline| | | <a name=\"958\">958</a>|Invalid Settlement Instructions| | | <a name=\"959\">959</a>|Order requires quantity.| | | <a name=\"960\">960</a>|Invalid DataPoint Value Assignment| | | <a name=\"961\">961</a>|Invalid Relational Dataset Field Definition| | | <a name=\"962\">962</a>|Relational Dataset Definition Does Not Exist| | | <a name=\"963\">963</a>|Timeline Bookmark Not In Open Period| | | <a name=\"964\">964</a>|The Custom Data Model specified identifiers but the entity does not support identifiers| | | <a name=\"965\">965</a>|The sort by provided has one or more errors| | | <a name=\"966\">966</a>|Invalid Custom Data Model Definition| | | <a name=\"967\">967</a>|Rule set does not exist on the Check Definition| | | <a name=\"968\">968</a>|The Closed Period is invalid| | | <a name=\"969\">969</a>|Cannot update a placement with this Stop Price.| | | <a name=\"970\">970</a>|Cannot update a placement with this Limit Price.| | | <a name=\"971\">971</a>|Cannot update a placement with the current Type.| | | <a name=\"974\">974</a>|Cannot PlaceBlocks against an \'Unsolicited\' Block (block containing 0 Orders).| | | <a name=\"975\">975</a>|No Portfolio Group Selected| | | <a name=\"976\">976</a>|Ambiguous Scope| |
4
+ *
5
+ * Contact: info@finbourne.com
6
+ *
7
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
8
+ * https://openapi-generator.tech
9
+ * Do not edit the class manually.
10
+ */
11
+ /* tslint:disable:no-unused-variable member-ordering */
12
+ import { Inject, Injectable, Optional } from '@angular/core';
13
+ import { HttpHeaders, HttpParams, HttpContext } from '@angular/common/http';
14
+ import { CustomHttpParameterCodec } from '../encoder';
15
+ // @ts-ignore
16
+ import { BASE_PATH } from '../variables';
17
+ import { Configuration } from '../configuration';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "@angular/common/http";
20
+ import * as i2 from "../configuration";
21
+ export class AllocationEventsService {
22
+ httpClient;
23
+ basePath = 'https://www.lusid.com/api';
24
+ defaultHeaders = new HttpHeaders();
25
+ configuration = new Configuration();
26
+ encoder;
27
+ constructor(httpClient, basePath, configuration) {
28
+ this.httpClient = httpClient;
29
+ if (configuration) {
30
+ this.configuration = configuration;
31
+ }
32
+ if (typeof this.configuration.basePath !== 'string') {
33
+ const firstBasePath = Array.isArray(basePath) ? basePath[0] : undefined;
34
+ if (firstBasePath != undefined) {
35
+ basePath = firstBasePath;
36
+ }
37
+ if (typeof basePath !== 'string') {
38
+ basePath = this.basePath;
39
+ }
40
+ this.configuration.basePath = basePath;
41
+ }
42
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
43
+ }
44
+ // @ts-ignore
45
+ addToHttpParams(httpParams, value, key) {
46
+ if (typeof value === "object" && value instanceof Date === false) {
47
+ httpParams = this.addToHttpParamsRecursive(httpParams, value);
48
+ }
49
+ else {
50
+ httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
51
+ }
52
+ return httpParams;
53
+ }
54
+ addToHttpParamsRecursive(httpParams, value, key) {
55
+ if (value == null) {
56
+ return httpParams;
57
+ }
58
+ if (typeof value === "object") {
59
+ if (Array.isArray(value)) {
60
+ value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
61
+ }
62
+ else if (value instanceof Date) {
63
+ if (key != null) {
64
+ httpParams = httpParams.append(key, value.toISOString().substring(0, 10));
65
+ }
66
+ else {
67
+ throw Error("key may not be null if value is Date");
68
+ }
69
+ }
70
+ else {
71
+ Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
72
+ }
73
+ }
74
+ else if (key != null) {
75
+ httpParams = httpParams.append(key, value);
76
+ }
77
+ else {
78
+ throw Error("key may not be null if value is not object or array");
79
+ }
80
+ return httpParams;
81
+ }
82
+ bookAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
83
+ const scope = requestParameters?.scope;
84
+ if (scope === null || scope === undefined) {
85
+ throw new Error('Required parameter scope was null or undefined when calling bookAllocationEvent.');
86
+ }
87
+ const code = requestParameters?.code;
88
+ if (code === null || code === undefined) {
89
+ throw new Error('Required parameter code was null or undefined when calling bookAllocationEvent.');
90
+ }
91
+ const allocationEventBookRequest = requestParameters?.allocationEventBookRequest;
92
+ if (allocationEventBookRequest === null || allocationEventBookRequest === undefined) {
93
+ throw new Error('Required parameter allocationEventBookRequest was null or undefined when calling bookAllocationEvent.');
94
+ }
95
+ const effectiveAt = requestParameters?.effectiveAt;
96
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
97
+ if (effectiveAt !== undefined && effectiveAt !== null) {
98
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
99
+ }
100
+ let localVarHeaders = this.defaultHeaders;
101
+ let localVarCredential;
102
+ // authentication (oauth2) required
103
+ localVarCredential = this.configuration.lookupCredential('oauth2');
104
+ if (localVarCredential) {
105
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
106
+ }
107
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
108
+ if (localVarHttpHeaderAcceptSelected === undefined) {
109
+ // to determine the Accept header
110
+ const httpHeaderAccepts = [
111
+ 'text/plain',
112
+ 'application/json',
113
+ 'text/json'
114
+ ];
115
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
116
+ }
117
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
118
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
119
+ }
120
+ let localVarHttpContext = options && options.context;
121
+ if (localVarHttpContext === undefined) {
122
+ localVarHttpContext = new HttpContext();
123
+ }
124
+ let localVarTransferCache = options && options.transferCache;
125
+ if (localVarTransferCache === undefined) {
126
+ localVarTransferCache = true;
127
+ }
128
+ // to determine the Content-Type header
129
+ const consumes = [
130
+ 'application/json-patch+json',
131
+ 'application/json',
132
+ 'text/json',
133
+ 'application/*+json'
134
+ ];
135
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
136
+ if (httpContentTypeSelected !== undefined) {
137
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
138
+ }
139
+ let responseType_ = 'json';
140
+ if (localVarHttpHeaderAcceptSelected) {
141
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
142
+ responseType_ = 'text';
143
+ }
144
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
145
+ responseType_ = 'json';
146
+ }
147
+ else {
148
+ responseType_ = 'blob';
149
+ }
150
+ }
151
+ let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/book`;
152
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
153
+ context: localVarHttpContext,
154
+ body: allocationEventBookRequest,
155
+ params: localVarQueryParameters,
156
+ responseType: responseType_,
157
+ withCredentials: this.configuration.withCredentials,
158
+ headers: localVarHeaders,
159
+ observe: observe,
160
+ transferCache: localVarTransferCache,
161
+ reportProgress: reportProgress
162
+ });
163
+ }
164
+ createAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
165
+ const scope = requestParameters?.scope;
166
+ if (scope === null || scope === undefined) {
167
+ throw new Error('Required parameter scope was null or undefined when calling createAllocationEvent.');
168
+ }
169
+ const allocationEventRequest = requestParameters?.allocationEventRequest;
170
+ if (allocationEventRequest === null || allocationEventRequest === undefined) {
171
+ throw new Error('Required parameter allocationEventRequest was null or undefined when calling createAllocationEvent.');
172
+ }
173
+ let localVarHeaders = this.defaultHeaders;
174
+ let localVarCredential;
175
+ // authentication (oauth2) required
176
+ localVarCredential = this.configuration.lookupCredential('oauth2');
177
+ if (localVarCredential) {
178
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
179
+ }
180
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
181
+ if (localVarHttpHeaderAcceptSelected === undefined) {
182
+ // to determine the Accept header
183
+ const httpHeaderAccepts = [
184
+ 'text/plain',
185
+ 'application/json',
186
+ 'text/json'
187
+ ];
188
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
189
+ }
190
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
191
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
192
+ }
193
+ let localVarHttpContext = options && options.context;
194
+ if (localVarHttpContext === undefined) {
195
+ localVarHttpContext = new HttpContext();
196
+ }
197
+ let localVarTransferCache = options && options.transferCache;
198
+ if (localVarTransferCache === undefined) {
199
+ localVarTransferCache = true;
200
+ }
201
+ // to determine the Content-Type header
202
+ const consumes = [
203
+ 'application/json-patch+json',
204
+ 'application/json',
205
+ 'text/json',
206
+ 'application/*+json'
207
+ ];
208
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
209
+ if (httpContentTypeSelected !== undefined) {
210
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
211
+ }
212
+ let responseType_ = 'json';
213
+ if (localVarHttpHeaderAcceptSelected) {
214
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
215
+ responseType_ = 'text';
216
+ }
217
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
218
+ responseType_ = 'json';
219
+ }
220
+ else {
221
+ responseType_ = 'blob';
222
+ }
223
+ }
224
+ let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
225
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
226
+ context: localVarHttpContext,
227
+ body: allocationEventRequest,
228
+ responseType: responseType_,
229
+ withCredentials: this.configuration.withCredentials,
230
+ headers: localVarHeaders,
231
+ observe: observe,
232
+ transferCache: localVarTransferCache,
233
+ reportProgress: reportProgress
234
+ });
235
+ }
236
+ deleteAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
237
+ const scope = requestParameters?.scope;
238
+ if (scope === null || scope === undefined) {
239
+ throw new Error('Required parameter scope was null or undefined when calling deleteAllocationEvent.');
240
+ }
241
+ const code = requestParameters?.code;
242
+ if (code === null || code === undefined) {
243
+ throw new Error('Required parameter code was null or undefined when calling deleteAllocationEvent.');
244
+ }
245
+ const effectiveAt = requestParameters?.effectiveAt;
246
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
247
+ if (effectiveAt !== undefined && effectiveAt !== null) {
248
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
249
+ }
250
+ let localVarHeaders = this.defaultHeaders;
251
+ let localVarCredential;
252
+ // authentication (oauth2) required
253
+ localVarCredential = this.configuration.lookupCredential('oauth2');
254
+ if (localVarCredential) {
255
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
256
+ }
257
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
258
+ if (localVarHttpHeaderAcceptSelected === undefined) {
259
+ // to determine the Accept header
260
+ const httpHeaderAccepts = [
261
+ 'text/plain',
262
+ 'application/json',
263
+ 'text/json'
264
+ ];
265
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
266
+ }
267
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
268
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
269
+ }
270
+ let localVarHttpContext = options && options.context;
271
+ if (localVarHttpContext === undefined) {
272
+ localVarHttpContext = new HttpContext();
273
+ }
274
+ let localVarTransferCache = options && options.transferCache;
275
+ if (localVarTransferCache === undefined) {
276
+ localVarTransferCache = true;
277
+ }
278
+ let responseType_ = 'json';
279
+ if (localVarHttpHeaderAcceptSelected) {
280
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
281
+ responseType_ = 'text';
282
+ }
283
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
284
+ responseType_ = 'json';
285
+ }
286
+ else {
287
+ responseType_ = 'blob';
288
+ }
289
+ }
290
+ let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
291
+ return this.httpClient.request('delete', `${this.configuration.basePath}${localVarPath}`, {
292
+ context: localVarHttpContext,
293
+ params: localVarQueryParameters,
294
+ responseType: responseType_,
295
+ withCredentials: this.configuration.withCredentials,
296
+ headers: localVarHeaders,
297
+ observe: observe,
298
+ transferCache: localVarTransferCache,
299
+ reportProgress: reportProgress
300
+ });
301
+ }
302
+ getAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
303
+ const scope = requestParameters?.scope;
304
+ if (scope === null || scope === undefined) {
305
+ throw new Error('Required parameter scope was null or undefined when calling getAllocationEvent.');
306
+ }
307
+ const code = requestParameters?.code;
308
+ if (code === null || code === undefined) {
309
+ throw new Error('Required parameter code was null or undefined when calling getAllocationEvent.');
310
+ }
311
+ const effectiveAt = requestParameters?.effectiveAt;
312
+ const asAt = requestParameters?.asAt;
313
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
314
+ if (effectiveAt !== undefined && effectiveAt !== null) {
315
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
316
+ }
317
+ if (asAt !== undefined && asAt !== null) {
318
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, asAt, 'asAt');
319
+ }
320
+ let localVarHeaders = this.defaultHeaders;
321
+ let localVarCredential;
322
+ // authentication (oauth2) required
323
+ localVarCredential = this.configuration.lookupCredential('oauth2');
324
+ if (localVarCredential) {
325
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
326
+ }
327
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
328
+ if (localVarHttpHeaderAcceptSelected === undefined) {
329
+ // to determine the Accept header
330
+ const httpHeaderAccepts = [
331
+ 'text/plain',
332
+ 'application/json',
333
+ 'text/json'
334
+ ];
335
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
336
+ }
337
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
338
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
339
+ }
340
+ let localVarHttpContext = options && options.context;
341
+ if (localVarHttpContext === undefined) {
342
+ localVarHttpContext = new HttpContext();
343
+ }
344
+ let localVarTransferCache = options && options.transferCache;
345
+ if (localVarTransferCache === undefined) {
346
+ localVarTransferCache = true;
347
+ }
348
+ let responseType_ = 'json';
349
+ if (localVarHttpHeaderAcceptSelected) {
350
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
351
+ responseType_ = 'text';
352
+ }
353
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
354
+ responseType_ = 'json';
355
+ }
356
+ else {
357
+ responseType_ = 'blob';
358
+ }
359
+ }
360
+ let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
361
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
362
+ context: localVarHttpContext,
363
+ params: localVarQueryParameters,
364
+ responseType: responseType_,
365
+ withCredentials: this.configuration.withCredentials,
366
+ headers: localVarHeaders,
367
+ observe: observe,
368
+ transferCache: localVarTransferCache,
369
+ reportProgress: reportProgress
370
+ });
371
+ }
372
+ listAllocationEvents(requestParameters, observe = 'body', reportProgress = false, options) {
373
+ const effectiveAt = requestParameters?.effectiveAt;
374
+ const asAt = requestParameters?.asAt;
375
+ const page = requestParameters?.page;
376
+ const limit = requestParameters?.limit;
377
+ const filter = requestParameters?.filter;
378
+ const sortBy = requestParameters?.sortBy;
379
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
380
+ if (effectiveAt !== undefined && effectiveAt !== null) {
381
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
382
+ }
383
+ if (asAt !== undefined && asAt !== null) {
384
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, asAt, 'asAt');
385
+ }
386
+ if (page !== undefined && page !== null) {
387
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, page, 'page');
388
+ }
389
+ if (limit !== undefined && limit !== null) {
390
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, 'limit');
391
+ }
392
+ if (filter !== undefined && filter !== null) {
393
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, filter, 'filter');
394
+ }
395
+ if (sortBy) {
396
+ sortBy.forEach((element) => {
397
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, element, 'sortBy');
398
+ });
399
+ }
400
+ let localVarHeaders = this.defaultHeaders;
401
+ let localVarCredential;
402
+ // authentication (oauth2) required
403
+ localVarCredential = this.configuration.lookupCredential('oauth2');
404
+ if (localVarCredential) {
405
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
406
+ }
407
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
408
+ if (localVarHttpHeaderAcceptSelected === undefined) {
409
+ // to determine the Accept header
410
+ const httpHeaderAccepts = [
411
+ 'text/plain',
412
+ 'application/json',
413
+ 'text/json'
414
+ ];
415
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
416
+ }
417
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
418
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
419
+ }
420
+ let localVarHttpContext = options && options.context;
421
+ if (localVarHttpContext === undefined) {
422
+ localVarHttpContext = new HttpContext();
423
+ }
424
+ let localVarTransferCache = options && options.transferCache;
425
+ if (localVarTransferCache === undefined) {
426
+ localVarTransferCache = true;
427
+ }
428
+ let responseType_ = 'json';
429
+ if (localVarHttpHeaderAcceptSelected) {
430
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
431
+ responseType_ = 'text';
432
+ }
433
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
434
+ responseType_ = 'json';
435
+ }
436
+ else {
437
+ responseType_ = 'blob';
438
+ }
439
+ }
440
+ let localVarPath = `/api/allocationevents`;
441
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
442
+ context: localVarHttpContext,
443
+ params: localVarQueryParameters,
444
+ responseType: responseType_,
445
+ withCredentials: this.configuration.withCredentials,
446
+ headers: localVarHeaders,
447
+ observe: observe,
448
+ transferCache: localVarTransferCache,
449
+ reportProgress: reportProgress
450
+ });
451
+ }
452
+ reallocateAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
453
+ const scope = requestParameters?.scope;
454
+ if (scope === null || scope === undefined) {
455
+ throw new Error('Required parameter scope was null or undefined when calling reallocateAllocationEvent.');
456
+ }
457
+ const code = requestParameters?.code;
458
+ if (code === null || code === undefined) {
459
+ throw new Error('Required parameter code was null or undefined when calling reallocateAllocationEvent.');
460
+ }
461
+ const allocationEventReallocateRequest = requestParameters?.allocationEventReallocateRequest;
462
+ if (allocationEventReallocateRequest === null || allocationEventReallocateRequest === undefined) {
463
+ throw new Error('Required parameter allocationEventReallocateRequest was null or undefined when calling reallocateAllocationEvent.');
464
+ }
465
+ const effectiveAt = requestParameters?.effectiveAt;
466
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
467
+ if (effectiveAt !== undefined && effectiveAt !== null) {
468
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, effectiveAt, 'effectiveAt');
469
+ }
470
+ let localVarHeaders = this.defaultHeaders;
471
+ let localVarCredential;
472
+ // authentication (oauth2) required
473
+ localVarCredential = this.configuration.lookupCredential('oauth2');
474
+ if (localVarCredential) {
475
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
476
+ }
477
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
478
+ if (localVarHttpHeaderAcceptSelected === undefined) {
479
+ // to determine the Accept header
480
+ const httpHeaderAccepts = [
481
+ 'text/plain',
482
+ 'application/json',
483
+ 'text/json'
484
+ ];
485
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
486
+ }
487
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
488
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
489
+ }
490
+ let localVarHttpContext = options && options.context;
491
+ if (localVarHttpContext === undefined) {
492
+ localVarHttpContext = new HttpContext();
493
+ }
494
+ let localVarTransferCache = options && options.transferCache;
495
+ if (localVarTransferCache === undefined) {
496
+ localVarTransferCache = true;
497
+ }
498
+ // to determine the Content-Type header
499
+ const consumes = [
500
+ 'application/json-patch+json',
501
+ 'application/json',
502
+ 'text/json',
503
+ 'application/*+json'
504
+ ];
505
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
506
+ if (httpContentTypeSelected !== undefined) {
507
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
508
+ }
509
+ let responseType_ = 'json';
510
+ if (localVarHttpHeaderAcceptSelected) {
511
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
512
+ responseType_ = 'text';
513
+ }
514
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
515
+ responseType_ = 'json';
516
+ }
517
+ else {
518
+ responseType_ = 'blob';
519
+ }
520
+ }
521
+ let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/reallocate`;
522
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
523
+ context: localVarHttpContext,
524
+ body: allocationEventReallocateRequest,
525
+ params: localVarQueryParameters,
526
+ responseType: responseType_,
527
+ withCredentials: this.configuration.withCredentials,
528
+ headers: localVarHeaders,
529
+ observe: observe,
530
+ transferCache: localVarTransferCache,
531
+ reportProgress: reportProgress
532
+ });
533
+ }
534
+ upsertAllocationEvent(requestParameters, observe = 'body', reportProgress = false, options) {
535
+ const scope = requestParameters?.scope;
536
+ if (scope === null || scope === undefined) {
537
+ throw new Error('Required parameter scope was null or undefined when calling upsertAllocationEvent.');
538
+ }
539
+ const code = requestParameters?.code;
540
+ if (code === null || code === undefined) {
541
+ throw new Error('Required parameter code was null or undefined when calling upsertAllocationEvent.');
542
+ }
543
+ const allocationEventRequest = requestParameters?.allocationEventRequest;
544
+ if (allocationEventRequest === null || allocationEventRequest === undefined) {
545
+ throw new Error('Required parameter allocationEventRequest was null or undefined when calling upsertAllocationEvent.');
546
+ }
547
+ let localVarHeaders = this.defaultHeaders;
548
+ let localVarCredential;
549
+ // authentication (oauth2) required
550
+ localVarCredential = this.configuration.lookupCredential('oauth2');
551
+ if (localVarCredential) {
552
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
553
+ }
554
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
555
+ if (localVarHttpHeaderAcceptSelected === undefined) {
556
+ // to determine the Accept header
557
+ const httpHeaderAccepts = [
558
+ 'text/plain',
559
+ 'application/json',
560
+ 'text/json'
561
+ ];
562
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
563
+ }
564
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
565
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
566
+ }
567
+ let localVarHttpContext = options && options.context;
568
+ if (localVarHttpContext === undefined) {
569
+ localVarHttpContext = new HttpContext();
570
+ }
571
+ let localVarTransferCache = options && options.transferCache;
572
+ if (localVarTransferCache === undefined) {
573
+ localVarTransferCache = true;
574
+ }
575
+ // to determine the Content-Type header
576
+ const consumes = [
577
+ 'application/json-patch+json',
578
+ 'application/json',
579
+ 'text/json',
580
+ 'application/*+json'
581
+ ];
582
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
583
+ if (httpContentTypeSelected !== undefined) {
584
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
585
+ }
586
+ let responseType_ = 'json';
587
+ if (localVarHttpHeaderAcceptSelected) {
588
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
589
+ responseType_ = 'text';
590
+ }
591
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
592
+ responseType_ = 'json';
593
+ }
594
+ else {
595
+ responseType_ = 'blob';
596
+ }
597
+ }
598
+ let localVarPath = `/api/allocationevents/${this.configuration.encodeParam({ name: "scope", value: scope, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "code", value: code, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
599
+ return this.httpClient.request('put', `${this.configuration.basePath}${localVarPath}`, {
600
+ context: localVarHttpContext,
601
+ body: allocationEventRequest,
602
+ responseType: responseType_,
603
+ withCredentials: this.configuration.withCredentials,
604
+ headers: localVarHeaders,
605
+ observe: observe,
606
+ transferCache: localVarTransferCache,
607
+ reportProgress: reportProgress
608
+ });
609
+ }
610
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AllocationEventsService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
611
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AllocationEventsService, providedIn: 'root' });
612
+ }
613
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AllocationEventsService, decorators: [{
614
+ type: Injectable,
615
+ args: [{
616
+ providedIn: 'root'
617
+ }]
618
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
619
+ type: Optional
620
+ }, {
621
+ type: Inject,
622
+ args: [BASE_PATH]
623
+ }] }, { type: i2.Configuration, decorators: [{
624
+ type: Optional
625
+ }] }] });
626
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb2NhdGlvbkV2ZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmluYm91cm5lL2x1c2lkLXNkay1hbmd1bGFyMTgvc3JjL2xpYi8uZ2VuZXJhdGVkL2FwaS9hbGxvY2F0aW9uRXZlbnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBQ0gsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQ1UsV0FBVyxFQUN4RCxNQUFZLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUErQixZQUFZLENBQUM7QUFvQi9FLGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQWdGckYsTUFBTSxPQUFPLHVCQUF1QjtJQU9WO0lBTFosUUFBUSxHQUFHLDJCQUEyQixDQUFDO0lBQzFDLGNBQWMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ25DLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQ3BDLE9BQU8sQ0FBcUI7SUFFbkMsWUFBc0IsVUFBc0IsRUFBZ0MsUUFBeUIsRUFBYyxhQUE0QjtRQUF6SCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3hDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFD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LFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM1YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBa0IsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEVBQ2xHO1lBQ0ksT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixJQUFJLEVBQUUsc0JBQXNCO1lBQzVCLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUNKLENBQUM7SUFDTixDQUFDO3VHQXJ1QlEsdUJBQXVCLDRDQU9pQyxTQUFTOzJHQVBqRSx1QkFBdUIsY0FGdEIsTUFBTTs7MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWtELFFBQVE7OzBCQUFHLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExVU0lEIEFQSVxuICogIyBJbnRyb2R1Y3Rpb24gIFRoaXMgcGFnZSBkb2N1bWVudHMgdGhlIFtMVVNJRCBBUElzXSguLi8uLi8uLi9hcGkvc3dhZ2dlciksIHdoaWNoIGFsbG93cyBhdXRob3Jpc2VkIGNsaWVudHMgdG8gcXVlcnkgYW5kIHVwZGF0ZSB0aGVpciBkYXRhIHdpdGhpbiB0aGUgTFVTSUQgcGxhdGZvcm0uICBTREtzIHRvIGludGVyYWN0IHdpdGggdGhlIExVU0lEIEFQSXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgZm9sbG93aW5nIGxhbmd1YWdlcyBhbmQgZnJhbWV3b3JrczogICogW0MjXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1jc2hhcnApICogW0phdmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWphdmEpICogW0phdmFTY3JpcHRdKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLWpzKSAqIFtQeXRob25dKGh0dHBzOi8vZ2l0aHViLmNvbS9maW5ib3VybmUvbHVzaWQtc2RrLXB5dGhvbikgKiBbQW5ndWxhcl0oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstYW5ndWxhcikgIFRoZSBMVVNJRCBwbGF0Zm9ybSBpcyBtYWRlIHVwIG9mIGEgbnVtYmVyIG9mIHN1Yi1hcHBsaWNhdGlvbnMuIFlvdSBjYW4gZmluZCB0aGUgQVBJIC8gc3dhZ2dlciBkb2N1bWVudGF0aW9uIGJ5IGZvbGxvd2luZyB0aGUgbGlua3MgaW4gdGhlIHRhYmxlIGJlbG93LiAgIHwgQXBwbGljYXRpb24gICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFQSSAvIFN3YWdnZXIgRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBMVVNJRCAgICAgICAgIHwgT3BlbiwgQVBJLWZpcnN0LCBkZXZlbG9wZXItZnJpZW5kbHkgaW52ZXN0bWVudCBkYXRhIHBsYXRmb3JtLiAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2FwaS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgICAgICB8IHwgV2ViIGFwcCAgICAgICB8IFVzZXItZmFjaW5nIGZyb250IGVuZCBmb3IgTFVTSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9hcHAvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgICAgICAgfCB8IFNjaGVkdWxlciAgICAgfCBBdXRvbWF0ZWQgam9iIHNjaGVkdWxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vc2NoZWR1bGVyMi9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgIHwgfCBJbnNpZ2h0cyAgICAgIHwgTW9uaXRvcmluZyBhbmQgdHJvdWJsZXNob290aW5nIHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2luc2lnaHRzL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICB8IHwgSWRlbnRpdHkgICAgICB8IElkZW50aXR5IG1hbmFnZW1lbnQgZm9yIExVU0lEIChpbiBjb25qdW5jdGlvbiB3aXRoIEFjY2VzcykgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi9pZGVudGl0eS9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCB8IEFjY2VzcyAgICAgICAgfCBBY2Nlc3MgY29udHJvbCBmb3IgTFVTSUQgKGluIGNvbmp1bmN0aW9uIHdpdGggSWRlbnRpdHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vYWNjZXNzL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgIHwgfCBEcml2ZSAgICAgICAgIHwgU2VjdXJlIGZpbGUgcmVwb3NpdG9yeSBhbmQgbWFuYWdlciBmb3IgY29sbGFib3JhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2RyaXZlL3N3YWdnZXIvaW5kZXguaHRtbCkgICAgICAgICB8IHwgTHVtaW5lc2NlICAgICB8IERhdGEgdmlydHVhbGlzYXRpb24gc2VydmljZSAocXVlcnkgZGF0YSBmcm9tIG11bHRpcGxlIHByb3ZpZGVycywgaW5jbHVkaW5nIExVU0lEKSB8IFtTd2FnZ2VyXSguLi8uLi8uLi9ob25leWNvbWIvc3dhZ2dlci9pbmRleC5odG1sKSAgICAgfCB8IE5vdGlmaWNhdGlvbiAgfCBOb3RpZmljYXRpb24gc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbU3dhZ2dlcl0oLi4vLi4vLi4vbm90aWZpY2F0aW9uL3N3YWdnZXIvaW5kZXguaHRtbCkgIHwgfCBDb25maWd1cmF0aW9uIHwgRmlsZSBzdG9yZSBmb3Igc2VjcmV0cyBhbmQgb3RoZXIgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N3YWdnZXJdKC4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vc3dhZ2dlci9pbmRleC5odG1sKSB8IHwgV29ya2Zsb3cgICAgICB8IFdvcmtmbG93IHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtTd2FnZ2VyXSguLi8uLi8uLi93b3JrZmxvdy9zd2FnZ2VyL2luZGV4Lmh0bWwpICAgICAgfCAgICMgRXJyb3IgQ29kZXMgIHwgQ29kZXxOYW1lfERlc2NyaXB0aW9uIHwgfCAtLS18LS0tfC0tLSB8IHwgPGEgbmFtZT1cXFwiLTEwXFxcIj4tMTA8L2E+fFNlcnZlciBDb25maWd1cmF0aW9uIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIi0xXFxcIj4tMTwvYT58VW5rbm93biBlcnJvcnxBbiB1bmV4cGVjdGVkIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBvbiBvdXIgc2lkZS4gfCB8IDxhIG5hbWU9XFxcIjEwMlxcXCI+MTAyPC9hPnxWZXJzaW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDNcXFwiPjEwMzwvYT58QXBpIFJhdGUgTGltaXQgVmlvbGF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjEwNFxcXCI+MTA0PC9hPnxJbnN0cnVtZW50IE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDVcXFwiPjEwNTwvYT58UHJvcGVydHkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjEwNlxcXCI+MTA2PC9hPnxQb3J0Zm9saW8gUmVjdXJzaW9uIERlcHRofCAgfCB8IDxhIG5hbWU9XFxcIjEwOFxcXCI+MTA4PC9hPnxHcm91cCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA5XFxcIj4xMDk8L2E+fFBvcnRmb2xpbyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTEwXFxcIj4xMTA8L2E+fFByb3BlcnR5IFNjaGVtYSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTExXFxcIj4xMTE8L2E+fFBvcnRmb2xpbyBBbmNlc3RyeSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTEyXFxcIj4xMTI8L2E+fFBvcnRmb2xpbyBXaXRoIElkIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjExM1xcXCI+MTEzPC9hPnxPcnBoYW5lZCBQb3J0Zm9saW98ICB8IHwgPGEgbmFtZT1cXFwiMTE5XFxcIj4xMTk8L2E+fE1pc3NpbmcgQmFzZSBDbGFpbXN8ICB8IHwgPGEgbmFtZT1cXFwiMTIxXFxcIj4xMjE8L2E+fFByb3BlcnR5IE5vdCBEZWZpbmVkfCAgfCB8IDxhIG5hbWU9XFxcIjEyMlxcXCI+MTIyPC9hPnxDYW5ub3QgRGVsZXRlIFN5c3RlbSBQcm9wZXJ0eXwgIHwgfCA8YSBuYW1lPVxcXCIxMjNcXFwiPjEyMzwvYT58Q2Fubm90IE1vZGlmeSBJbW11dGFibGUgUHJvcGVydHkgRmllbGR8ICB8IHwgPGEgbmFtZT1cXFwiMTI0XFxcIj4xMjQ8L2E+fFByb3BlcnR5IEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEyNVxcXCI+MTI1PC9hPnxJbnZhbGlkIFByb3BlcnR5IExpZmUgVGltZXwgIHwgfCA8YSBuYW1lPVxcXCIxMjZcXFwiPjEyNjwvYT58UHJvcGVydHkgQ29uc3RyYWludCBTdHlsZSBFeGNsdWRlcyBQcm9wZXJ0aWVzfCAgfCB8IDxhIG5hbWU9XFxcIjEyN1xcXCI+MTI3PC9hPnxDYW5ub3QgTW9kaWZ5IERlZmF1bHQgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEyOFxcXCI+MTI4PC9hPnxHcm91cCBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMjlcXFwiPjEyOTwvYT58Tm8gU3VjaCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMTMwXFxcIj4xMzA8L2E+fFVuZGVmaW5lZCBWYWx1ZSBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMVxcXCI+MTMxPC9hPnxVbnN1cHBvcnRlZCBWYWx1ZSBUeXBlIERlZmluZWQgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjEzMlxcXCI+MTMyPC9hPnxWYWxpZGF0aW9uIEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjEzM1xcXCI+MTMzPC9hPnxMb29wIERldGVjdGVkIEluIEdyb3VwIEhpZXJhcmNoeXwgIHwgfCA8YSBuYW1lPVxcXCIxMzRcXFwiPjEzNDwvYT58VW5kZWZpbmVkIEFjY2VwdGFibGUgVmFsdWVzfCAgfCB8IDxhIG5hbWU9XFxcIjEzNVxcXCI+MTM1PC9hPnxTdWIgR3JvdXAgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTM4XFxcIj4xMzg8L2E+fFByaWNlIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTM5XFxcIj4xMzk8L2E+fEFuYWx5dGljIFN0b3JlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNDFcXFwiPjE0MTwvYT58QW5hbHl0aWMgU3RvcmUgQWxyZWFkeSBFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTQzXFxcIj4xNDM8L2E+fENsaWVudCBJbnN0cnVtZW50IEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE0NFxcXCI+MTQ0PC9hPnxEdXBsaWNhdGUgSW4gUGFyYW1ldGVyIFNldHwgIHwgfCA8YSBuYW1lPVxcXCIxNDdcXFwiPjE0NzwvYT58UmVzdWx0cyBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ4XFxcIj4xNDg8L2E+fE9yZGVyIEZpZWxkIE5vdCBJbiBSZXN1bHQgU2V0fCAgfCB8IDxhIG5hbWU9XFxcIjE0OVxcXCI+MTQ5PC9hPnxPcGVyYXRpb24gRmFpbGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE1MFxcXCI+MTUwPC9hPnxFbGFzdGljIFNlYXJjaCBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIxNTFcXFwiPjE1MTwvYT58SW52YWxpZCBQYXJhbWV0ZXIgVmFsdWV8ICB8IHwgPGEgbmFtZT1cXFwiMTUzXFxcIj4xNTM8L2E+fENvbW1hbmQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1NFxcXCI+MTU0PC9hPnxFbnRpdHkgU3RhdGUgQ29uc3RydWN0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTU1XFxcIj4xNTU8L2E+fEVudGl0eSBUaW1lbGluZSBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNTZcXFwiPjE1NjwvYT58Q29uY3VycmVuY3kgQ29uZmxpY3QgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTdcXFwiPjE1NzwvYT58SW52YWxpZCBSZXF1ZXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE1OFxcXCI+MTU4PC9hPnxFdmVudCBQdWJsaXNoIFVua25vd258ICB8IHwgPGEgbmFtZT1cXFwiMTU5XFxcIj4xNTk8L2E+fEV2ZW50IFF1ZXJ5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTYwXFxcIj4xNjA8L2E+fEJsb2IgRGlkIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNjJcXFwiPjE2MjwvYT58U3ViIFN5c3RlbSBSZXF1ZXN0IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTYzXFxcIj4xNjM8L2E+fFN1YiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2NVxcXCI+MTY1PC9hPnxGYWlsZWQgVG8gRGVsZXRlfCAgfCB8IDxhIG5hbWU9XFxcIjE2NlxcXCI+MTY2PC9hPnxVcHNlcnQgQ2xpZW50IEluc3RydW1lbnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjdcXFwiPjE2NzwvYT58SWxsZWdhbCBBcyBBdCBJbnRlcnZhbHwgIHwgfCA8YSBuYW1lPVxcXCIxNjhcXFwiPjE2ODwvYT58SWxsZWdhbCBCaXRlbXBvcmFsIFF1ZXJ5fCAgfCB8IDxhIG5hbWU9XFxcIjE2OVxcXCI+MTY5PC9hPnxJbnZhbGlkIEFsdGVybmF0ZSBJZHwgIHwgfCA8YSBuYW1lPVxcXCIxNzBcXFwiPjE3MDwvYT58Q2Fubm90IEFkZCBOb24tV3JpdGFibGUgUHJvcGVydGllcyBUbyBFbnRpdHl8ICB8IHwgPGEgbmFtZT1cXFwiMTcxXFxcIj4xNzE8L2E+fEVudGl0eSBBbHJlYWR5IEV4aXN0cyBJbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCIxNzJcXFwiPjE3MjwvYT58RW50aXR5IFdpdGggSWQgRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMTczXFxcIj4xNzM8L2E+fEVudGl0eSBXaXRoIElkIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE3NFxcXCI+MTc0PC9hPnxEZXJpdmVkIFBvcnRmb2xpbyBEZXRhaWxzIERvIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNzVcXFwiPjE3NTwvYT58RW50aXR5IE5vdCBJbiBHcm91cHwgIHwgfCA8YSBuYW1lPVxcXCIxNzZcXFwiPjE3NjwvYT58UG9ydGZvbGlvIFdpdGggTmFtZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNzdcXFwiPjE3NzwvYT58SW52YWxpZCBUcmFuc2FjdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiMTc4XFxcIj4xNzg8L2E+fFJlZmVyZW5jZSBQb3J0Zm9saW8gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE3OVxcXCI+MTc5PC9hPnxEdXBsaWNhdGUgSWR8ICB8IHwgPGEgbmFtZT1cXFwiMTgwXFxcIj4xODA8L2E+fENvbW1hbmQgUmV0cmlldmFsIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTgxXFxcIj4xODE8L2E+fERhdGEgRmlsdGVyIEFwcGxpY2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTgyXFxcIj4xODI8L2E+fFNlYXJjaCBGYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTgzXFxcIj4xODM8L2E+fE1vdmVtZW50cyBFbmdpbmUgQ29uZmlndXJhdGlvbiBLZXkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxODRcXFwiPjE4NDwvYT58RnggUmF0ZSBTb3VyY2UgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE4NVxcXCI+MTg1PC9hPnxBY2NydWFsIFNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTg2XFxcIj4xODY8L2E+fEFjY2VzcyBEZW5pZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTg3XFxcIj4xODc8L2E+fEludmFsaWQgSWRlbnRpdHkgVG9rZW58ICB8IHwgPGEgbmFtZT1cXFwiMTg4XFxcIj4xODg8L2E+fEludmFsaWQgUmVxdWVzdCBIZWFkZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjE4OVxcXCI+MTg5PC9hPnxQcmljZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTkwXFxcIj4xOTA8L2E+fEludmFsaWQgU3ViIEhvbGRpbmcgS2V5cyBQcm92aWRlZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTFcXFwiPjE5MTwvYT58RHVwbGljYXRlIFN1YiBIb2xkaW5nIEtleXMgUHJvdmlkZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTkyXFxcIj4xOTI8L2E+fEN1dCBEZWZpbml0aW9uIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTNcXFwiPjE5MzwvYT58Q3V0IERlZmluaXRpb24gSW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTRcXFwiPjE5NDwvYT58VGltZSBWYXJpYW50IFByb3BlcnR5IERlbGV0aW9uIERhdGUgVW5zcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTk1XFxcIj4xOTU8L2E+fFBlcnBldHVhbCBQcm9wZXJ0eSBEZWxldGlvbiBEYXRlIFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIxOTZcXFwiPjE5NjwvYT58VGltZSBWYXJpYW50IFByb3BlcnR5IFVwc2VydCBEYXRlIFVuc3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5N1xcXCI+MTk3PC9hPnxQZXJwZXR1YWwgUHJvcGVydHkgVXBzZXJ0IERhdGUgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwMFxcXCI+MjAwPC9hPnxJbnZhbGlkIFVuaXQgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDFcXFwiPjIwMTwvYT58SW52YWxpZCBUeXBlIEZvciBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjAyXFxcIj4yMDI8L2E+fEludmFsaWQgVmFsdWUgRm9yIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDNcXFwiPjIwMzwvYT58VW5pdCBOb3QgRGVmaW5lZCBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNFxcXCI+MjA0PC9hPnxVbml0cyBOb3QgU3VwcG9ydGVkIE9uIERhdGEgVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDVcXFwiPjIwNTwvYT58Q2Fubm90IFNwZWNpZnkgVW5pdHMgT24gRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNlxcXCI+MjA2PC9hPnxVbml0IFNjaGVtYSBJbmNvbnNpc3RlbnQgV2l0aCBEYXRhIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjA3XFxcIj4yMDc8L2E+fFVuaXQgRGVmaW5pdGlvbiBOb3QgU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwOFxcXCI+MjA4PC9hPnxEdXBsaWNhdGUgVW5pdCBEZWZpbml0aW9ucyBTcGVjaWZpZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjA5XFxcIj4yMDk8L2E+fEludmFsaWQgVW5pdHMgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMTBcXFwiPjIxMDwvYT58SW52YWxpZCBJbnN0cnVtZW50IElkZW50aWZpZXIgVW5pdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTFcXFwiPjIxMTwvYT58SG9sZGluZ3MgQWRqdXN0bWVudCBEb2VzIE5vdCBFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIyMTJcXFwiPjIxMjwvYT58Q291bGQgTm90IEJ1aWxkIEV4Y2VsIFVybHwgIHwgfCA8YSBuYW1lPVxcXCIyMTNcXFwiPjIxMzwvYT58Q291bGQgTm90IEdldCBFeGNlbCBWZXJzaW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIxNFxcXCI+MjE0PC9hPnxJbnN0cnVtZW50IEJ5IENvZGUgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjIxNVxcXCI+MjE1PC9hPnxFbnRpdHkgU2NoZW1hIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjIxNlxcXCI+MjE2PC9hPnxGZWF0dXJlIE5vdCBTdXBwb3J0ZWQgT24gUG9ydGZvbGlvIFR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiMjE3XFxcIj4yMTc8L2E+fFF1b3RlIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMThcXFwiPjIxODwvYT58SW52YWxpZCBRdW90ZSBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjIxOVxcXCI+MjE5PC9hPnxJbnZhbGlkIE1ldHJpYyBGb3IgRGF0YSBUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIyMFxcXCI+MjIwPC9hPnxJbnZhbGlkIEluc3RydW1lbnQgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMjFcXFwiPjIyMTwvYT58SW5zdHJ1bWVudCBVcHNlcnQgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMjJcXFwiPjIyMjwvYT58UmVmZXJlbmNlIFBvcnRmb2xpbyBSZXF1ZXN0IE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjIzXFxcIj4yMjM8L2E+fFRyYW5zYWN0aW9uIFBvcnRmb2xpbyBSZXF1ZXN0IE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjI0XFxcIj4yMjQ8L2E+fEludmFsaWQgUHJvcGVydHkgVmFsdWUgQXNzaWdubWVudHwgIHwgfCA8YSBuYW1lPVxcXCIyMzBcXFwiPjIzMDwvYT58VHJhbnNhY3Rpb24gVHlwZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMjMxXFxcIj4yMzE8L2E+fFRyYW5zYWN0aW9uIFR5cGUgRHVwbGljYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjMyXFxcIj4yMzI8L2E+fFBvcnRmb2xpbyBEb2VzIE5vdCBFeGlzdCBBdCBHaXZlbiBEYXRlfCAgfCB8IDxhIG5hbWU9XFxcIjIzM1xcXCI+MjMzPC9hPnxRdWVyeSBQYXJzZXIgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMzRcXFwiPjIzNDwvYT58RHVwbGljYXRlIENvbnN0aXR1ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzNVxcXCI+MjM1PC9hPnxVbnJlc29sdmVkIEluc3RydW1lbnQgQ29uc3RpdHVlbnR8ICB8IHwgPGEgbmFtZT1cXFwiMjM2XFxcIj4yMzY8L2E+fFVucmVzb2x2ZWQgSW5zdHJ1bWVudCBJbiBUcmFuc2l0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIzN1xcXCI+MjM3PC9hPnxNaXNzaW5nIFNpZGUgRGVmaW5pdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiMjQwXFxcIj4yNDA8L2E+fER1cGxpY2F0ZSBDYWxjdWxhdGlvbnMgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyOTlcXFwiPjI5OTwvYT58SW52YWxpZCBSZWNpcGV8ICB8IHwgPGEgbmFtZT1cXFwiMzAwXFxcIj4zMDA8L2E+fE1pc3NpbmcgUmVjaXBlfCAgfCB8IDxhIG5hbWU9XFxcIjMwMVxcXCI+MzAxPC9hPnxEZXBlbmRlbmNpZXN8ICB8IHwgPGEgbmFtZT1cXFwiMzA0XFxcIj4zMDQ8L2E+fFBvcnRmb2xpbyBQcmVwcm9jZXNzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEwXFxcIj4zMTA8L2E+fFZhbHVhdGlvbiBFbmdpbmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTFcXFwiPjMxMTwvYT58VGFzayBGYWN0b3J5IEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEyXFxcIj4zMTI8L2E+fFRhc2sgRXZhbHVhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxM1xcXCI+MzEzPC9hPnxUYXNrIEdlbmVyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTRcXFwiPjMxNDwvYT58RW5naW5lIENvbmZpZ3VyYXRpb24gRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMTVcXFwiPjMxNTwvYT58TW9kZWwgU3BlY2lmaWNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMyMFxcXCI+MzIwPC9hPnxNYXJrZXQgRGF0YSBLZXkgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMjFcXFwiPjMyMTwvYT58TWFya2V0IFJlc29sdmVyIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzIyXFxcIj4zMjI8L2E+fE1hcmtldCBEYXRhIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMwXFxcIj4zMzA8L2E+fEN1cnZlIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzMxXFxcIj4zMzE8L2E+fFZvbGF0aWxpdHkgU3VyZmFjZSBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMzMlxcXCI+MzMyPC9hPnxWb2xhdGlsaXR5IEN1YmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTBcXFwiPjM1MDwvYT58SW5zdHJ1bWVudCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM1MVxcXCI+MzUxPC9hPnxDYXNoIEZsb3dzIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUyXFxcIj4zNTI8L2E+fFJlZmVyZW5jZSBEYXRhIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzYwXFxcIj4zNjA8L2E+fEFnZ3JlZ2F0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzYxXFxcIj4zNjE8L2E+fEFnZ3JlZ2F0aW9uIE1lYXN1cmUgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzBcXFwiPjM3MDwvYT58UmVzdWx0IFJldHJpZXZhbCBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MVxcXCI+MzcxPC9hPnxSZXN1bHQgUHJvY2Vzc2luZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MlxcXCI+MzcyPC9hPnxWZW5kb3IgUmVzdWx0IFByb2Nlc3NpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzNcXFwiPjM3MzwvYT58VmVuZG9yIFJlc3VsdCBNYXBwaW5nIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc0XFxcIj4zNzQ8L2E+fFZlbmRvciBMaWJyYXJ5IFVuYXV0aG9yaXNlZHwgIHwgfCA8YSBuYW1lPVxcXCIzNzVcXFwiPjM3NTwvYT58VmVuZG9yIENvbm5lY3Rpdml0eSBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIzNzZcXFwiPjM3NjwvYT58VmVuZG9yIEludGVyZmFjZSBFcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCIzNzdcXFwiPjM3NzwvYT58VmVuZG9yIFByaWNpbmcgRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzhcXFwiPjM3ODwvYT58VmVuZG9yIFRyYW5zbGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc5XFxcIj4zNzk8L2E+fFZlbmRvciBLZXkgTWFwcGluZyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MFxcXCI+MzgwPC9hPnxWZW5kb3IgUmVmbGVjdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MVxcXCI+MzgxPC9hPnxWZW5kb3IgUHJvY2VzcyBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM4MlxcXCI+MzgyPC9hPnxWZW5kb3IgU3lzdGVtIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzkwXFxcIj4zOTA8L2E+fEF0dGVtcHQgVG8gVXBzZXJ0IER1cGxpY2F0ZSBRdW90ZXN8ICB8IHwgPGEgbmFtZT1cXFwiMzkxXFxcIj4zOTE8L2E+fENvcnBvcmF0ZSBBY3Rpb24gU291cmNlIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjM5MlxcXCI+MzkyPC9hPnxDb3Jwb3JhdGUgQWN0aW9uIFNvdXJjZSBBbHJlYWR5IEV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIzOTNcXFwiPjM5MzwvYT58SW5zdHJ1bWVudCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjM5NFxcXCI+Mzk0PC9hPnxQcm9wZXJ0aWVzIE5vdCBGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIzOTVcXFwiPjM5NTwvYT58QmF0Y2ggT3BlcmF0aW9uIEFib3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDAwXFxcIj40MDA8L2E+fEludmFsaWQgSXNvNDIxNyBDdXJyZW5jeSBDb2RlfCAgfCB8IDxhIG5hbWU9XFxcIjQwMVxcXCI+NDAxPC9hPnxDYW5ub3QgQXNzaWduIEluc3RydW1lbnQgSWRlbnRpZmllciBUbyBDdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI0MDJcXFwiPjQwMjwvYT58Q2Fubm90IEFzc2lnbiBDdXJyZW5jeSBJZGVudGlmaWVyIFRvIE5vbiBDdXJyZW5jeXwgIHwgfCA8YSBuYW1lPVxcXCI0MDNcXFwiPjQwMzwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgQmUgRGVsZXRlZHwgIHwgfCA8YSBuYW1lPVxcXCI0MDRcXFwiPjQwNDwvYT58Q3VycmVuY3kgSW5zdHJ1bWVudCBDYW5ub3QgSGF2ZSBFY29ub21pYyBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjQwNVxcXCI+NDA1PC9hPnxDdXJyZW5jeSBJbnN0cnVtZW50IENhbm5vdCBIYXZlIExvb2t0aHJvdWdoIFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCI0MDZcXFwiPjQwNjwvYT58Q2Fubm90IENyZWF0ZSBDdXJyZW5jeSBJbnN0cnVtZW50IFdpdGggTXVsdGlwbGUgSWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNDA3XFxcIj40MDc8L2E+fFNwZWNpZmllZCBDdXJyZW5jeSBJcyBVbmRlZmluZWR8ICB8IHwgPGEgbmFtZT1cXFwiNDEwXFxcIj40MTA8L2E+fEluZGV4IERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjQxMVxcXCI+NDExPC9hPnxTb3J0IEZpZWxkIERvZXMgTm90IEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjQxM1xcXCI+NDEzPC9hPnxOZWdhdGl2ZSBQYWdpbmF0aW9uIFBhcmFtZXRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiNDE0XFxcIj40MTQ8L2E+fEludmFsaWQgU2VhcmNoIFN5bnRheHwgIHwgfCA8YSBuYW1lPVxcXCI0MTVcXFwiPjQxNTwvYT58RmlsdGVyIEV4ZWN1dGlvbiBUaW1lb3V0fCAgfCB8IDxhIG5hbWU9XFxcIjQyMFxcXCI+NDIwPC9hPnxTaWRlIERlZmluaXRpb24gSW5jb25zaXN0ZW50fCAgfCB8IDxhIG5hbWU9XFxcIjQ1MFxcXCI+NDUwPC9hPnxJbnZhbGlkIFF1b3RlIEFjY2VzcyBNZXRhZGF0YSBSdWxlfCAgfCB8IDxhIG5hbWU9XFxcIjQ1MVxcXCI+NDUxPC9hPnxBY2Nlc3MgTWV0YWRhdGEgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjQ1MlxcXCI+NDUyPC9hPnxJbnZhbGlkIEFjY2VzcyBNZXRhZGF0YSBJZGVudGlmaWVyfCAgfCB8IDxhIG5hbWU9XFxcIjQ2MFxcXCI+NDYwPC9hPnxTdGFuZGFyZCBSZXNvdXJjZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDYxXFxcIj40NjE8L2E+fFN0YW5kYXJkIFJlc291cmNlIENvbmZsaWN0fCAgfCB8IDxhIG5hbWU9XFxcIjQ2MlxcXCI+NDYyPC9hPnxDYWxlbmRhciBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDYzXFxcIj40NjM8L2E+fERhdGUgSW4gQSBDYWxlbmRhciBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNDY0XFxcIj40NjQ8L2E+fEludmFsaWQgRGF0ZSBTb3VyY2UgRGF0YXwgIHwgfCA8YSBuYW1lPVxcXCI0NjVcXFwiPjQ2NTwvYT58SW52YWxpZCBUaW1lem9uZXwgIHwgfCA8YSBuYW1lPVxcXCI2MDFcXFwiPjYwMTwvYT58UGVyc29uIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiNjAyXFxcIj42MDI8L2E+fFBlcnNvbiBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjAzXFxcIj42MDM8L2E+fENhbm5vdCBTZXQgSWRlbnRpZmllcnwgIHwgfCA8YSBuYW1lPVxcXCI2MTdcXFwiPjYxNzwvYT58SW52YWxpZCBSZWNpcGUgU3BlY2lmaWNhdGlvbiBJbiBSZXF1ZXN0fCAgfCB8IDxhIG5hbWU9XFxcIjYxOFxcXCI+NjE4PC9hPnxJbmxpbmUgUmVjaXBlIERlc2VyaWFsaXNhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjYxOVxcXCI+NjE5PC9hPnxJZGVudGlmaWVyIFR5cGVzIE5vdCBTZXQgRm9yIEVudGl0eXwgIHwgfCA8YSBuYW1lPVxcXCI2MjBcXFwiPjYyMDwvYT58Q2Fubm90IERlbGV0ZSBBbGwgQ2xpZW50IERlZmluZWQgSWRlbnRpZmllcnN8ICB8IHwgPGEgbmFtZT1cXFwiNjUwXFxcIj42NTA8L2E+fFRoZSBPcmRlciByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNjU0XFxcIj42NTQ8L2E+fFRoZSBBbGxvY2F0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI2NTVcXFwiPjY1NTwvYT58Q2Fubm90IGJ1aWxkIHRoZSBmeCBmb3J3YXJkIHRhcmdldCB3aXRoIHRoZSBnaXZlbiBob2xkaW5ncy58ICB8IHwgPGEgbmFtZT1cXFwiNjU2XFxcIj42NTY8L2E+fEdyb3VwIGRvZXMgbm90IGNvbnRhaW4gZXhwZWN0ZWQgZW50aXRpZXMufCAgfCB8IDxhIG5hbWU9XFxcIjY2NVxcXCI+NjY1PC9hPnxEZXN0aW5hdGlvbiBkaXJlY3Rvcnkgbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY2N1xcXCI+NjY3PC9hPnxSZWxhdGlvbiBkZWZpbml0aW9uIGFscmVhZHkgZXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjY3MlxcXCI+NjcyPC9hPnxDb3VsZCBub3QgcmV0cmlldmUgZmlsZSBjb250ZW50c3wgIHwgfCA8YSBuYW1lPVxcXCI2NzNcXFwiPjY3MzwvYT58TWlzc2luZyBlbnRpdGxlbWVudHMgZm9yIGVudGl0aWVzIGluIEdyb3VwfCAgfCB8IDxhIG5hbWU9XFxcIjY3NFxcXCI+Njc0PC9hPnxOZXh0IEJlc3QgQWN0aW9uIG5vdCBmb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCI2NzZcXFwiPjY3NjwvYT58UmVsYXRpb24gZGVmaW5pdGlvbiBub3QgZGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCI2NzdcXFwiPjY3NzwvYT58SW52YWxpZCBlbnRpdHkgaWRlbnRpZmllciBmb3IgcmVsYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNjgxXFxcIj42ODE8L2E+fFNvcnRpbmcgYnkgc3BlY2lmaWVkIGZpZWxkIG5vdCBzdXBwb3J0ZWR8T25lIG9yIG1vcmUgb2YgdGhlIHByb3ZpZGVkIGZpZWxkcyB0byBvcmRlciBieSB3ZXJlIGVpdGhlciBpbnZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQuIHwgfCA8YSBuYW1lPVxcXCI2ODJcXFwiPjY4MjwvYT58VG9vIG1hbnkgZmllbGRzIHRvIHNvcnQgYnl8VGhlIG51bWJlciBvZiBmaWVsZHMgdG8gc29ydCB0aGUgZGF0YSBieSBleGNlZWRzIHRoZSBudW1iZXIgYWxsb3dlZCBieSB0aGUgZW5kcG9pbnQgfCB8IDxhIG5hbWU9XFxcIjY4NFxcXCI+Njg0PC9hPnxTZXF1ZW5jZSBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjg1XFxcIj42ODU8L2E+fFNlcXVlbmNlIEFscmVhZHkgRXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjY4NlxcXCI+Njg2PC9hPnxOb24tY3ljbGluZyBzZXF1ZW5jZSBoYXMgYmVlbiBleGhhdXN0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjg3XFxcIj42ODc8L2E+fExlZ2FsIEVudGl0eSBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjY4OFxcXCI+Njg4PC9hPnxMZWdhbCBFbnRpdHkgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjY4OVxcXCI+Njg5PC9hPnxUaGUgc3VwcGxpZWQgcGFnaW5hdGlvbiB0b2tlbiBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjY5MFxcXCI+NjkwPC9hPnxQcm9wZXJ0eSBUeXBlIElzIE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkxXFxcIj42OTE8L2E+fE11bHRpcGxlIFRheC1sb3RzIEZvciBDdXJyZW5jeSBUeXBlIElzIE5vdCBTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiNjkyXFxcIj42OTI8L2E+fFRoaXMgZW5kcG9pbnQgZG9lcyBub3Qgc3VwcG9ydCBpbXBlcnNvbmF0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjY5M1xcXCI+NjkzPC9hPnxFbnRpdHkgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBSZWxhdGlvbnNoaXB8ICB8IHwgPGEgbmFtZT1cXFwiNjk0XFxcIj42OTQ8L2E+fFJlbGF0aW9uc2hpcCBWYWxpZGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNjk1XFxcIj42OTU8L2E+fFJlbGF0aW9uc2hpcCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNjk3XFxcIj42OTc8L2E+fERlcml2ZWQgUHJvcGVydHkgRm9ybXVsYSBObyBMb25nZXIgVmFsaWR8ICB8IHwgPGEgbmFtZT1cXFwiNjk4XFxcIj42OTg8L2E+fFN0b3J5IGlzIG5vdCBhdmFpbGFibGV8ICB8IHwgPGEgbmFtZT1cXFwiNzAzXFxcIj43MDM8L2E+fENvcnBvcmF0ZSBBY3Rpb24gRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNzIwXFxcIj43MjA8L2E+fFRoZSBwcm92aWRlZCBzb3J0IGFuZCBmaWx0ZXIgY29tYmluYXRpb24gaXMgbm90IHZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjcyMVxcXCI+NzIxPC9hPnxBMkIgZ2VuZXJhdGlvbiBmYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiNzIyXFxcIj43MjI8L2E+fEFnZ3JlZ2F0ZWQgUmV0dXJuIENhbGN1bGF0aW9uIEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNzIzXFxcIj43MjM8L2E+fEN1c3RvbSBFbnRpdHkgRGVmaW5pdGlvbiBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjcyNFxcXCI+NzI0PC9hPnxDdXN0b20gRW50aXR5IERlZmluaXRpb24gTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjcyNVxcXCI+NzI1PC9hPnxUaGUgUGxhY2VtZW50IHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjZcXFwiPjcyNjwvYT58VGhlIEV4ZWN1dGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI3XFxcIj43Mjc8L2E+fFRoZSBCbG9jayByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzI4XFxcIj43Mjg8L2E+fFRoZSBQYXJ0aWNpcGF0aW9uIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MjlcXFwiPjcyOTwvYT58VGhlIFBhY2thZ2UgcmVxdWVzdGVkIHdhcyBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjczMFxcXCI+NzMwPC9hPnxUaGUgT3JkZXJJbnN0cnVjdGlvbiByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzMyXFxcIj43MzI8L2E+fEN1c3RvbSBFbnRpdHkgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzNcXFwiPjczMzwvYT58Q3VzdG9tIEVudGl0eSBJZGVudGlmaWVyIGFscmVhZHkgaW4gdXNlLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzVcXFwiPjczNTwvYT58Q2FsY3VsYXRpb24gRmFpbGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzZcXFwiPjczNjwvYT58QW4gZXhwZWN0ZWQga2V5IG9uIEh0dHBSZXNwb25zZSBpcyBtaXNzaW5nLnwgIHwgfCA8YSBuYW1lPVxcXCI3MzdcXFwiPjczNzwvYT58QSByZXF1aXJlZCBmZWUgZGV0YWlsIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjczOFxcXCI+NzM4PC9hPnxaZXJvIHJvd3Mgd2VyZSByZXR1cm5lZCBmcm9tIEx1bWluZXNjZXwgIHwgfCA8YSBuYW1lPVxcXCI3MzlcXFwiPjczOTwvYT58UHJvdmlkZWQgV2Vla2VuZCBNYXNrIHdhcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjc0MlxcXCI+NzQyPC9hPnxDdXN0b20gRW50aXR5IGZpZWxkcyBkbyBub3QgbWF0Y2ggdGhlIGRlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiNzQ2XFxcIj43NDY8L2E+fFRoZSBwcm92aWRlZCBzZXF1ZW5jZSBpcyBub3QgdmFsaWQufCAgfCB8IDxhIG5hbWU9XFxcIjc1MVxcXCI+NzUxPC9hPnxUaGUgdHlwZSBvZiB0aGUgQ3VzdG9tIEVudGl0eSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgdHlwZSBwcm92aWRlZCBpbiB0aGUgZGVmaW5pdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiNzUyXFxcIj43NTI8L2E+fEx1bWluZXNjZSBwcm9jZXNzIHJldHVybmVkIGFuIGVycm9yLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTNcXFwiPjc1MzwvYT58RmlsZSBuYW1lIG9yIGNvbnRlbnQgaW5jb21wYXRpYmxlIHdpdGggb3BlcmF0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTVcXFwiPjc1NTwvYT58U2NoZW1hIG9mIHJlc3BvbnNlIGZyb20gRHJpdmUgaXMgbm90IGFzIGV4cGVjdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI3NTdcXFwiPjc1NzwvYT58U2NoZW1hIG9mIHJlc3BvbnNlIGZyb20gTHVtaW5lc2NlIGlzIG5vdCBhcyBleHBlY3RlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzU4XFxcIj43NTg8L2E+fEx1bWluZXNjZSB0aW1lZCBvdXQufCAgfCB8IDxhIG5hbWU9XFxcIjc2M1xcXCI+NzYzPC9hPnxJbnZhbGlkIEx1c2lkIEVudGl0eSBJZGVudGlmaWVyIFVuaXR8ICB8IHwgPGEgbmFtZT1cXFwiNzY4XFxcIj43Njg8L2E+fEZlZSBydWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzY5XFxcIj43Njk8L2E+fENhbm5vdCB1cGRhdGUgdGhlIGJhc2UgY3VycmVuY3kgb2YgYSBwb3J0Zm9saW8gd2l0aCB0cmFuc2FjdGlvbnMgbG9hZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjc3MVxcXCI+NzcxPC9hPnxUcmFuc2FjdGlvbiBjb25maWd1cmF0aW9uIHNvdXJjZSBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiNzc0XFxcIj43NzQ8L2E+fENvbXBsaWFuY2UgcnVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjc3NVxcXCI+Nzc1PC9hPnxGdW5kIGFjY291bnRpbmcgZG9jdW1lbnQgY2Fubm90IGJlIHByb2Nlc3NlZC58ICB8IHwgPGEgbmFtZT1cXFwiNzc4XFxcIj43Nzg8L2E+fFVuYWJsZSB0byBsb29rIHVwIEZYIHJhdGUgZnJvbSB0cmFkZSBjY3kgdG8gcG9ydGZvbGlvIGNjeSBmb3Igc29tZSBvZiB0aGUgdHJhZGVzLnwgIHwgfCA8YSBuYW1lPVxcXCI3ODJcXFwiPjc4MjwvYT58VGhlIFByb3BlcnR5IGRlZmluaXRpb24gZGF0YVR5cGUgaXMgbm90IG1hdGNoaW5nIHRoZSBkZXJpdmF0aW9uIGZvcm11bGEgZGF0YVR5cGV8ICB8IHwgPGEgbmFtZT1cXFwiNzgzXFxcIj43ODM8L2E+fFRoZSBQcm9wZXJ0eSBkZWZpbml0aW9uIGRvbWFpbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZXJpdmVkIHByb3BlcnRpZXN8ICB8IHwgPGEgbmFtZT1cXFwiNzg4XFxcIj43ODg8L2E+fENvbXBsaWFuY2UgcnVuIG5vdCBmb3VuZCBmYWlsdXJlLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTBcXFwiPjc5MDwvYT58Q3VzdG9tIEVudGl0eSBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGlkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjc5MVxcXCI+NzkxPC9hPnxDdXN0b20gRW50aXR5IGRlZmluaXRpb24gYWxyZWFkeSBleGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiNzkyXFxcIj43OTI8L2E+fENvbXBsaWFuY2UgUHJvcGVydHlLZXkgaXMgbWlzc2luZy58ICB8IHwgPGEgbmFtZT1cXFwiNzkzXFxcIj43OTM8L2E+fENvbXBsaWFuY2UgQ3JpdGVyaWEgVmFsdWUgZm9yIG1hdGNoaW5nIGlzIG1pc3NpbmcufCAgfCB8IDxhIG5hbWU9XFxcIjc5NVxcXCI+Nzk1PC9hPnxDYW5ub3QgZGVsZXRlIGlkZW50aWZpZXIgZGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI3OTZcXFwiPjc5NjwvYT58VGF4IHJ1bGUgc2V0IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiNzk3XFxcIj43OTc8L2E+fEEgdGF4IHJ1bGUgc2V0IHdpdGggdGhpcyBpZCBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiNzk4XFxcIj43OTg8L2E+fE11bHRpcGxlIHJ1bGUgc2V0cyBmb3IgdGhlIHNhbWUgcHJvcGVydHkga2V5IGFyZSBhcHBsaWNhYmxlLnwgIHwgfCA8YSBuYW1lPVxcXCI3OTlcXFwiPjc5OTwvYT58VGhlIHJlcXVlc3QgbXVzdCBjb250YWluIGEgZGF0ZSBvciBkaWFyeSBlbnRyeS58ICB8IHwgPGEgbmFtZT1cXFwiODAwXFxcIj44MDA8L2E+fENhbiBub3QgdXBzZXJ0IGFuIGluc3RydW1lbnQgZXZlbnQgb2YgdGhpcyB0eXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDFcXFwiPjgwMTwvYT58VGhlIGluc3RydW1lbnQgZXZlbnQgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwMlxcXCI+ODAyPC9hPnxUaGUgSW5zdHJ1bWVudCBldmVudCBpcyBtaXNzaW5nIHNhbGllbnQgaW5mb3JtYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjgwM1xcXCI+ODAzPC9hPnxUaGUgSW5zdHJ1bWVudCBldmVudCBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDRcXFwiPjgwNDwvYT58U29tZSBkYXRhIHJlcXVlc3RlZCBkb2VzIG5vdCBmb2xsb3cgdGhlIG9yZGVyIGdyYXBoIGFzc3VtcHRpb25zLnwgIHwgfCA8YSBuYW1lPVxcXCI4MDVcXFwiPjgwNTwvYT58VGhlIGluc3RydW1lbnQgZXZlbnQgdHlwZSBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiODA2XFxcIj44MDY8L2E+fFRoZSB0cmFuc2FjdGlvbiB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MDdcXFwiPjgwNzwvYT58VGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgwOFxcXCI+ODA4PC9hPnxUaGUgdHJhbnNhY3Rpb24gdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgxMVxcXCI+ODExPC9hPnxBIHByaWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgYW4gb3JkZXIufCAgfCB8IDxhIG5hbWU9XFxcIjgxMlxcXCI+ODEyPC9hPnxBIHByaWNlIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgYW4gYWxsb2NhdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODEzXFxcIj44MTM8L2E+fENoYXJ0IG9mIEFjY291bnRzIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODE0XFxcIj44MTQ8L2E+fEFjY291bnQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTVcXFwiPjgxNTwvYT58QWJvciBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjgxNlxcXCI+ODE2PC9hPnxBYm9yIENvbmZpZ3VyYXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MTdcXFwiPjgxNzwvYT58UmVjb25jaWxpYXRpb24gbWFwcGluZyBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODE4XFxcIj44MTg8L2E+fEF0dHJpYnV0ZSB0eXBlIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4MTlcXFwiPjgxOTwvYT58UmVjb25jaWxpYXRpb24gbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjBcXFwiPjgyMDwvYT58Q3VzdG9kaWFuIEFjY291bnQgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MjFcXFwiPjgyMTwvYT58QWxsb2NhdGlvbiBGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjgyMlxcXCI+ODIyPC9hPnxSZWNvbmNpbGlhdGlvbiBydW4gbm90IGZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjgyM1xcXCI+ODIzPC9hPnxSZWNvbmNpbGlhdGlvbiBicmVhayBub3QgZm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiODI0XFxcIj44MjQ8L2E+fEVudGl0eSBsaW5rIHR5cGUgY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBkb2VzblxcJ3QgZXhpc3QufCAgfCB8IDxhIG5hbWU9XFxcIjgyOFxcXCI+ODI4PC9hPnxBZGRyZXNzIGtleSBkZWZpbml0aW9uIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODI5XFxcIj44Mjk8L2E+fENvbXBsaWFuY2UgdGVtcGxhdGUgbm90IGZvdW5kLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzBcXFwiPjgzMDwvYT58QWN0aW9uIG5vdCBzdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiODMxXFxcIj44MzE8L2E+fFJlZmVyZW5jZSBsaXN0IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMyXFxcIj44MzI8L2E+fFBvc3RpbmcgTW9kdWxlIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODMzXFxcIj44MzM8L2E+fFRoZSB0eXBlIG9mIHBhcmFtZXRlciBwcm92aWRlZCBkaWQgbm90IG1hdGNoIHRoYXQgcmVxdWlyZWQgYnkgdGhlIGNvbXBsaWFuY2UgcnVsZS58ICB8IHwgPGEgbmFtZT1cXFwiODM0XFxcIj44MzQ8L2E+fFRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IGEgcnVsZSBkaWQgbm90IG1hdGNoIHRob3NlIHJlcXVpcmVkIGJ5IGl0cyB0ZW1wbGF0ZS58ICB8IHwgPGEgbmFtZT1cXFwiODM1XFxcIj44MzU8L2E+fFRoZSBlbnRpdHkgaGFzIGEgcHJvcGVydHkgaW4gYSBkb21haW4gdGhhdCBpcyBub3Qgc3VwcHJ0ZWQgZm9yIHRoYXQgZW50aXR5IHR5cGUufCAgfCB8IDxhIG5hbWU9XFxcIjgzNlxcXCI+ODM2PC9hPnxTdHJ1Y3R1cmVkIHJlc3VsdCBkYXRhIG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODM3XFxcIj44Mzc8L2E+fERpYXJ5IGVudHJ5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODM4XFxcIj44Mzg8L2E+fERpYXJ5IGVudHJ5IGNvdWxkIG5vdCBiZSBjcmVhdGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI4MzlcXFwiPjgzOTwvYT58RGlhcnkgZW50cnkgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjg2MVxcXCI+ODYxPC9hPnxDb21wbGlhbmNlIHJ1biBzdW1tYXJ5IG5vdCBmb3VuZC58ICB8IHwgPGEgbmFtZT1cXFwiODY5XFxcIj44Njk8L2E+fENvbmZsaWN0aW5nIGluc3RydW1lbnQgcHJvcGVydGllcyBpbiBiYXRjaC58ICB8IHwgPGEgbmFtZT1cXFwiODcwXFxcIj44NzA8L2E+fENvbXBsaWFuY2UgcnVuIHN1bW1hcnkgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjg3MVxcXCI+ODcxPC9hPnxUaGUgc3BlY2lmaWVkIGltcGVyc29uYXRlZCB1c2VyIGRvZXMgbm90IGV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjg3NFxcXCI+ODc0PC9hPnxQcm92aWRlZCBQcm9wZXJ0eSBEb21haW4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZW50aXR5IGZpbHRlci58ICB8IHwgPGEgbmFtZT1cXFwiODc1XFxcIj44NzU8L2E+fENhbm5vdCBEZWxldGUgU3lzdGVtIFJlZmVyZW5jZSBMaXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI4NzZcXFwiPjg3NjwvYT58Q2xlYXJkb3duIE1vZHVsZSBub3QgZm91bmQufCAgfCB8IDxhIG5hbWU9XFxcIjg3OVxcXCI+ODc5PC9hPnxQb3J0Zm9saW9zIGRvIG5vdCBoYXZlIHRoZSBzYW1lIGJhc2UgY3VycmVuY3l8ICB8IHwgPGEgbmFtZT1cXFwiODgwXFxcIj44ODA8L2E+fFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29tcGxpYW5jZSBleHByZXNzaW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODFcXFwiPjg4MTwvYT58QmxvY2sgb3ZlcnBsYWNlZC58ICB8IHwgPGEgbmFtZT1cXFwiODgyXFxcIj44ODI8L2E+fE9yZGVyIG5vdCBhcHByb3ZlZC58ICB8IHwgPGEgbmFtZT1cXFwiODgzXFxcIj44ODM8L2E+fENhbm5vdCB1cGRhdGUgdGhlIHNoYXJlZCBmaWVsZHMgb2YgYSBibG9jayB3aXRoIGFzc29jaWF0ZWQgb3JkZXJzLnwgIHwgfCA8YSBuYW1lPVxcXCI4ODZcXFwiPjg4NjwvYT58Q2Fubm90IGxvY2sgdGhlIHBlcmlvZC58ICB8IHwgPGEgbmFtZT1cXFwiODg3XFxcIj44ODc8L2E+fENhbm5vdCBhcHBseSBjbGVhciBkb3duIG1vZHVsZS58ICB8IHwgPGEgbmFtZT1cXFwiODg4XFxcIj44ODg8L2E+fENhbm5vdCB1cHNlcnQgSW5zdHJ1bWVudCBFdmVudCBJbnN0cnVjdGlvbi58ICB8IHwgPGEgbmFtZT1cXFwiODg5XFxcIj44ODk8L2E+fENhbm5vdCByZWFkIEluc3RydW1lbnQgRXZlbnQgSW5zdHJ1Y3Rpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjg5NVxcXCI+ODk1PC9hPnxUaGUgQ2FwaXRhbCBSYXRpbyBDYWxjdWxhdGlvbiBJcyBXcm9uZy58ICB8IHwgPGEgbmFtZT1cXFwiOTEwXFxcIj45MTA8L2E+fENhbm5vdCB1cGRhdGUgYSBibG9jayByZWZlcmVuY2VkIGJ5IGEgcGxhY2VtZW50LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTFcXFwiPjkxMTwvYT58QSBGdW5kIHRoYXQgcmVmZXJlbmNlcyB0aGlzIEFib3IgYWxyZWFkeSBleGlzdHMufCAgfCB8IDxhIG5hbWU9XFxcIjkxMlxcXCI+OTEyPC9hPnxDYW5ub3QgYWRkIGRlY2lzaW9uIHRvIFN0YWdlZCBNb2RpZmljYXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkxM1xcXCI+OTEzPC9hPnxUaGUgU3RhZ2VkIE1vZGlmaWNhdGlvbiBjb3VsZCBub3QgYmUgYXBwbGllZC58ICB8IHwgPGEgbmFtZT1cXFwiOTE0XFxcIj45MTQ8L2E+fEFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkxNVxcXCI+OTE1PC9hPnxDYW5ub3QgdXBzZXJ0IG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIHByb3BlcnR5IGluIG9uZSByZXF1ZXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTZcXFwiPjkxNjwvYT58UGxhY2VtZW50IGFuZCBkaXJlY3QgZGVzY2VuZGVudHMgaGF2ZSBtb3JlIGV4ZWN1dGVkIHF1YW50aXR5IHRoYW4gdG90YWwgcGxhY2VtZW50IHF1YW50aXR5LnwgIHwgfCA8YSBuYW1lPVxcXCI5MTdcXFwiPjkxNzwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgRW50cnlUeXBlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MThcXFwiPjkxODwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCBpbiB0aGlzIFN0YXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5MTlcXFwiPjkxOTwvYT58UGxhY2VtZW50IGNvdWxkIG5vdCBiZSBjYW5jZWxsZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkyMFxcXCI+OTIwPC9hPnxTaGFyZSBDbGFzcyBub3QgY29uZmlndXJlZCBpbiBGdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjkyMVxcXCI+OTIxPC9hPnxTaGFyZSBDbGFzcyBTdWIgSG9sZGluZyBLZXkgbm90IGNvbmZpZ3VyZWQgaW4gUG9ydGZvbGlvfCAgfCB8IDxhIG5hbWU9XFxcIjkyMlxcXCI+OTIyPC9hPnxDb3VsZCBub3QgdXBkYXRlIGFuIG9yZGVyLnwgIHwgfCA8YSBuYW1lPVxcXCI5MjNcXFwiPjkyMzwvYT58TXVsdGlwbGUgc2V0cyBvZiBTaGFyZSBDbGFzcyBTdWIgSG9sZGluZyBLZXlzIGNvbmZpZ3VyZWQgYWNyb3NzIHRoZSBQb3J0Zm9saW9zIG9mIGEgRnVuZC58ICB8IHwgPGEgbmFtZT1cXFwiOTI0XFxcIj45MjQ8L2E+fE9uZSBvciBtb3JlIG1hdHJpeCBjZWxscyBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIG1hdHJpeC58ICB8IHwgPGEgbmFtZT1cXFwiOTI1XFxcIj45MjU8L2E+fFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgcHJvdmlkZWQgbWF0cml4IGRlZmluaXRpb24ufCAgfCB8IDxhIG5hbWU9XFxcIjkyNlxcXCI+OTI2PC9hPnxNYXRyaXggZGVmaW5pdGlvbiBkb2VzIG5vdCBleGlzdC58ICB8IHwgPGEgbmFtZT1cXFwiOTI3XFxcIj45Mjc8L2E+fE1hdHJpeCBkZWZpbml0aW9uIGNvdWxkIG5vdCBiZSBkZWxldGVkIGJlY2F1c2UgaXQgZG9lc25cXCd0IGV4aXN0LnwgIHwgfCA8YSBuYW1lPVxcXCI5MjhcXFwiPjkyODwvYT58RGF0YVR5cGUgd2l0aCBJZCBhbHJlYWR5IGV4aXN0cy58ICB8IHwgPGEgbmFtZT1cXFwiOTI5XFxcIj45Mjk8L2E+fFNxdWFyZSBtYXRyaXggaXMgaW5jb21wbGV0ZS58ICB8IHwgPGEgbmFtZT1cXFwiOTMwXFxcIj45MzA8L2E+fEEgY29uZGl0aW9uYWwgbGljZW5zZSB0ZXJtIGhhcyBiZWVuIGV4Y2VlZGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzFcXFwiPjkzMTwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIHJlcXVlc3RlZCBpcyBub3QgaW50ZW5kZWQgZm9yIHRoZSBlbnRpdHkgcHJvdmlkZWQufCAgfCB8IDxhIG5hbWU9XFxcIjkzMlxcXCI+OTMyPC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGRvZXMgbm90IGhhdmUgYSBtYW5kYXRvcnkgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTMzXFxcIj45MzM8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgaGFzIGEgcHJvcGVydHkgbm90IGFsbG93ZWQgYnkgdGhlIHNwZWNpZmllZCBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTM0XFxcIj45MzQ8L2E+fFRoZSBlbnRpdHkgcHJvdmlkZWQgZG9lcyBub3QgaGF2ZSBhIG1hbmRhdG9yeSBpZGVudGlmaWVyIHNwZWNpZmllZCBieSB0aGUgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNVxcXCI+OTM1PC9hPnxUaGUgZW50aXR5IHByb3ZpZGVkIGhhcyBhbiBpZGVudGlmaWVyIG5vdCBhbGxvd2VkIGJ5IHRoZSBzcGVjaWZpZWQgQ3VzdG9tIERhdGEgTW9kZWwufCAgfCB8IDxhIG5hbWU9XFxcIjkzNlxcXCI+OTM2PC9hPnxUaGUgQ3VzdG9tIERhdGEgTW9kZWwgaW5jbHVkZWQgYW4gYWxpYXMgb3Igc29ydC1ieSBhdHRyaWJ1dGUgdGhhdCB3YXMgbm90IG9uIHRoZSBkZWZpbml0aW9uLnwgIHwgfCA8YSBuYW1lPVxcXCI5MzdcXFwiPjkzNzwvYT58VGhlIENsb3NlZFBlcmlvZCB3aXRoIHRoZSBJZCBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTM4XFxcIj45Mzg8L2E+fFRoZSBuZXcgQ2xvc2VkIFBlcmlvZCB3b3VsZCBjYXVzZSB0aGUgVGltZWxpbmUgdG8gaGF2ZSBub24tY29udGlndW91cyBDbG9zZWQgUGVyaW9kc3wgIHwgfCA8YSBuYW1lPVxcXCI5MzlcXFwiPjkzOTwvYT58QmxvY2tlZCBieSBhIE5ldHdvcmsgWm9uZXwgIHwgfCA8YSBuYW1lPVxcXCI5NDBcXFwiPjk0MDwvYT58VGhlIGVudGl0eSBwcm92aWRlZCBkb2VzIG5vdCBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBDdXN0b20gRGF0YSBNb2RlbC58ICB8IHwgPGEgbmFtZT1cXFwiOTQxXFxcIj45NDE8L2E+fE9yZGVyIG5vdCBjb21wbGlhbnQufCAgfCB8IDxhIG5hbWU9XFxcIjk0MlxcXCI+OTQyPC9hPnxBY3Rpb24gd291bGQgY3JlYXRlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ0XFxcIj45NDQ8L2E+fERlcml2ZWQgUHJvcGVydHkgY2FsY3VsYXRpb24gbm90IGNvbXBsZXRlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDVcXFwiPjk0NTwvYT58RGVyaXZlZCBQcm9wZXJ0eSBpcyBub3QgZmlsdGVyYWJsZS58ICB8IHwgPGEgbmFtZT1cXFwiOTQ2XFxcIj45NDY8L2E+fFRoZSBjb25kaXRpb25zIHByb3ZpZGVkIGhhdmUgb25lIG9yIG1vcmUgZXJyb3JzLnwgIHwgfCA8YSBuYW1lPVxcXCI5NDdcXFwiPjk0NzwvYT58VGhlIHByb3BlcnR5L2lkZW50aWZpZXIgZG9tYWluIGFuZCBlbnRpdHkgZG9tYWluIGRvIG5vdCBtYXRjaC58ICB8IHwgPGEgbmFtZT1cXFwiOTQ4XFxcIj45NDg8L2E+fEludmFsaWQgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTQ5XFxcIj45NDk8L2E+fEZpbHRlcmFibGUgRGVyaXZlZCBQcm9wZXJ0eSBsaW1pdCByZWFjaGVkLnwgIHwgfCA8YSBuYW1lPVxcXCI5NTBcXFwiPjk1MDwvYT58SW52ZXN0b3IgUmVjb3JkIElkZW50aWZpZXIgQWxyZWFkeSBJbiBVc2V8ICB8IHwgPGEgbmFtZT1cXFwiOTUxXFxcIj45NTE8L2E+fEludmVzdG9yIFJlY29yZCBOb3QgRm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiOTUyXFxcIj45NTI8L2E+fEludmVzdG1lbnQgQWNjb3VudCBJZGVudGlmaWVyIEFscmVhZHkgSW4gVXNlfCAgfCB8IDxhIG5hbWU9XFxcIjk1M1xcXCI+OTUzPC9hPnxJbnZlc3RtZW50IEFjY291bnQgTm90IEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjk1NFxcXCI+OTU0PC9hPnxDb3VsZCBOb3QgU3dlZXAgQmxvY2t8ICB8IHwgPGEgbmFtZT1cXFwiOTU1XFxcIj45NTU8L2E+fEVudGl0eSBVbmlxdWUgSWQgaGFzIHRoZSB3cm9uZyBmb3JtYXR8ICB8IHwgPGEgbmFtZT1cXFwiOTU2XFxcIj45NTY8L2E+fFBvc3QgQ2xvc2UgQWN0aXZpdHkgaXMgaW52YWxpZHwgIHwgfCA8YSBuYW1lPVxcXCI5NTdcXFwiPjk1NzwvYT58VGhlIENsb3NlZFBlcmlvZCB3aXRoIHRoZSBJZCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgVGltZWxpbmV8ICB8IHwgPGEgbmFtZT1cXFwiOTU4XFxcIj45NTg8L2E+fEludmFsaWQgU2V0dGxlbWVudCBJbnN0cnVjdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiOTU5XFxcIj45NTk8L2E+fE9yZGVyIHJlcXVpcmVzIHF1YW50aXR5LnwgIHwgfCA8YSBuYW1lPVxcXCI5NjBcXFwiPjk2MDwvYT58SW52YWxpZCBEYXRhUG9pbnQgVmFsdWUgQXNzaWdubWVudHwgIHwgfCA8YSBuYW1lPVxcXCI5NjFcXFwiPjk2MTwvYT58SW52YWxpZCBSZWxhdGlvbmFsIERhdGFzZXQgRmllbGQgRGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCI5NjJcXFwiPjk2MjwvYT58UmVsYXRpb25hbCBEYXRhc2V0IERlZmluaXRpb24gRG9lcyBOb3QgRXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiOTYzXFxcIj45NjM8L2E+fFRpbWVsaW5lIEJvb2ttYXJrIE5vdCBJbiBPcGVuIFBlcmlvZHwgIHwgfCA8YSBuYW1lPVxcXCI5NjRcXFwiPjk2NDwvYT58VGhlIEN1c3RvbSBEYXRhIE1vZGVsIHNwZWNpZmllZCBpZGVudGlmaWVycyBidXQgdGhlIGVudGl0eSBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aWZpZXJzfCAgfCB8IDxhIG5hbWU9XFxcIjk2NVxcXCI+OTY1PC9hPnxUaGUgc29ydCBieSBwcm92aWRlZCBoYXMgb25lIG9yIG1vcmUgZXJyb3JzfCAgfCB8IDxhIG5hbWU9XFxcIjk2NlxcXCI+OTY2PC9hPnxJbnZhbGlkIEN1c3RvbSBEYXRhIE1vZGVsIERlZmluaXRpb258ICB8IHwgPGEgbmFtZT1cXFwiOTY3XFxcIj45Njc8L2E+fFJ1bGUgc2V0IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBDaGVjayBEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjk2OFxcXCI+OTY4PC9hPnxUaGUgQ2xvc2VkIFBlcmlvZCBpcyBpbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjk2OVxcXCI+OTY5PC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhpcyBTdG9wIFByaWNlLnwgIHwgfCA8YSBuYW1lPVxcXCI5NzBcXFwiPjk3MDwvYT58Q2Fubm90IHVwZGF0ZSBhIHBsYWNlbWVudCB3aXRoIHRoaXMgTGltaXQgUHJpY2UufCAgfCB8IDxhIG5hbWU9XFxcIjk3MVxcXCI+OTcxPC9hPnxDYW5ub3QgdXBkYXRlIGEgcGxhY2VtZW50IHdpdGggdGhlIGN1cnJlbnQgVHlwZS58ICB8IHwgPGEgbmFtZT1cXFwiOTc0XFxcIj45NzQ8L2E+fENhbm5vdCBQbGFjZUJsb2NrcyBhZ2FpbnN0IGFuIFxcJ1Vuc29saWNpdGVkXFwnIEJsb2NrIChibG9jayBjb250YWluaW5nIDAgT3JkZXJzKS58ICB8IHwgPGEgbmFtZT1cXFwiOTc1XFxcIj45NzU8L2E+fE5vIFBvcnRmb2xpbyBHcm91cCBTZWxlY3RlZHwgIHwgfCA8YSBuYW1lPVxcXCI5NzZcXFwiPjk3NjwvYT58QW1iaWd1b3VzIFNjb3BlfCAgfCBcbiAqXG4gKiBDb250YWN0OiBpbmZvQGZpbmJvdXJuZS5jb21cbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsXG4gICAgICAgICBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwQ29udGV4dCBcbiAgICAgICAgfSAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vZW5jb2Rlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEFsbG9jYXRpb25FdmVudCB9IGZyb20gJy4uL21vZGVsL2FsbG9jYXRpb25FdmVudCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBBbGxvY2F0aW9uRXZlbnRCb29rUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2FsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWwvYWxsb2NhdGlvbkV2ZW50UmVhbGxvY2F0ZVJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQWxsb2NhdGlvbkV2ZW50UmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2FsbG9jYXRpb25FdmVudFJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRGVsZXRlZEVudGl0eVJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvZGVsZXRlZEVudGl0eVJlc3BvbnNlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkUHJvYmxlbURldGFpbHMgfSBmcm9tICcuLi9tb2RlbC9sdXNpZFByb2JsZW1EZXRhaWxzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEx1c2lkVmFsaWRhdGlvblByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vbW9kZWwvbHVzaWRWYWxpZGF0aW9uUHJvYmxlbURldGFpbHMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnZWRSZXNvdXJjZUxpc3RPZkFsbG9jYXRpb25FdmVudCB9IGZyb20gJy4uL21vZGVsL3BhZ2VkUmVzb3VyY2VMaXN0T2ZBbGxvY2F0aW9uRXZlbnQnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vdmFyaWFibGVzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiBUb2dldGhlciB3aXRoIHRoZSBzY29wZSB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgY29kZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgYm9va2luZyByZWZlcmVuY2UgdG8gZnJlZXplIHRoZSBldmVudCB1bmRlci4gKi9cbiAgICBhbGxvY2F0aW9uRXZlbnRCb29rUmVxdWVzdDogQWxsb2NhdGlvbkV2ZW50Qm9va1JlcXVlc3Q7XG4gICAgLyoqIFRoZSBlZmZlY3RpdmUgZGF0ZXRpbWUgb3IgY3V0IGxhYmVsIGZyb20gd2hpY2ggdGhlIGJvb2tpbmcgYXBwbGllcy4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgTFVTSUQgc3lzdGVtIGRhdGV0aW1lIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgZWZmZWN0aXZlQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFRoZSBzY29wZSBvZiB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBzY29wZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0OiBBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBlZmZlY3RpdmUgZGF0ZXRpbWUgb3IgY3V0IGxhYmVsIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBMVVNJRCBzeXN0ZW0gZGF0ZXRpbWUgaWYgbm90IHNwZWNpZmllZC4gKi9cbiAgICBlZmZlY3RpdmVBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVGhlIHNjb3BlIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiAqL1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2RlIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiBUb2dldGhlciB3aXRoIHRoZSBzY29wZSB0aGlzIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgY29kZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgZWZmZWN0aXZlIGRhdGV0aW1lIG9yIGN1dCBsYWJlbCBhdCB3aGljaCB0byByZXRyaWV2ZSB0aGUgQWxsb2NhdGlvbiBFdmVudC4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgTFVTSUQgc3lzdGVtIGRhdGV0aW1lIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgZWZmZWN0aXZlQXQ/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIHJldHJpZXZlIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiBEZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgYXNBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0QWxsb2NhdGlvbkV2ZW50c1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgZWZmZWN0aXZlIGRhdGV0aW1lIG9yIGN1dCBsYWJlbCBhdCB3aGljaCB0byBsaXN0IHRoZSBBbGxvY2F0aW9uIEV2ZW50cy4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgTFVTSUQgc3lzdGVtIGRhdGV0aW1lIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgZWZmZWN0aXZlQXQ/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhc0F0IGRhdGV0aW1lIGF0IHdoaWNoIHRvIGxpc3QgdGhlIEFsbG9jYXRpb24gRXZlbnRzLiBEZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggQWxsb2NhdGlvbiBFdmVudCBpZiBub3Qgc3BlY2lmaWVkLiAqL1xuICAgIGFzQXQ/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYWdpbmF0aW9uIHRva2VuIHRvIHVzZSB0byBjb250aW51ZSBsaXN0aW5nIEFsbG9jYXRpb24gRXZlbnRzOyB0aGlzIHZhbHVlIGlzIHJldHVybmVkIGZyb20gdGhlIHByZXZpb3VzIGNhbGwuICAgICAgICAgICAgICBJZiBhIHBhZ2luYXRpb24gdG9rZW4gaXMgcHJvdmlkZWQsIHRoZSBmaWx0ZXIsIGVmZmVjdGl2ZUF0IGFuZCBhc0F0IGZpZWxkcyBtdXN0IG5vdCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIG9yaWdpbmFsIHJlcXVlc3QuICovXG4gICAgcGFnZT86IHN0cmluZztcbiAgICAvKiogV2hlbiBwYWdpbmF0aW5nLCBsaW1pdCB0aGUgcmVzdWx0cyB0byB0aGlzIG51bWJlci4gRGVmYXVsdHMgdG8gMTAwIGlmIG5vdCBzcGVjaWZpZWQuICovXG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgLyoqIEV4cHJlc3Npb24gdG8gZmlsdGVyIHRoZSByZXN1bHRzLiBGb3IgZXhhbXBsZSwgdG8gZmlsdGVyIG9uIHRoZSBBbGxvY2F0aW9uIEV2ZW50IHN0YXR1cywgc3BlY2lmeSBcXCZxdW90O3N0YXR1cyBlcSBcXCYjMzk7Qm9va2VkXFwmIzM5O1xcJnF1b3Q7LiAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZmlsdGVyaW5nIExVU0lEIHJlc3VsdHMsIHNlZSBodHRwczovL3N1cHBvcnQubHVzaWQuY29tL2tub3dsZWRnZWJhc2UvYXJ0aWNsZS9LQS0wMTkxNC4gKi9cbiAgICBmaWx0ZXI/OiBzdHJpbmc7XG4gICAgLyoqIEEgbGlzdCBvZiBmaWVsZCBuYW1lcyBvciBwcm9wZXJ0aWVzIHRvIHNvcnQgYnksIGVhY2ggc3VmZml4ZWQgYnkgXFwmcXVvdDsgQVNDXFwmcXVvdDsgb3IgXFwmcXVvdDsgREVTQ1xcJnF1b3Q7LiAqL1xuICAgIHNvcnRCeT86IEFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSByZWFzb24gZm9yIHRoZSByZWFsbG9jYXRpb24gYW5kIGFueSBiYXNpcyB2YWx1ZXMgdG8gdXNlLiAqL1xuICAgIGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0OiBBbGxvY2F0aW9uRXZlbnRSZWFsbG9jYXRlUmVxdWVzdDtcbiAgICAvKiogVGhlIGVmZmVjdGl2ZSBkYXRldGltZSBvciBjdXQgbGFiZWwgZnJvbSB3aGljaCB0aGUgcmVhbGxvY2F0aW9uIGFwcGxpZXMuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IExVU0lEIHN5c3RlbSBkYXRldGltZSBpZiBub3Qgc3BlY2lmaWVkLiAqL1xuICAgIGVmZmVjdGl2ZUF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwc2VydEFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBUaGUgc2NvcGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuICovXG4gICAgc2NvcGU6IHN0cmluZztcbiAgICAvKiogVGhlIGNvZGUgb2YgdGhlIEFsbG9jYXRpb24gRXZlbnQuIFRvZ2V0aGVyIHdpdGggdGhlIHNjb3BlIHRoaXMgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgQWxsb2NhdGlvbiBFdmVudC4gKi9cbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBBbGxvY2F0aW9uIEV2ZW50LiAqL1xuICAgIGFsbG9jYXRpb25FdmVudFJlcXVlc3Q6IEFsbG9jYXRpb25FdmVudFJlcXVlc3Q7XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWxsb2NhdGlvbkV2ZW50c1NlcnZpY2Uge1xuXG4gICAgcHJvdGVjdGVkIGJhc2VQYXRoID0gJ2h0dHBzOi8vd3d3Lmx1c2lkLmNvbS9hcGknO1xuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgICBwdWJsaWMgZW5jb2RlcjogSHR0cFBhcmFtZXRlckNvZGVjO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpQEluamVjdChCQVNFX1BBVEgpIGJhc2VQYXRoOiBzdHJpbmd8c3RyaW5nW10sIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEJhc2VQYXRoID0gQXJyYXkuaXNBcnJheShiYXNlUGF0aCkgPyBiYXNlUGF0aFswXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaXJzdEJhc2VQYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gZmlyc3RCYXNlUGF0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gICAgfVxuXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXMoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU6IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZT86IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaCggZWxlbSA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBEYXRlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goIGsgPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zLCB2YWx1ZVtrXSwga2V5ICE9IG51bGwgPyBgJHtrZXl9LiR7a31gIDogaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgbm90IG9iamVjdCBvciBhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBCb29rQWxsb2NhdGlvbkV2ZW50OiBCb29rIGFuIEFsbG9jYXRpb24gRXZlbnQuXG4gICAgICogRnJlZXplIGEgY29tcHV0ZWQgQWxsb2NhdGlvbiBFdmVudCB1bmRlciBhIGJvb2tpbmcgcmVmZXJlbmNlLCBmcm9tIGFuIGVmZmVjdGl2ZSBkYXRldGltZS4gT25jZSBib29rZWQgdGhlICBldmVudCBjYW4gbm8gbG9uZ2VyIGJlIHJlcGxhY2VkIG9yIHJlYWxsb2NhdGVkLiBCb29raW5nIGFnYWluIHVuZGVyIHRoZSBzYW1lIHJlZmVyZW5jZSByZXR1cm5zIHRoZSBldmVudCAgdW5jaGFuZ2VkOyBib29raW5nIHVuZGVyIGEgZGlmZmVyZW50IHJlZmVyZW5jZSBpcyByZWZ1c2VkLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBib29rQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogQm9va0FsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxBbGxvY2F0aW9uRXZlbnQ+O1xuICAgIHB1YmxpYyBib29rQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogQm9va0FsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyBib29rQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogQm9va0FsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgYm9va0FsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IEJvb2tBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBib29rQWxsb2NhdGlvbkV2ZW50LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYm9va0FsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxvY2F0aW9uRXZlbnRCb29rUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hbGxvY2F0aW9uRXZlbnRCb29rUmVxdWVzdDtcbiAgICAgICAgaWYgKGFsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0ID09PSBudWxsIHx8IGFsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgYm9va0FsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlZmZlY3RpdmVBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5lZmZlY3RpdmVBdDtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChlZmZlY3RpdmVBdCAhPT0gdW5kZWZpbmVkICYmIGVmZmVjdGl2ZUF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZWZmZWN0aXZlQXQsICdlZmZlY3RpdmVBdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2FsbG9jYXRpb25ldmVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS9ib29rYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFsbG9jYXRpb25FdmVudD4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGFsbG9jYXRpb25FdmVudEJvb2tSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBDcmVhdGVBbGxvY2F0aW9uRXZlbnQ6IENyZWF0ZSBhbiBBbGxvY2F0aW9uIEV2ZW50LlxuICAgICAqIFJhaXNlIGEgbmV3IEFsbG9jYXRpb24gRXZlbnQuIFRoZSBzY29wZSBpcyBwcm92aWRlZCBpbiB0aGUgcm91dGUgYW5kIHRoZSBjb2RlIGluIHRoZSByZXF1ZXN0IGJvZHkuIFRoZSBldmVudCAgbmFtZXMgdGhlIEFsbG9jYXRpb24gTWFwIGl0IGlzIHNoYXJlZCBieSwgdGhlIGtpbmQgb2YgZXZlbnQsIHRoZSBhbW91bnQgYW5kIHRoZSBkYXRlLiBJdHMgcGVyLWludmVzdG9yIHNoYXJlcyAgYXJlIGNvbXB1dGVkIG9uIGNyZWF0aW9uIGZyb20gdGhlIG1hcCBhcyBpdCBzdG9vZCBvbiB0aGUgZXZlbnQgZGF0ZSwgc28gdGhlIHJlc3BvbnNlIGNvbWVzIGJhY2sgQ29tcHV0ZWQuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IENyZWF0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxBbGxvY2F0aW9uRXZlbnQ+O1xuICAgIHB1YmxpYyBjcmVhdGVBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgY3JlYXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogQ3JlYXRlQWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyBjcmVhdGVBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBDcmVhdGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsb2NhdGlvbkV2ZW50UmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hbGxvY2F0aW9uRXZlbnRSZXF1ZXN0O1xuICAgICAgICBpZiAoYWxsb2NhdGlvbkV2ZW50UmVxdWVzdCA9PT0gbnVsbCB8fCBhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFsbG9jYXRpb25FdmVudFJlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ3RleHQvanNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vKitqc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvYWxsb2NhdGlvbmV2ZW50cy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJzY29wZVwiLCB2YWx1ZTogc2NvcGUsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFsbG9jYXRpb25FdmVudD4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGFsbG9jYXRpb25FdmVudFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBEZWxldGVBbGxvY2F0aW9uRXZlbnQ6IERlbGV0ZSBhbiBBbGxvY2F0aW9uIEV2ZW50LlxuICAgICAqIERlbGV0ZSBhbiBBbGxvY2F0aW9uIEV2ZW50IGZyb20gYW4gZWZmZWN0aXZlIGRhdGV0aW1lLiBUaGUgQWxsb2NhdGlvbiBFdmVudCByZW1haW5zIHJldHJpZXZhYmxlIGF0IGVhcmxpZXIgIGVmZmVjdGl2ZSBkYXRldGltZXMuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IERlbGV0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxEZWxldGVkRW50aXR5UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBkZWxldGVBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxEZWxldGVkRW50aXR5UmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZGVsZXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogRGVsZXRlQWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PERlbGV0ZWRFbnRpdHlSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBkZWxldGVBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBEZWxldGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQXQgPSByZXF1ZXN0UGFyYW1ldGVycz8uZWZmZWN0aXZlQXQ7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoZWZmZWN0aXZlQXQgIT09IHVuZGVmaW5lZCAmJiBlZmZlY3RpdmVBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmVmZmVjdGl2ZUF0LCAnZWZmZWN0aXZlQXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2FsbG9jYXRpb25ldmVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxEZWxldGVkRW50aXR5UmVzcG9uc2U+KCdkZWxldGUnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBHZXRBbGxvY2F0aW9uRXZlbnQ6IEdldCBhbiBBbGxvY2F0aW9uIEV2ZW50LlxuICAgICAqIFJldHJpZXZlIGEgcGFydGljdWxhciBBbGxvY2F0aW9uIEV2ZW50IGF0IGFuIGVmZmVjdGl2ZSBhbmQgYXNBdCBkYXRldGltZSwgaW5jbHVkaW5nIGl0cyBjb21wdXRlZCAgcGVyLWludmVzdG9yIHNoYXJlcyBhbmQsIG9uY2UgYm9va2VkLCBpdHMgYm9va2luZyByZWZlcmVuY2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldEFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IEdldEFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxBbGxvY2F0aW9uRXZlbnQ+O1xuICAgIHB1YmxpYyBnZXRBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgZ2V0QWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogR2V0QWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyBnZXRBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBHZXRBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb2RlO1xuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGNvZGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRBbGxvY2F0aW9uRXZlbnQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQXQgPSByZXF1ZXN0UGFyYW1ldGVycz8uZWZmZWN0aXZlQXQ7XG4gICAgICAgIGNvbnN0IGFzQXQgPSByZXF1ZXN0UGFyYW1ldGVycz8uYXNBdDtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChlZmZlY3RpdmVBdCAhPT0gdW5kZWZpbmVkICYmIGVmZmVjdGl2ZUF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZWZmZWN0aXZlQXQsICdlZmZlY3RpdmVBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhc0F0ICE9PSB1bmRlZmluZWQgJiYgYXNBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmFzQXQsICdhc0F0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChvYXV0aDIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdvYXV0aDInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAndGV4dC9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9hbGxvY2F0aW9uZXZlbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QWxsb2NhdGlvbkV2ZW50PignZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW0VYUEVSSU1FTlRBTF0gTGlzdEFsbG9jYXRpb25FdmVudHM6IExpc3QgQWxsb2NhdGlvbiBFdmVudHMuXG4gICAgICogTGlzdCBhbGwgdGhlIEFsbG9jYXRpb24gRXZlbnRzIG1hdGNoaW5nIGEgcGFydGljdWxhciBjcml0ZXJpYS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdEFsbG9jYXRpb25FdmVudHMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0QWxsb2NhdGlvbkV2ZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxQYWdlZFJlc291cmNlTGlzdE9mQWxsb2NhdGlvbkV2ZW50PjtcbiAgICBwdWJsaWMgbGlzdEFsbG9jYXRpb25FdmVudHMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0QWxsb2NhdGlvbkV2ZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFBhZ2VkUmVzb3VyY2VMaXN0T2ZBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgbGlzdEFsbG9jYXRpb25FdmVudHMocmVxdWVzdFBhcmFtZXRlcnM/OiBMaXN0QWxsb2NhdGlvbkV2ZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxQYWdlZFJlc291cmNlTGlzdE9mQWxsb2NhdGlvbkV2ZW50Pj47XG4gICAgcHVibGljIGxpc3RBbGxvY2F0aW9uRXZlbnRzKHJlcXVlc3RQYXJhbWV0ZXJzPzogTGlzdEFsbG9jYXRpb25FdmVudHNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmVmZmVjdGl2ZUF0O1xuICAgICAgICBjb25zdCBhc0F0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFzQXQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSByZXF1ZXN0UGFyYW1ldGVycz8ucGFnZTtcbiAgICAgICAgY29uc3QgbGltaXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ubGltaXQ7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5maWx0ZXI7XG4gICAgICAgIGNvbnN0IHNvcnRCeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zb3J0Qnk7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoZWZmZWN0aXZlQXQgIT09IHVuZGVmaW5lZCAmJiBlZmZlY3RpdmVBdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmVmZmVjdGl2ZUF0LCAnZWZmZWN0aXZlQXQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXNBdCAhPT0gdW5kZWZpbmVkICYmIGFzQXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5hc0F0LCAnYXNBdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdlICE9PSB1bmRlZmluZWQgJiYgcGFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PnBhZ2UsICdwYWdlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5saW1pdCwgJ2xpbWl0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdW5kZWZpbmVkICYmIGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMobG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICA8YW55PmZpbHRlciwgJ2ZpbHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3J0QnkpIHtcbiAgICAgICAgICAgIHNvcnRCeS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgIDxhbnk+ZWxlbWVudCwgJ3NvcnRCeScpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2FsbG9jYXRpb25ldmVudHNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnZWRSZXNvdXJjZUxpc3RPZkFsbG9jYXRpb25FdmVudD4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtFWFBFUklNRU5UQUxdIFJlYWxsb2NhdGVBbGxvY2F0aW9uRXZlbnQ6IFJlYWxsb2NhdGUgYW4gQWxsb2NhdGlvbiBFdmVudC5cbiAgICAgKiBSZWNvbXB1dGUgdGhlIHBlci1pbnZlc3RvciBzaGFyZXMgb2YgYW4gdW5ib29rZWQgQWxsb2NhdGlvbiBFdmVudCBhZ2FpbnN0IGl0cyBtYXAsIGZyb20gYW4gZWZmZWN0aXZlICBkYXRldGltZSwgcmVjb3JkaW5nIHRoZSByZWFzb24uIEFueSBiYXNpcyB2YWx1ZXMgc3VwcGxpZWQgcmVwbGFjZSB0aG9zZSB1c2VkIGJlZm9yZS4gQSBib29rZWQgQWxsb2NhdGlvbiAgRXZlbnQgY2Fubm90IGJlIHJlYWxsb2NhdGVkLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFsbG9jYXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogUmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxBbGxvY2F0aW9uRXZlbnQ+O1xuICAgIHB1YmxpYyByZWFsbG9jYXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogUmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyByZWFsbG9jYXRlQWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogUmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBbGxvY2F0aW9uRXZlbnQ+PjtcbiAgICBwdWJsaWMgcmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IFJlYWxsb2NhdGVBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNjb3BlO1xuICAgICAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2NvcGUgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZWFsbG9jYXRlQWxsb2NhdGlvbkV2ZW50LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29kZTtcbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjb2RlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxvY2F0aW9uRXZlbnRSZWFsbG9jYXRlUmVxdWVzdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hbGxvY2F0aW9uRXZlbnRSZWFsbG9jYXRlUmVxdWVzdDtcbiAgICAgICAgaWYgKGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0ID09PSBudWxsIHx8IGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcmVhbGxvY2F0ZUFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlZmZlY3RpdmVBdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5lZmZlY3RpdmVBdDtcblxuICAgICAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogdGhpcy5lbmNvZGVyfSk7XG4gICAgICAgIGlmIChlZmZlY3RpdmVBdCAhPT0gdW5kZWZpbmVkICYmIGVmZmVjdGl2ZUF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZWZmZWN0aXZlQXQsICdlZmZlY3RpdmVBdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAob2F1dGgyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnb2F1dGgyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ3RleHQvanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICd0ZXh0L2pzb24nLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uLyoranNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL2FsbG9jYXRpb25ldmVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwic2NvcGVcIiwgdmFsdWU6IHNjb3BlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjb2RlXCIsIHZhbHVlOiBjb2RlLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS9yZWFsbG9jYXRlYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFsbG9jYXRpb25FdmVudD4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGFsbG9jYXRpb25FdmVudFJlYWxsb2NhdGVSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbRVhQRVJJTUVOVEFMXSBVcHNlcnRBbGxvY2F0aW9uRXZlbnQ6IFVwc2VydCBhbiBBbGxvY2F0aW9uIEV2ZW50LlxuICAgICAqIFVwZGF0ZSBvciBpbnNlcnQgYW4gQWxsb2NhdGlvbiBFdmVudC4gSWYgdGhlIEFsbG9jYXRpb24gRXZlbnQgZG9lcyBub3QgZXhpc3QgaXQgaXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGl0IGlzICByZXBsYWNlZCBhbmQgaXRzIHNoYXJlcyByZWNvbXB1dGVkLiBUaGUgY29kZSBpbiB0aGUgcmVxdWVzdCBib2R5IG11c3QgbWF0Y2ggdGhlIGNvZGUgaW4gdGhlIHJvdXRlLiBBIGJvb2tlZCAgQWxsb2NhdGlvbiBFdmVudCBpcyBmcm96ZW4gYW5kIGNhbm5vdCBiZSByZXBsYWNlZC5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBzZXJ0QWxsb2NhdGlvbkV2ZW50KHJlcXVlc3RQYXJhbWV0ZXJzPzogVXBzZXJ0QWxsb2NhdGlvbkV2ZW50UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAndGV4dC9wbGFpbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAndGV4dC9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEFsbG9jYXRpb25FdmVudD47XG4gICAgcHVibGljIHVwc2VydEFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IFVwc2VydEFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICd0ZXh0L3BsYWluJyB8ICdhcHBsaWNhdGlvbi9qc29uJyB8ICd0ZXh0L2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFsbG9jYXRpb25FdmVudD4+O1xuICAgIHB1YmxpYyB1cHNlcnRBbGxvY2F0aW9uRXZlbnQocmVxdWVzdFBhcmFtZXRlcnM/OiBVcHNlcnRBbGxvY2F0aW9uRXZlbnRSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QWxsb2NhdGlvbkV2ZW50Pj47XG4gICAgcHVibGljIHVwc2VydEFsbG9jYXRpb25FdmVudChyZXF1ZXN0UGFyYW1ldGVycz86IFVwc2VydEFsbG9jYXRpb25FdmVudFJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ3RleHQvcGxhaW4nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ3RleHQvanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uc2NvcGU7XG4gICAgICAgIGlmIChzY29wZSA9PT0gbnVsbCB8fCBzY29wZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzY29wZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwc2VydEFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvZGU7XG4gICAgICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgY29kZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwc2VydEFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFsbG9jYXRpb25FdmVudFJlcXVlc3Q7XG4gICAgICAgIGlmIChhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0ID09PSBudWxsIHx8IGFsbG9jYXRpb25FdmVudFJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgYWxsb2NhdGlvbkV2ZW50UmVxdWVzdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwc2VydEFsbG9jYXRpb25FdmVudC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKG9hdXRoMikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ29hdXRoMicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICd0ZXh0L2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicsXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAndGV4dC9qc29uJyxcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi8qK2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS9hbGxvY2F0aW9uZXZlbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInNjb3BlXCIsIHZhbHVlOiBzY29wZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiY29kZVwiLCB2YWx1ZTogY29kZSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QWxsb2NhdGlvbkV2ZW50PigncHV0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBhbGxvY2F0aW9uRXZlbnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=