@horietakehiro/aws-cdk-utul 0.10.2 → 0.11.3

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 (199) hide show
  1. package/lib/stack-manager.d.ts +41 -0
  2. package/lib/stack-manager.js +132 -0
  3. package/lib/types/cfn-resource-types/aws-amazonmq-configuration.d.ts +35 -5
  4. package/lib/types/cfn-resource-types/aws-amazonmq-configuration.js +1 -1
  5. package/lib/types/cfn-resource-types/aws-apigateway-vpclink.d.ts +0 -9
  6. package/lib/types/cfn-resource-types/aws-apigateway-vpclink.js +1 -1
  7. package/lib/types/cfn-resource-types/aws-apigatewayv2-domainname.d.ts +2 -2
  8. package/lib/types/cfn-resource-types/aws-apigatewayv2-domainname.js +1 -1
  9. package/lib/types/cfn-resource-types/aws-appconfig-deploymentstrategy.d.ts +56 -8
  10. package/lib/types/cfn-resource-types/aws-appconfig-deploymentstrategy.js +1 -1
  11. package/lib/types/cfn-resource-types/aws-appsync-datasource.d.ts +151 -31
  12. package/lib/types/cfn-resource-types/aws-appsync-datasource.js +1 -1
  13. package/lib/types/cfn-resource-types/aws-appsync-graphqlapi.d.ts +225 -36
  14. package/lib/types/cfn-resource-types/aws-appsync-graphqlapi.js +1 -1
  15. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.d.ts +6 -1
  16. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.js +1 -1
  17. package/lib/types/cfn-resource-types/aws-b2bi-capability.d.ts +2 -0
  18. package/lib/types/cfn-resource-types/aws-b2bi-capability.js +1 -1
  19. package/lib/types/cfn-resource-types/aws-b2bi-partnership.d.ts +37 -1
  20. package/lib/types/cfn-resource-types/aws-b2bi-partnership.js +1 -1
  21. package/lib/types/cfn-resource-types/aws-b2bi-transformer.d.ts +41 -4
  22. package/lib/types/cfn-resource-types/aws-b2bi-transformer.js +1 -1
  23. package/lib/types/cfn-resource-types/aws-backup-logicallyairgappedbackupvault.d.ts +28 -0
  24. package/lib/types/cfn-resource-types/aws-backup-logicallyairgappedbackupvault.js +3 -0
  25. package/lib/types/cfn-resource-types/aws-bedrock-agent.d.ts +1 -1
  26. package/lib/types/cfn-resource-types/aws-bedrock-agent.js +1 -1
  27. package/lib/types/cfn-resource-types/aws-bedrock-flow.d.ts +17 -6
  28. package/lib/types/cfn-resource-types/aws-bedrock-flow.js +1 -1
  29. package/lib/types/cfn-resource-types/aws-bedrock-flowversion.d.ts +17 -6
  30. package/lib/types/cfn-resource-types/aws-bedrock-flowversion.js +1 -1
  31. package/lib/types/cfn-resource-types/aws-bedrock-prompt.d.ts +3 -7
  32. package/lib/types/cfn-resource-types/aws-bedrock-prompt.js +1 -1
  33. package/lib/types/cfn-resource-types/aws-bedrock-promptversion.d.ts +4 -8
  34. package/lib/types/cfn-resource-types/aws-bedrock-promptversion.js +1 -1
  35. package/lib/types/cfn-resource-types/aws-cloudformation-customresource.d.ts +2 -1
  36. package/lib/types/cfn-resource-types/aws-cloudformation-customresource.js +1 -1
  37. package/lib/types/cfn-resource-types/aws-codepipeline-pipeline.d.ts +23 -2
  38. package/lib/types/cfn-resource-types/aws-codepipeline-pipeline.js +1 -1
  39. package/lib/types/cfn-resource-types/aws-cognito-userpool.d.ts +2 -0
  40. package/lib/types/cfn-resource-types/aws-cognito-userpool.js +1 -1
  41. package/lib/types/cfn-resource-types/aws-cognito-userpoolidentityprovider.d.ts +15 -8
  42. package/lib/types/cfn-resource-types/aws-cognito-userpoolidentityprovider.js +1 -1
  43. package/lib/types/cfn-resource-types/aws-connect-contactflow.d.ts +1 -1
  44. package/lib/types/cfn-resource-types/aws-connect-contactflow.js +1 -1
  45. package/lib/types/cfn-resource-types/aws-connect-hoursofoperation.d.ts +18 -18
  46. package/lib/types/cfn-resource-types/aws-connect-hoursofoperation.js +1 -1
  47. package/lib/types/cfn-resource-types/aws-datasync-task.d.ts +96 -96
  48. package/lib/types/cfn-resource-types/aws-datasync-task.js +1 -1
  49. package/lib/types/cfn-resource-types/aws-dms-datamigration.d.ts +90 -0
  50. package/lib/types/cfn-resource-types/aws-dms-datamigration.js +3 -0
  51. package/lib/types/cfn-resource-types/aws-dms-replicationinstance.d.ts +1 -0
  52. package/lib/types/cfn-resource-types/aws-dms-replicationinstance.js +1 -1
  53. package/lib/types/cfn-resource-types/aws-ec2-capacityreservation.d.ts +1 -0
  54. package/lib/types/cfn-resource-types/aws-ec2-capacityreservation.js +1 -1
  55. package/lib/types/cfn-resource-types/aws-ec2-eip.d.ts +2 -0
  56. package/lib/types/cfn-resource-types/aws-ec2-eip.js +1 -1
  57. package/lib/types/cfn-resource-types/aws-ec2-natgateway.d.ts +1 -1
  58. package/lib/types/cfn-resource-types/aws-ec2-natgateway.js +1 -1
  59. package/lib/types/cfn-resource-types/aws-ec2-transitgateway.d.ts +6 -5
  60. package/lib/types/cfn-resource-types/aws-ec2-transitgateway.js +1 -1
  61. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayattachment.d.ts +4 -0
  62. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayattachment.js +1 -1
  63. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayvpcattachment.d.ts +14 -10
  64. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayvpcattachment.js +1 -1
  65. package/lib/types/cfn-resource-types/aws-ec2-vpc.d.ts +1 -1
  66. package/lib/types/cfn-resource-types/aws-ec2-vpc.js +1 -1
  67. package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.d.ts +2 -1
  68. package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.js +1 -1
  69. package/lib/types/cfn-resource-types/aws-ec2-vpcendpointconnectionnotification.d.ts +8 -8
  70. package/lib/types/cfn-resource-types/aws-ec2-vpcendpointconnectionnotification.js +1 -1
  71. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.d.ts +213 -3
  72. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.js +1 -1
  73. package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.d.ts +1 -1
  74. package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.js +1 -1
  75. package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +10 -1
  76. package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
  77. package/lib/types/cfn-resource-types/aws-ecs-taskset.d.ts +57 -51
  78. package/lib/types/cfn-resource-types/aws-ecs-taskset.js +1 -1
  79. package/lib/types/cfn-resource-types/aws-eks-cluster.d.ts +11 -1
  80. package/lib/types/cfn-resource-types/aws-eks-cluster.js +1 -1
  81. package/lib/types/cfn-resource-types/aws-elasticache-globalreplicationgroup.d.ts +4 -0
  82. package/lib/types/cfn-resource-types/aws-elasticache-globalreplicationgroup.js +1 -1
  83. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listener.d.ts +79 -63
  84. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listener.js +1 -1
  85. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listenerrule.d.ts +65 -63
  86. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listenerrule.js +1 -1
  87. package/lib/types/cfn-resource-types/aws-emr-cluster.d.ts +35 -14
  88. package/lib/types/cfn-resource-types/aws-emr-cluster.js +1 -1
  89. package/lib/types/cfn-resource-types/aws-emr-instancefleetconfig.d.ts +21 -0
  90. package/lib/types/cfn-resource-types/aws-emr-instancefleetconfig.js +1 -1
  91. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.d.ts +81 -81
  92. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.js +1 -1
  93. package/lib/types/cfn-resource-types/aws-gamelift-containergroupdefinition.d.ts +19 -0
  94. package/lib/types/cfn-resource-types/aws-gamelift-containergroupdefinition.js +1 -1
  95. package/lib/types/cfn-resource-types/aws-glue-crawler.d.ts +179 -1
  96. package/lib/types/cfn-resource-types/aws-glue-crawler.js +1 -1
  97. package/lib/types/cfn-resource-types/aws-glue-job.d.ts +96 -6
  98. package/lib/types/cfn-resource-types/aws-glue-job.js +1 -1
  99. package/lib/types/cfn-resource-types/aws-glue-schema.d.ts +1 -1
  100. package/lib/types/cfn-resource-types/aws-glue-schema.js +1 -1
  101. package/lib/types/cfn-resource-types/aws-glue-usageprofile.d.ts +64 -0
  102. package/lib/types/cfn-resource-types/aws-glue-usageprofile.js +3 -0
  103. package/lib/types/cfn-resource-types/aws-iam-policy.d.ts +4 -1
  104. package/lib/types/cfn-resource-types/aws-iam-policy.js +1 -1
  105. package/lib/types/cfn-resource-types/aws-iam-role.d.ts +3 -2
  106. package/lib/types/cfn-resource-types/aws-iam-role.js +1 -1
  107. package/lib/types/cfn-resource-types/aws-imagebuilder-component.d.ts +1 -1
  108. package/lib/types/cfn-resource-types/aws-imagebuilder-component.js +1 -1
  109. package/lib/types/cfn-resource-types/aws-imagebuilder-infrastructureconfiguration.d.ts +22 -0
  110. package/lib/types/cfn-resource-types/aws-imagebuilder-infrastructureconfiguration.js +1 -1
  111. package/lib/types/cfn-resource-types/aws-iot-domainconfiguration.d.ts +6 -0
  112. package/lib/types/cfn-resource-types/aws-iot-domainconfiguration.js +1 -1
  113. package/lib/types/cfn-resource-types/aws-iotevents-alarmmodel.d.ts +195 -79
  114. package/lib/types/cfn-resource-types/aws-iotevents-alarmmodel.js +1 -1
  115. package/lib/types/cfn-resource-types/aws-iotevents-detectormodel.d.ts +177 -85
  116. package/lib/types/cfn-resource-types/aws-iotevents-detectormodel.js +1 -1
  117. package/lib/types/cfn-resource-types/aws-iotevents-input.d.ts +9 -11
  118. package/lib/types/cfn-resource-types/aws-iotevents-input.js +1 -1
  119. package/lib/types/cfn-resource-types/aws-ivs-encoderconfiguration.d.ts +2 -2
  120. package/lib/types/cfn-resource-types/aws-ivs-encoderconfiguration.js +1 -1
  121. package/lib/types/cfn-resource-types/aws-kinesis-resourcepolicy.d.ts +17 -0
  122. package/lib/types/cfn-resource-types/aws-kinesis-resourcepolicy.js +3 -0
  123. package/lib/types/cfn-resource-types/aws-lakeformation-principalpermissions.d.ts +1 -1
  124. package/lib/types/cfn-resource-types/aws-lakeformation-principalpermissions.js +1 -1
  125. package/lib/types/cfn-resource-types/aws-lakeformation-tag.d.ts +1 -1
  126. package/lib/types/cfn-resource-types/aws-lakeformation-tag.js +1 -1
  127. package/lib/types/cfn-resource-types/aws-lambda-eventsourcemapping.d.ts +115 -108
  128. package/lib/types/cfn-resource-types/aws-lambda-eventsourcemapping.js +1 -1
  129. package/lib/types/cfn-resource-types/aws-medialive-channel.d.ts +2 -0
  130. package/lib/types/cfn-resource-types/aws-medialive-channel.js +1 -1
  131. package/lib/types/cfn-resource-types/aws-memorydb-cluster.d.ts +4 -0
  132. package/lib/types/cfn-resource-types/aws-memorydb-cluster.js +1 -1
  133. package/lib/types/cfn-resource-types/aws-networkfirewall-firewallpolicy.d.ts +3 -0
  134. package/lib/types/cfn-resource-types/aws-networkfirewall-firewallpolicy.js +1 -1
  135. package/lib/types/cfn-resource-types/aws-organizations-policy.d.ts +2 -2
  136. package/lib/types/cfn-resource-types/aws-organizations-policy.js +1 -1
  137. package/lib/types/cfn-resource-types/aws-qbusiness-webexperience.d.ts +6 -0
  138. package/lib/types/cfn-resource-types/aws-qbusiness-webexperience.js +1 -1
  139. package/lib/types/cfn-resource-types/aws-quicksight-analysis.d.ts +13 -0
  140. package/lib/types/cfn-resource-types/aws-quicksight-analysis.js +1 -1
  141. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.d.ts +13 -0
  142. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.js +1 -1
  143. package/lib/types/cfn-resource-types/aws-quicksight-dataset.d.ts +2 -2
  144. package/lib/types/cfn-resource-types/aws-quicksight-dataset.js +1 -1
  145. package/lib/types/cfn-resource-types/aws-quicksight-datasource.d.ts +247 -242
  146. package/lib/types/cfn-resource-types/aws-quicksight-datasource.js +1 -1
  147. package/lib/types/cfn-resource-types/aws-quicksight-folder.d.ts +79 -0
  148. package/lib/types/cfn-resource-types/aws-quicksight-folder.js +3 -0
  149. package/lib/types/cfn-resource-types/aws-quicksight-template.d.ts +8 -0
  150. package/lib/types/cfn-resource-types/aws-quicksight-template.js +1 -1
  151. package/lib/types/cfn-resource-types/aws-rds-dbcluster.d.ts +366 -366
  152. package/lib/types/cfn-resource-types/aws-rds-dbcluster.js +1 -1
  153. package/lib/types/cfn-resource-types/aws-rds-dbinstance.d.ts +1 -4
  154. package/lib/types/cfn-resource-types/aws-rds-dbinstance.js +1 -1
  155. package/lib/types/cfn-resource-types/aws-rds-globalcluster.d.ts +19 -0
  156. package/lib/types/cfn-resource-types/aws-rds-globalcluster.js +1 -1
  157. package/lib/types/cfn-resource-types/aws-redshift-integration.d.ts +61 -0
  158. package/lib/types/cfn-resource-types/aws-redshift-integration.js +3 -0
  159. package/lib/types/cfn-resource-types/aws-refactorspaces-environment.d.ts +2 -2
  160. package/lib/types/cfn-resource-types/aws-refactorspaces-environment.js +1 -1
  161. package/lib/types/cfn-resource-types/aws-route53profiles-profileassociation.d.ts +1 -1
  162. package/lib/types/cfn-resource-types/aws-route53profiles-profileassociation.js +1 -1
  163. package/lib/types/cfn-resource-types/aws-route53resolver-resolverrule.d.ts +4 -4
  164. package/lib/types/cfn-resource-types/aws-route53resolver-resolverrule.js +1 -1
  165. package/lib/types/cfn-resource-types/aws-s3-bucket.d.ts +599 -591
  166. package/lib/types/cfn-resource-types/aws-s3-bucket.js +1 -1
  167. package/lib/types/cfn-resource-types/aws-s3express-directorybucket.d.ts +34 -3
  168. package/lib/types/cfn-resource-types/aws-s3express-directorybucket.js +1 -1
  169. package/lib/types/cfn-resource-types/aws-sagemaker-domain.d.ts +8 -0
  170. package/lib/types/cfn-resource-types/aws-sagemaker-domain.js +1 -1
  171. package/lib/types/cfn-resource-types/aws-sagemaker-endpoint.d.ts +137 -20
  172. package/lib/types/cfn-resource-types/aws-sagemaker-endpoint.js +1 -1
  173. package/lib/types/cfn-resource-types/aws-secretsmanager-secret.d.ts +1 -1
  174. package/lib/types/cfn-resource-types/aws-secretsmanager-secret.js +1 -1
  175. package/lib/types/cfn-resource-types/aws-securityhub-automationrule.d.ts +4 -4
  176. package/lib/types/cfn-resource-types/aws-securityhub-automationrule.js +1 -1
  177. package/lib/types/cfn-resource-types/aws-securityhub-findingaggregator.d.ts +2 -2
  178. package/lib/types/cfn-resource-types/aws-securityhub-findingaggregator.js +1 -1
  179. package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.d.ts +4 -1
  180. package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.js +1 -1
  181. package/lib/types/cfn-resource-types/aws-sns-topic.d.ts +2 -6
  182. package/lib/types/cfn-resource-types/aws-sns-topic.js +1 -1
  183. package/lib/types/cfn-resource-types/aws-sqs-queue.d.ts +12 -12
  184. package/lib/types/cfn-resource-types/aws-sqs-queue.js +1 -1
  185. package/lib/types/cfn-resource-types/aws-sqs-queuepolicy.d.ts +1 -3
  186. package/lib/types/cfn-resource-types/aws-sqs-queuepolicy.js +1 -1
  187. package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.d.ts +1 -1
  188. package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.js +1 -1
  189. package/lib/types/cfn-resource-types/aws-transfer-server.d.ts +70 -36
  190. package/lib/types/cfn-resource-types/aws-transfer-server.js +1 -1
  191. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.d.ts +34 -0
  192. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.js +3 -0
  193. package/lib/types/cfn-resource-types/aws-wisdom-knowledgebase.d.ts +1 -1
  194. package/lib/types/cfn-resource-types/aws-wisdom-knowledgebase.js +1 -1
  195. package/lib/types/cfn-resource-types/aws-workspacesweb-identityprovider.d.ts +9 -0
  196. package/lib/types/cfn-resource-types/aws-workspacesweb-identityprovider.js +1 -1
  197. package/lib/types/cfn-resource-types.d.ts +14 -0
  198. package/lib/types/cfn-resource-types.js +40 -26
  199. package/package.json +11 -7
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXMzLWJ1Y2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1zMy1idWNrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW1hem9uIFMzIGtleSBmb3JtYXQgZm9yIGxvZyBvYmplY3RzLiBPbmx5IG9uZSBmb3JtYXQsIGVpdGhlciBQYXJ0aXRpb25lZFByZWZpeCBvciBTaW1wbGVQcmVmaXgsIGlzIGFsbG93ZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFRhcmdldE9iamVjdEtleUZvcm1hdCA9ICh7XG4vKipcbiAqIFRoaXMgZm9ybWF0IGRlZmF1bHRzIHRoZSBwcmVmaXggdG8gdGhlIGdpdmVuIGxvZyBmaWxlIHByZWZpeCBmb3IgZGVsaXZlcmluZyBzZXJ2ZXIgYWNjZXNzIGxvZyBmaWxlLlxuICovXG5TaW1wbGVQcmVmaXg6IHtcblxufVxufSB8IHtcblBhcnRpdGlvbmVkUHJlZml4OiBQYXJ0aXRpb25lZFByZWZpeFxufSlcblxuLyoqXG4gKiBUaGUgYGBBV1M6OlMzOjpCdWNrZXRgYCByZXNvdXJjZSBjcmVhdGVzIGFuIEFtYXpvbiBTMyBidWNrZXQgaW4gdGhlIHNhbWUgQVdTIFJlZ2lvbiB3aGVyZSB5b3UgY3JlYXRlIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gc3RhY2suXG4gKiAgVG8gY29udHJvbCBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgdGhlIGJ1Y2tldCB3aGVuIHRoZSBzdGFjayBpcyBkZWxldGVkLCB5b3UgY2FuIHNldCBhIGRlbGV0aW9uIHBvbGljeSBmb3IgeW91ciBidWNrZXQuIFlvdSBjYW4gY2hvb3NlIHRvICpyZXRhaW4qIHRoZSBidWNrZXQgb3IgdG8gKmRlbGV0ZSogdGhlIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRGVsZXRpb25Qb2xpY3kgQXR0cmlidXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtYXR0cmlidXRlLWRlbGV0aW9ucG9saWN5Lmh0bWwpLlxuICogICBZb3UgY2FuIG9ubHkgZGVsZXRlIGVtcHR5IGJ1Y2tldHMuIERlbGV0aW9uIGZhaWxzIGZvciBidWNrZXRzIHRoYXQgaGF2ZSBjb250ZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX1MzX0JVQ0tFVCB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24gZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0dFVCBCdWNrZXQgaW52ZW50b3J5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0R0VUSW52ZW50b3J5Q29uZmlnLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIEFQSSBSZWZlcmVuY2UqLlxuICovXG5JbnZlbnRvcnlDb25maWd1cmF0aW9ucz86IEludmVudG9yeUNvbmZpZ3VyYXRpb25bXVxuV2Vic2l0ZUNvbmZpZ3VyYXRpb24/OiBXZWJzaXRlQ29uZmlndXJhdGlvblxuRHVhbFN0YWNrRG9tYWluTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGlzIGlzIGEgbGVnYWN5IHByb3BlcnR5LCBhbmQgaXQgaXMgbm90IHJlY29tbWVuZGVkIGZvciBtb3N0IHVzZSBjYXNlcy4gQSBtYWpvcml0eSBvZiBtb2Rlcm4gdXNlIGNhc2VzIGluIEFtYXpvbiBTMyBubyBsb25nZXIgcmVxdWlyZSB0aGUgdXNlIG9mIEFDTHMsIGFuZCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Uga2VlcCBBQ0xzIGRpc2FibGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDb250cm9sbGluZyBvYmplY3Qgb3duZXJzaGlwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYWJvdXQtb2JqZWN0LW93bmVyc2hpcC5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqICAgQSBjYW5uZWQgYWNjZXNzIGNvbnRyb2wgbGlzdCAoQUNMKSB0aGF0IGdyYW50cyBwcmVkZWZpbmVkIHBlcm1pc3Npb25zIHRvIHRoZSBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhbm5lZCBBQ0xzLCBzZWUgW0Nhbm5lZCBBQ0xdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2FjbC1vdmVydmlldy5odG1sI2Nhbm5lZC1hY2wpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICogICBTMyBidWNrZXRzIGFyZSBjcmVhdGVkIHdpdGggQUNMcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBUaGVyZWZvcmUsIHVubGVzcyB5b3UgZXhwbGljaXRseSBzZXQgdGhlIFtBV1M6OlMzOjpPd25lcnNoaXBDb250cm9sc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tLy9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC1vd25lcnNoaXBjb250cm9scy5odG1sKSBwcm9wZXJ0eSB0byBlbmFibGUgQUNMcywgeW91ciByZXNvdXJjZSB3aWxsIGZhaWwgdG8gZGVwbG95IHdpdGggYW55IHZhbHVlIG90aGVyIHRoYW4gUHJpdmF0ZS4gVXNlIGNhc2VzIHJlcXVpcmluZyBBQ0xzIGFyZSB1bmNvbW1vbi5cbiAqICAgVGhlIG1ham9yaXR5IG9mIGFjY2VzcyBjb250cm9sIGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBzdWNjZXNzZnVsbHkgYW5kIG1vcmUgZWFzaWx5IGFjaGlldmVkIHdpdGggYnVja2V0IHBvbGljaWVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBV1M6OlMzOjpCdWNrZXRQb2xpY3ldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS8vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zMy1wb2xpY3kuaHRtbCkuIEZvciBleGFtcGxlcyBvZiBjb21tb24gcG9saWN5IGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRpbmcgUzMgU2VydmVyIEFjY2VzcyBMb2dzIGJ1Y2tldHMgYW5kIG1vcmUsIHNlZSBbQnVja2V0IHBvbGljeSBleGFtcGxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvZXhhbXBsZS1idWNrZXQtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbkFjY2Vzc0NvbnRyb2w/OiAoXCJBdXRoZW50aWNhdGVkUmVhZFwiIHwgXCJBd3NFeGVjUmVhZFwiIHwgXCJCdWNrZXRPd25lckZ1bGxDb250cm9sXCIgfCBcIkJ1Y2tldE93bmVyUmVhZFwiIHwgXCJMb2dEZWxpdmVyeVdyaXRlXCIgfCBcIlByaXZhdGVcIiB8IFwiUHVibGljUmVhZFwiIHwgXCJQdWJsaWNSZWFkV3JpdGVcIilcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbnkgYW5hbHlzZXMgZm9yIHRoZSBhbmFseXRpY3MgZmlsdGVyIG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cbkFuYWx5dGljc0NvbmZpZ3VyYXRpb25zPzogQW5hbHl0aWNzQ29uZmlndXJhdGlvbltdXG5BY2NlbGVyYXRlQ29uZmlndXJhdGlvbj86IEFjY2VsZXJhdGVDb25maWd1cmF0aW9uXG5QdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24/OiBQdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb25cbi8qKlxuICogQSBuYW1lIGZvciB0aGUgYnVja2V0LiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIG5hbWUsIEFXUyBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZXMgYSB1bmlxdWUgSUQgYW5kIHVzZXMgdGhhdCBJRCBmb3IgdGhlIGJ1Y2tldCBuYW1lLiBUaGUgYnVja2V0IG5hbWUgbXVzdCBjb250YWluIG9ubHkgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHBlcmlvZHMgKC4pLCBhbmQgZGFzaGVzICgtKSBhbmQgbXVzdCBmb2xsb3cgW0FtYXpvbiBTMyBidWNrZXQgcmVzdHJpY3Rpb25zIGFuZCBsaW1pdGF0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvQnVja2V0UmVzdHJpY3Rpb25zLmh0bWwpLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSdWxlcyBmb3IgbmFtaW5nIEFtYXpvbiBTMyBidWNrZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9CdWNrZXRSZXN0cmljdGlvbnMuaHRtbCNidWNrZXRuYW1pbmdydWxlcykgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouIFxuICogICBJZiB5b3Ugc3BlY2lmeSBhIG5hbWUsIHlvdSBjYW4ndCBwZXJmb3JtIHVwZGF0ZXMgdGhhdCByZXF1aXJlIHJlcGxhY2VtZW50IG9mIHRoaXMgcmVzb3VyY2UuIFlvdSBjYW4gcGVyZm9ybSB1cGRhdGVzIHRoYXQgcmVxdWlyZSBubyBvciBzb21lIGludGVycnVwdGlvbi4gSWYgeW91IG5lZWQgdG8gcmVwbGFjZSB0aGUgcmVzb3VyY2UsIHNwZWNpZnkgYSBuZXcgbmFtZS5cbiAqL1xuQnVja2V0TmFtZT86IHN0cmluZ1xuUmVnaW9uYWxEb21haW5OYW1lPzogc3RyaW5nXG5Pd25lcnNoaXBDb250cm9scz86IE93bmVyc2hpcENvbnRyb2xzXG5PYmplY3RMb2NrQ29uZmlndXJhdGlvbj86IE9iamVjdExvY2tDb25maWd1cmF0aW9uXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgYnVja2V0IGhhcyBhbiBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uIGVuYWJsZWQuIEVuYWJsZSBgYE9iamVjdExvY2tFbmFibGVkYGAgd2hlbiB5b3UgYXBwbHkgYGBPYmplY3RMb2NrQ29uZmlndXJhdGlvbmBgIHRvIGEgYnVja2V0LlxuICovXG5PYmplY3RMb2NrRW5hYmxlZD86IGJvb2xlYW5cbkxvZ2dpbmdDb25maWd1cmF0aW9uPzogTG9nZ2luZ0NvbmZpZ3VyYXRpb25cblJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbj86IFJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxuLyoqXG4gKiBBbiBhcmJpdHJhcnkgc2V0IG9mIHRhZ3MgKGtleS12YWx1ZSBwYWlycykgZm9yIHRoaXMgUzMgYnVja2V0LlxuICovXG5UYWdzPzogVGFnW11cbkRvbWFpbk5hbWU/OiBzdHJpbmdcbkJ1Y2tldEVuY3J5cHRpb24/OiBCdWNrZXRFbmNyeXB0aW9uXG5XZWJzaXRlVVJMPzogc3RyaW5nXG5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uPzogTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblxuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbj86IExpZmVjeWNsZUNvbmZpZ3VyYXRpb25cblZlcnNpb25pbmdDb25maWd1cmF0aW9uPzogVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cbi8qKlxuICogU3BlY2lmaWVzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZvciB0aGUgQ2xvdWRXYXRjaCByZXF1ZXN0IG1ldHJpY3MgKHNwZWNpZmllZCBieSB0aGUgbWV0cmljcyBjb25maWd1cmF0aW9uIElEKSBmcm9tIGFuIEFtYXpvbiBTMyBidWNrZXQuIElmIHlvdSdyZSB1cGRhdGluZyBhbiBleGlzdGluZyBtZXRyaWNzIGNvbmZpZ3VyYXRpb24sIG5vdGUgdGhhdCB0aGlzIGlzIGEgZnVsbCByZXBsYWNlbWVudCBvZiB0aGUgZXhpc3RpbmcgbWV0cmljcyBjb25maWd1cmF0aW9uLiBJZiB5b3UgZG9uJ3QgaW5jbHVkZSB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8ga2VlcCwgdGhleSBhcmUgZXJhc2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtQdXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldFBVVE1ldHJpY0NvbmZpZ3VyYXRpb24uaHRtbCkuXG4gKi9cbk1ldHJpY3NDb25maWd1cmF0aW9ucz86IE1ldHJpY3NDb25maWd1cmF0aW9uW11cbi8qKlxuICogRGVmaW5lcyBob3cgQW1hem9uIFMzIGhhbmRsZXMgSW50ZWxsaWdlbnQtVGllcmluZyBzdG9yYWdlLlxuICovXG5JbnRlbGxpZ2VudFRpZXJpbmdDb25maWd1cmF0aW9ucz86IEludGVsbGlnZW50VGllcmluZ0NvbmZpZ3VyYXRpb25bXVxuQ29yc0NvbmZpZ3VyYXRpb24/OiBDb3JzQ29uZmlndXJhdGlvblxuQXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24gZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0dFVCBCdWNrZXQgaW52ZW50b3J5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0R0VUSW52ZW50b3J5Q29uZmlnLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIEFQSSBSZWZlcmVuY2UqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludmVudG9yeUNvbmZpZ3VyYXRpb24ge1xuRGVzdGluYXRpb246IERlc3RpbmF0aW9uXG4vKipcbiAqIENvbnRhaW5zIHRoZSBvcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGludmVudG9yeSByZXN1bHRzLlxuICovXG5PcHRpb25hbEZpZWxkcz86IChcIlNpemVcIiB8IFwiTGFzdE1vZGlmaWVkRGF0ZVwiIHwgXCJTdG9yYWdlQ2xhc3NcIiB8IFwiRVRhZ1wiIHwgXCJJc011bHRpcGFydFVwbG9hZGVkXCIgfCBcIlJlcGxpY2F0aW9uU3RhdHVzXCIgfCBcIkVuY3J5cHRpb25TdGF0dXNcIiB8IFwiT2JqZWN0TG9ja1JldGFpblVudGlsRGF0ZVwiIHwgXCJPYmplY3RMb2NrTW9kZVwiIHwgXCJPYmplY3RMb2NrTGVnYWxIb2xkU3RhdHVzXCIgfCBcIkludGVsbGlnZW50VGllcmluZ0FjY2Vzc1RpZXJcIiB8IFwiQnVja2V0S2V5U3RhdHVzXCIgfCBcIkNoZWNrc3VtQWxnb3JpdGhtXCIgfCBcIk9iamVjdEFjY2Vzc0NvbnRyb2xMaXN0XCIgfCBcIk9iamVjdE93bmVyXCIpW11cbi8qKlxuICogT2JqZWN0IHZlcnNpb25zIHRvIGluY2x1ZGUgaW4gdGhlIGludmVudG9yeSBsaXN0LiBJZiBzZXQgdG8gYGBBbGxgYCwgdGhlIGxpc3QgaW5jbHVkZXMgYWxsIHRoZSBvYmplY3QgdmVyc2lvbnMsIHdoaWNoIGFkZHMgdGhlIHZlcnNpb24tcmVsYXRlZCBmaWVsZHMgYGBWZXJzaW9uSWRgYCwgYGBJc0xhdGVzdGBgLCBhbmQgYGBEZWxldGVNYXJrZXJgYCB0byB0aGUgbGlzdC4gSWYgc2V0IHRvIGBgQ3VycmVudGBgLCB0aGUgbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZXNlIHZlcnNpb24tcmVsYXRlZCBmaWVsZHMuXG4gKi9cbkluY2x1ZGVkT2JqZWN0VmVyc2lvbnM6IChcIkFsbFwiIHwgXCJDdXJyZW50XCIpXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBpbnZlbnRvcnkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gSWYgc2V0IHRvIGBgVHJ1ZWBgLCBhbiBpbnZlbnRvcnkgbGlzdCBpcyBnZW5lcmF0ZWQuIElmIHNldCB0byBgYEZhbHNlYGAsIG5vIGludmVudG9yeSBsaXN0IGlzIGdlbmVyYXRlZC5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuLyoqXG4gKiBUaGUgSUQgdXNlZCB0byBpZGVudGlmeSB0aGUgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbklkOiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBpbnZlbnRvcnkgZmlsdGVyIHByZWZpeC5cbiAqL1xuUHJlZml4Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgc2NoZWR1bGUgZm9yIGdlbmVyYXRpbmcgaW52ZW50b3J5IHJlc3VsdHMuXG4gKi9cblNjaGVkdWxlRnJlcXVlbmN5OiAoXCJEYWlseVwiIHwgXCJXZWVrbHlcIilcbn1cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCB0aGUgaW52ZW50b3J5IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdGluYXRpb24ge1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGJ1Y2tldCB0byB3aGljaCBkYXRhIGlzIGV4cG9ydGVkLlxuICovXG5CdWNrZXRBcm46IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGZpbGUgZm9ybWF0IHVzZWQgd2hlbiBleHBvcnRpbmcgZGF0YSB0byBBbWF6b24gUzMuXG4gKiAgICpBbGxvd2VkIHZhbHVlcyo6IGBgQ1NWYGAgfCBgYE9SQ2BgIHwgYGBQYXJxdWV0YGBcbiAqL1xuRm9ybWF0OiAoXCJDU1ZcIiB8IFwiT1JDXCIgfCBcIlBhcnF1ZXRcIilcbi8qKlxuICogVGhlIGFjY291bnQgSUQgdGhhdCBvd25zIHRoZSBkZXN0aW5hdGlvbiBTMyBidWNrZXQuIElmIG5vIGFjY291bnQgSUQgaXMgcHJvdmlkZWQsIHRoZSBvd25lciBpcyBub3QgdmFsaWRhdGVkIGJlZm9yZSBleHBvcnRpbmcgZGF0YS5cbiAqICAgIEFsdGhvdWdoIHRoaXMgdmFsdWUgaXMgb3B0aW9uYWwsIHdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGF0IHlvdSBzZXQgaXQgdG8gaGVscCBwcmV2ZW50IHByb2JsZW1zIGlmIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQgb3duZXJzaGlwIGNoYW5nZXMuXG4gKi9cbkJ1Y2tldEFjY291bnRJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcHJlZml4IHRvIHVzZSB3aGVuIGV4cG9ydGluZyBkYXRhLiBUaGUgcHJlZml4IGlzIHByZXBlbmRlZCB0byBhbGwgcmVzdWx0cy5cbiAqL1xuUHJlZml4Pzogc3RyaW5nXG59XG4vKipcbiAqIEluZm9ybWF0aW9uIHVzZWQgdG8gY29uZmlndXJlIHRoZSBidWNrZXQgYXMgYSBzdGF0aWMgd2Vic2l0ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSG9zdGluZyBXZWJzaXRlcyBvbiBBbWF6b24gUzNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1dlYnNpdGVIb3N0aW5nLmh0bWwpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYnNpdGVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGluZGV4IGRvY3VtZW50IGZvciB0aGUgd2Vic2l0ZS5cbiAqL1xuSW5kZXhEb2N1bWVudD86IHN0cmluZ1xuUmVkaXJlY3RBbGxSZXF1ZXN0c1RvPzogUmVkaXJlY3RBbGxSZXF1ZXN0c1RvXG4vKipcbiAqIFJ1bGVzIHRoYXQgZGVmaW5lIHdoZW4gYSByZWRpcmVjdCBpcyBhcHBsaWVkIGFuZCB0aGUgcmVkaXJlY3QgYmVoYXZpb3IuXG4gKi9cblJvdXRpbmdSdWxlcz86IFJvdXRpbmdSdWxlW11cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGVycm9yIGRvY3VtZW50IGZvciB0aGUgd2Vic2l0ZS5cbiAqL1xuRXJyb3JEb2N1bWVudD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgcmVkaXJlY3QgYmVoYXZpb3IgZm9yIGV2ZXJ5IHJlcXVlc3QgdG8gdGhpcyBidWNrZXQncyB3ZWJzaXRlIGVuZHBvaW50LlxuICogICBJZiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5LCB5b3UgY2FuJ3Qgc3BlY2lmeSBhbnkgb3RoZXIgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHtcbi8qKlxuICogUHJvdG9jb2wgdG8gdXNlIHdoZW4gcmVkaXJlY3RpbmcgcmVxdWVzdHMuIFRoZSBkZWZhdWx0IGlzIHRoZSBwcm90b2NvbCB0aGF0IGlzIHVzZWQgaW4gdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gKi9cblByb3RvY29sPzogKFwiaHR0cFwiIHwgXCJodHRwc1wiKVxuLyoqXG4gKiBOYW1lIG9mIHRoZSBob3N0IHdoZXJlIHJlcXVlc3RzIGFyZSByZWRpcmVjdGVkLlxuICovXG5Ib3N0TmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgcmVkaXJlY3QgYmVoYXZpb3IgYW5kIHdoZW4gYSByZWRpcmVjdCBpcyBhcHBsaWVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCByb3V0aW5nIHJ1bGVzLCBzZWUgW0NvbmZpZ3VyaW5nIGFkdmFuY2VkIGNvbmRpdGlvbmFsIHJlZGlyZWN0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvaG93LXRvLXBhZ2UtcmVkaXJlY3QuaHRtbCNhZHZhbmNlZC1jb25kaXRpb25hbC1yZWRpcmVjdHMpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRpbmdSdWxlIHtcblJlZGlyZWN0UnVsZTogUmVkaXJlY3RSdWxlXG5Sb3V0aW5nUnVsZUNvbmRpdGlvbj86IFJvdXRpbmdSdWxlQ29uZGl0aW9uXG59XG4vKipcbiAqIENvbnRhaW5lciBmb3IgcmVkaXJlY3QgaW5mb3JtYXRpb24uIFlvdSBjYW4gcmVkaXJlY3QgcmVxdWVzdHMgdG8gYW5vdGhlciBob3N0LCB0byBhbm90aGVyIHBhZ2UsIG9yIHdpdGggYW5vdGhlciBwcm90b2NvbC4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLCB5b3UgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQgZXJyb3IgY29kZSB0byByZXR1cm4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3RSdWxlIHtcbi8qKlxuICogVGhlIHNwZWNpZmljIG9iamVjdCBrZXkgdG8gdXNlIGluIHRoZSByZWRpcmVjdCByZXF1ZXN0LiBGb3IgZXhhbXBsZSwgcmVkaXJlY3QgcmVxdWVzdCB0byBgYGVycm9yLmh0bWxgYC4gTm90IHJlcXVpcmVkIGlmIG9uZSBvZiB0aGUgc2libGluZ3MgaXMgcHJlc2VudC4gQ2FuIGJlIHByZXNlbnQgb25seSBpZiBgYFJlcGxhY2VLZXlQcmVmaXhXaXRoYGAgaXMgbm90IHByb3ZpZGVkLlxuICogICBSZXBsYWNlbWVudCBtdXN0IGJlIG1hZGUgZm9yIG9iamVjdCBrZXlzIGNvbnRhaW5pbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChzdWNoIGFzIGNhcnJpYWdlIHJldHVybnMpIHdoZW4gdXNpbmcgWE1MIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtYTUwgcmVsYXRlZCBvYmplY3Qga2V5IGNvbnN0cmFpbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3Qta2V5cy5odG1sI29iamVjdC1rZXkteG1sLXJlbGF0ZWQtY29uc3RyYWludHMpLlxuICovXG5SZXBsYWNlS2V5V2l0aD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSFRUUCByZWRpcmVjdCBjb2RlIHRvIHVzZSBvbiB0aGUgcmVzcG9uc2UuIE5vdCByZXF1aXJlZCBpZiBvbmUgb2YgdGhlIHNpYmxpbmdzIGlzIHByZXNlbnQuXG4gKi9cbkh0dHBSZWRpcmVjdENvZGU/OiBzdHJpbmdcbi8qKlxuICogUHJvdG9jb2wgdG8gdXNlIHdoZW4gcmVkaXJlY3RpbmcgcmVxdWVzdHMuIFRoZSBkZWZhdWx0IGlzIHRoZSBwcm90b2NvbCB0aGF0IGlzIHVzZWQgaW4gdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gKi9cblByb3RvY29sPzogKFwiaHR0cFwiIHwgXCJodHRwc1wiKVxuLyoqXG4gKiBUaGUgaG9zdCBuYW1lIHRvIHVzZSBpbiB0aGUgcmVkaXJlY3QgcmVxdWVzdC5cbiAqL1xuSG9zdE5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG9iamVjdCBrZXkgcHJlZml4IHRvIHVzZSBpbiB0aGUgcmVkaXJlY3QgcmVxdWVzdC4gRm9yIGV4YW1wbGUsIHRvIHJlZGlyZWN0IHJlcXVlc3RzIGZvciBhbGwgcGFnZXMgd2l0aCBwcmVmaXggYGBkb2NzL2BgIChvYmplY3RzIGluIHRoZSBgYGRvY3MvYGAgZm9sZGVyKSB0byBgYGRvY3VtZW50cy9gYCwgeW91IGNhbiBzZXQgYSBjb25kaXRpb24gYmxvY2sgd2l0aCBgYEtleVByZWZpeEVxdWFsc2BgIHNldCB0byBgYGRvY3MvYGAgYW5kIGluIHRoZSBSZWRpcmVjdCBzZXQgYGBSZXBsYWNlS2V5UHJlZml4V2l0aGBgIHRvIGBgL2RvY3VtZW50c2BgLiBOb3QgcmVxdWlyZWQgaWYgb25lIG9mIHRoZSBzaWJsaW5ncyBpcyBwcmVzZW50LiBDYW4gYmUgcHJlc2VudCBvbmx5IGlmIGBgUmVwbGFjZUtleVdpdGhgYCBpcyBub3QgcHJvdmlkZWQuXG4gKiAgIFJlcGxhY2VtZW50IG11c3QgYmUgbWFkZSBmb3Igb2JqZWN0IGtleXMgY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMgKHN1Y2ggYXMgY2FycmlhZ2UgcmV0dXJucykgd2hlbiB1c2luZyBYTUwgcmVxdWVzdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1hNTCByZWxhdGVkIG9iamVjdCBrZXkgY29uc3RyYWludHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1rZXlzLmh0bWwjb2JqZWN0LWtleS14bWwtcmVsYXRlZC1jb25zdHJhaW50cykuXG4gKi9cblJlcGxhY2VLZXlQcmVmaXhXaXRoPzogc3RyaW5nXG59XG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBkZXNjcmliaW5nIGEgY29uZGl0aW9uIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoZSBzcGVjaWZpZWQgcmVkaXJlY3QgdG8gYXBwbHkuIEZvciBleGFtcGxlLCAxLiBJZiByZXF1ZXN0IGlzIGZvciBwYWdlcyBpbiB0aGUgYGAvZG9jc2BgIGZvbGRlciwgcmVkaXJlY3QgdG8gdGhlIGBgL2RvY3VtZW50c2BgIGZvbGRlci4gMi4gSWYgcmVxdWVzdCByZXN1bHRzIGluIEhUVFAgZXJyb3IgNHh4LCByZWRpcmVjdCByZXF1ZXN0IHRvIGFub3RoZXIgaG9zdCB3aGVyZSB5b3UgbWlnaHQgcHJvY2VzcyB0aGUgZXJyb3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGluZ1J1bGVDb25kaXRpb24ge1xuLyoqXG4gKiBUaGUgb2JqZWN0IGtleSBuYW1lIHByZWZpeCB3aGVuIHRoZSByZWRpcmVjdCBpcyBhcHBsaWVkLiBGb3IgZXhhbXBsZSwgdG8gcmVkaXJlY3QgcmVxdWVzdHMgZm9yIGBgRXhhbXBsZVBhZ2UuaHRtbGBgLCB0aGUga2V5IHByZWZpeCB3aWxsIGJlIGBgRXhhbXBsZVBhZ2UuaHRtbGBgLiBUbyByZWRpcmVjdCByZXF1ZXN0IGZvciBhbGwgcGFnZXMgd2l0aCB0aGUgcHJlZml4IGBgZG9jcy9gYCwgdGhlIGtleSBwcmVmaXggd2lsbCBiZSBgYC9kb2NzYGAsIHdoaWNoIGlkZW50aWZpZXMgYWxsIG9iamVjdHMgaW4gdGhlIGRvY3MvIGZvbGRlci5cbiAqICBSZXF1aXJlZCB3aGVuIHRoZSBwYXJlbnQgZWxlbWVudCBgYENvbmRpdGlvbmBgIGlzIHNwZWNpZmllZCBhbmQgc2libGluZyBgYEh0dHBFcnJvckNvZGVSZXR1cm5lZEVxdWFsc2BgIGlzIG5vdCBzcGVjaWZpZWQuIElmIGJvdGggY29uZGl0aW9ucyBhcmUgc3BlY2lmaWVkLCBib3RoIG11c3QgYmUgdHJ1ZSBmb3IgdGhlIHJlZGlyZWN0IHRvIGJlIGFwcGxpZWQuXG4gKi9cbktleVByZWZpeEVxdWFscz86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSFRUUCBlcnJvciBjb2RlIHdoZW4gdGhlIHJlZGlyZWN0IGlzIGFwcGxpZWQuIEluIHRoZSBldmVudCBvZiBhbiBlcnJvciwgaWYgdGhlIGVycm9yIGNvZGUgZXF1YWxzIHRoaXMgdmFsdWUsIHRoZW4gdGhlIHNwZWNpZmllZCByZWRpcmVjdCBpcyBhcHBsaWVkLlxuICogIFJlcXVpcmVkIHdoZW4gcGFyZW50IGVsZW1lbnQgYGBDb25kaXRpb25gYCBpcyBzcGVjaWZpZWQgYW5kIHNpYmxpbmcgYGBLZXlQcmVmaXhFcXVhbHNgYCBpcyBub3Qgc3BlY2lmaWVkLiBJZiBib3RoIGFyZSBzcGVjaWZpZWQsIHRoZW4gYm90aCBtdXN0IGJlIHRydWUgZm9yIHRoZSByZWRpcmVjdCB0byBiZSBhcHBsaWVkLlxuICovXG5IdHRwRXJyb3JDb2RlUmV0dXJuZWRFcXVhbHM/OiBzdHJpbmdcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbnkgYW5hbHlzZXMgZm9yIHRoZSBhbmFseXRpY3MgZmlsdGVyIG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzQ29uZmlndXJhdGlvbiB7XG5TdG9yYWdlQ2xhc3NBbmFseXNpczogU3RvcmFnZUNsYXNzQW5hbHlzaXNcbi8qKlxuICogVGhlIHRhZ3MgdG8gdXNlIHdoZW4gZXZhbHVhdGluZyBhbiBhbmFseXRpY3MgZmlsdGVyLlxuICogIFRoZSBhbmFseXRpY3Mgb25seSBpbmNsdWRlcyBvYmplY3RzIHRoYXQgbWVldCB0aGUgZmlsdGVyJ3MgY3JpdGVyaWEuIElmIG5vIGZpbHRlciBpcyBzcGVjaWZpZWQsIGFsbCBvZiB0aGUgY29udGVudHMgb2YgdGhlIGJ1Y2tldCBhcmUgaW5jbHVkZWQgaW4gdGhlIGFuYWx5c2lzLlxuICovXG5UYWdGaWx0ZXJzPzogVGFnRmlsdGVyW11cbi8qKlxuICogVGhlIElEIHRoYXQgaWRlbnRpZmllcyB0aGUgYW5hbHl0aWNzIGNvbmZpZ3VyYXRpb24uXG4gKi9cbklkOiBzdHJpbmdcbi8qKlxuICogVGhlIHByZWZpeCB0aGF0IGFuIG9iamVjdCBtdXN0IGhhdmUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGFuYWx5dGljcyByZXN1bHRzLlxuICovXG5QcmVmaXg/OiBzdHJpbmdcbn1cbi8qKlxuICogQ29udGFpbnMgZGF0YSByZWxhdGVkIHRvIGFjY2VzcyBwYXR0ZXJucyB0byBiZSBjb2xsZWN0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHRvIGFuYWx5emUgdGhlIHRyYWRlb2ZmcyBiZXR3ZWVuIGRpZmZlcmVudCBzdG9yYWdlIGNsYXNzZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUNsYXNzQW5hbHlzaXMge1xuRGF0YUV4cG9ydD86IERhdGFFeHBvcnRcbn1cbi8qKlxuICogU3BlY2lmaWVzIGhvdyBkYXRhIHJlbGF0ZWQgdG8gdGhlIHN0b3JhZ2UgY2xhc3MgYW5hbHlzaXMgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQgc2hvdWxkIGJlIGV4cG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFFeHBvcnQge1xuRGVzdGluYXRpb246IERlc3RpbmF0aW9uMVxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgb3V0cHV0IHNjaGVtYSB0byB1c2Ugd2hlbiBleHBvcnRpbmcgZGF0YS4gTXVzdCBiZSBgYFZfMWBgLlxuICovXG5PdXRwdXRTY2hlbWFWZXJzaW9uOiBcIlZfMVwiXG59XG4vKipcbiAqIFRoZSBwbGFjZSB0byBzdG9yZSB0aGUgZGF0YSBmb3IgYW4gYW5hbHlzaXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdGluYXRpb24xIHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBidWNrZXQgdG8gd2hpY2ggZGF0YSBpcyBleHBvcnRlZC5cbiAqL1xuQnVja2V0QXJuOiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBmaWxlIGZvcm1hdCB1c2VkIHdoZW4gZXhwb3J0aW5nIGRhdGEgdG8gQW1hem9uIFMzLlxuICogICAqQWxsb3dlZCB2YWx1ZXMqOiBgYENTVmBgIHwgYGBPUkNgYCB8IGBgUGFycXVldGBgXG4gKi9cbkZvcm1hdDogKFwiQ1NWXCIgfCBcIk9SQ1wiIHwgXCJQYXJxdWV0XCIpXG4vKipcbiAqIFRoZSBhY2NvdW50IElEIHRoYXQgb3ducyB0aGUgZGVzdGluYXRpb24gUzMgYnVja2V0LiBJZiBubyBhY2NvdW50IElEIGlzIHByb3ZpZGVkLCB0aGUgb3duZXIgaXMgbm90IHZhbGlkYXRlZCBiZWZvcmUgZXhwb3J0aW5nIGRhdGEuXG4gKiAgICBBbHRob3VnaCB0aGlzIHZhbHVlIGlzIG9wdGlvbmFsLCB3ZSBzdHJvbmdseSByZWNvbW1lbmQgdGhhdCB5b3Ugc2V0IGl0IHRvIGhlbHAgcHJldmVudCBwcm9ibGVtcyBpZiB0aGUgZGVzdGluYXRpb24gYnVja2V0IG93bmVyc2hpcCBjaGFuZ2VzLlxuICovXG5CdWNrZXRBY2NvdW50SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHByZWZpeCB0byB1c2Ugd2hlbiBleHBvcnRpbmcgZGF0YS4gVGhlIHByZWZpeCBpcyBwcmVwZW5kZWQgdG8gYWxsIHJlc3VsdHMuXG4gKi9cblByZWZpeD86IHN0cmluZ1xufVxuLyoqXG4gKiBTcGVjaWZpZXMgdGFncyB0byB1c2UgdG8gaWRlbnRpZnkgYSBzdWJzZXQgb2Ygb2JqZWN0cyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdGaWx0ZXIge1xuLyoqXG4gKiBUaGUgdGFnIHZhbHVlLlxuICovXG5WYWx1ZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWcga2V5LlxuICovXG5LZXk6IHN0cmluZ1xufVxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSB0cmFuc2ZlciBhY2NlbGVyYXRpb24gc3RhdGUgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBTMyBUcmFuc2ZlciBBY2NlbGVyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3RyYW5zZmVyLWFjY2VsZXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2NlbGVyYXRlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgdHJhbnNmZXIgYWNjZWxlcmF0aW9uIHN0YXR1cyBvZiB0aGUgYnVja2V0LlxuICovXG5BY2NlbGVyYXRpb25TdGF0dXM6IChcIkVuYWJsZWRcIiB8IFwiU3VzcGVuZGVkXCIpXG59XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gdGhhdCBkZWZpbmVzIGhvdyBBbWF6b24gUzMgaGFuZGxlcyBwdWJsaWMgYWNjZXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIEFtYXpvbiBTMyBzaG91bGQgcmVzdHJpY3QgcHVibGljIGJ1Y2tldCBwb2xpY2llcyBmb3IgdGhpcyBidWNrZXQuIFNldHRpbmcgdGhpcyBlbGVtZW50IHRvIGBgVFJVRWBgIHJlc3RyaWN0cyBhY2Nlc3MgdG8gdGhpcyBidWNrZXQgdG8gb25seSBBV1Mtc2VydmljZSBwcmluY2lwYWxzIGFuZCBhdXRob3JpemVkIHVzZXJzIHdpdGhpbiB0aGlzIGFjY291bnQgaWYgdGhlIGJ1Y2tldCBoYXMgYSBwdWJsaWMgcG9saWN5LlxuICogIEVuYWJsaW5nIHRoaXMgc2V0dGluZyBkb2Vzbid0IGFmZmVjdCBwcmV2aW91c2x5IHN0b3JlZCBidWNrZXQgcG9saWNpZXMsIGV4Y2VwdCB0aGF0IHB1YmxpYyBhbmQgY3Jvc3MtYWNjb3VudCBhY2Nlc3Mgd2l0aGluIGFueSBwdWJsaWMgYnVja2V0IHBvbGljeSwgaW5jbHVkaW5nIG5vbi1wdWJsaWMgZGVsZWdhdGlvbiB0byBzcGVjaWZpYyBhY2NvdW50cywgaXMgYmxvY2tlZC5cbiAqL1xuUmVzdHJpY3RQdWJsaWNCdWNrZXRzPzogYm9vbGVhblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgc2hvdWxkIGJsb2NrIHB1YmxpYyBidWNrZXQgcG9saWNpZXMgZm9yIHRoaXMgYnVja2V0LiBTZXR0aW5nIHRoaXMgZWxlbWVudCB0byBgYFRSVUVgYCBjYXVzZXMgQW1hem9uIFMzIHRvIHJlamVjdCBjYWxscyB0byBQVVQgQnVja2V0IHBvbGljeSBpZiB0aGUgc3BlY2lmaWVkIGJ1Y2tldCBwb2xpY3kgYWxsb3dzIHB1YmxpYyBhY2Nlc3MuIFxuICogIEVuYWJsaW5nIHRoaXMgc2V0dGluZyBkb2Vzbid0IGFmZmVjdCBleGlzdGluZyBidWNrZXQgcG9saWNpZXMuXG4gKi9cbkJsb2NrUHVibGljUG9saWN5PzogYm9vbGVhblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgc2hvdWxkIGJsb2NrIHB1YmxpYyBhY2Nlc3MgY29udHJvbCBsaXN0cyAoQUNMcykgZm9yIHRoaXMgYnVja2V0IGFuZCBvYmplY3RzIGluIHRoaXMgYnVja2V0LiBTZXR0aW5nIHRoaXMgZWxlbWVudCB0byBgYFRSVUVgYCBjYXVzZXMgdGhlIGZvbGxvd2luZyBiZWhhdmlvcjpcbiAqICAgKyAgUFVUIEJ1Y2tldCBBQ0wgYW5kIFBVVCBPYmplY3QgQUNMIGNhbGxzIGZhaWwgaWYgdGhlIHNwZWNpZmllZCBBQ0wgaXMgcHVibGljLlxuICogICArICBQVVQgT2JqZWN0IGNhbGxzIGZhaWwgaWYgdGhlIHJlcXVlc3QgaW5jbHVkZXMgYSBwdWJsaWMgQUNMLlxuICogICArICBQVVQgQnVja2V0IGNhbGxzIGZhaWwgaWYgdGhlIHJlcXVlc3QgaW5jbHVkZXMgYSBwdWJsaWMgQUNMLlxuICogICBcbiAqICBFbmFibGluZyB0aGlzIHNldHRpbmcgZG9lc24ndCBhZmZlY3QgZXhpc3RpbmcgcG9saWNpZXMgb3IgQUNMcy5cbiAqL1xuQmxvY2tQdWJsaWNBY2xzPzogYm9vbGVhblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgc2hvdWxkIGlnbm9yZSBwdWJsaWMgQUNMcyBmb3IgdGhpcyBidWNrZXQgYW5kIG9iamVjdHMgaW4gdGhpcyBidWNrZXQuIFNldHRpbmcgdGhpcyBlbGVtZW50IHRvIGBgVFJVRWBgIGNhdXNlcyBBbWF6b24gUzMgdG8gaWdub3JlIGFsbCBwdWJsaWMgQUNMcyBvbiB0aGlzIGJ1Y2tldCBhbmQgb2JqZWN0cyBpbiB0aGlzIGJ1Y2tldC5cbiAqICBFbmFibGluZyB0aGlzIHNldHRpbmcgZG9lc24ndCBhZmZlY3QgdGhlIHBlcnNpc3RlbmNlIG9mIGFueSBleGlzdGluZyBBQ0xzIGFuZCBkb2Vzbid0IHByZXZlbnQgbmV3IHB1YmxpYyBBQ0xzIGZyb20gYmVpbmcgc2V0LlxuICovXG5JZ25vcmVQdWJsaWNBY2xzPzogYm9vbGVhblxufVxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHRoYXQgZGVmaW5lcyBob3cgQW1hem9uIFMzIGhhbmRsZXMgT2JqZWN0IE93bmVyc2hpcCBydWxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPd25lcnNoaXBDb250cm9scyB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgY29udGFpbmVyIGVsZW1lbnQgZm9yIE9iamVjdCBPd25lcnNoaXAgcnVsZXMuXG4gKi9cblJ1bGVzOiBPd25lcnNoaXBDb250cm9sc1J1bGVbXVxufVxuLyoqXG4gKiBTcGVjaWZpZXMgYW4gT2JqZWN0IE93bmVyc2hpcCBydWxlLlxuICogIFMzIE9iamVjdCBPd25lcnNoaXAgaXMgYW4gQW1hem9uIFMzIGJ1Y2tldC1sZXZlbCBzZXR0aW5nIHRoYXQgeW91IGNhbiB1c2UgdG8gZGlzYWJsZSBhY2Nlc3MgY29udHJvbCBsaXN0cyAoQUNMcykgYW5kIHRha2Ugb3duZXJzaGlwIG9mIGV2ZXJ5IG9iamVjdCBpbiB5b3VyIGJ1Y2tldCwgc2ltcGxpZnlpbmcgYWNjZXNzIG1hbmFnZW1lbnQgZm9yIGRhdGEgc3RvcmVkIGluIEFtYXpvbiBTMy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29udHJvbGxpbmcgb3duZXJzaGlwIG9mIG9iamVjdHMgYW5kIGRpc2FibGluZyBBQ0xzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9hYm91dC1vYmplY3Qtb3duZXJzaGlwLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE93bmVyc2hpcENvbnRyb2xzUnVsZSB7XG4vKipcbiAqIFNwZWNpZmllcyBhbiBvYmplY3Qgb3duZXJzaGlwIHJ1bGUuXG4gKi9cbk9iamVjdE93bmVyc2hpcD86IChcIk9iamVjdFdyaXRlclwiIHwgXCJCdWNrZXRPd25lclByZWZlcnJlZFwiIHwgXCJCdWNrZXRPd25lckVuZm9yY2VkXCIpXG59XG4vKipcbiAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGlyZWN0b3J5IGJ1Y2tldHMuXG4gKiAgIFBsYWNlcyBhbiBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uIG9uIHRoZSBzcGVjaWZpZWQgYnVja2V0LiBUaGUgcnVsZSBzcGVjaWZpZWQgaW4gdGhlIE9iamVjdCBMb2NrIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBhcHBsaWVkIGJ5IGRlZmF1bHQgdG8gZXZlcnkgbmV3IG9iamVjdCBwbGFjZWQgaW4gdGhlIHNwZWNpZmllZCBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0xvY2tpbmcgT2JqZWN0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvb2JqZWN0LWxvY2suaHRtbCkuIFxuICogICAgKyAgVGhlIGBgRGVmYXVsdFJldGVudGlvbmBgIHNldHRpbmdzIHJlcXVpcmUgYm90aCBhIG1vZGUgYW5kIGEgcGVyaW9kLlxuICogICArICBUaGUgYGBEZWZhdWx0UmV0ZW50aW9uYGAgcGVyaW9kIGNhbiBiZSBlaXRoZXIgYGBEYXlzYGAgb3IgYGBZZWFyc2BgIGJ1dCB5b3UgbXVzdCBzZWxlY3Qgb25lLiBZb3UgY2Fubm90IHNwZWNpZnkgYGBEYXlzYGAgYW5kIGBgWWVhcnNgYCBhdCB0aGUgc2FtZSB0aW1lLlxuICogICArICBZb3UgY2FuIGVuYWJsZSBPYmplY3QgTG9jayBmb3IgbmV3IG9yIGV4aXN0aW5nIGJ1Y2tldHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyaW5nIE9iamVjdCBMb2NrXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3QtbG9jay1jb25maWd1cmUuaHRtbCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGJ1Y2tldCBoYXMgYW4gT2JqZWN0IExvY2sgY29uZmlndXJhdGlvbiBlbmFibGVkLiBFbmFibGUgYGBPYmplY3RMb2NrRW5hYmxlZGBgIHdoZW4geW91IGFwcGx5IGBgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25gYCB0byBhIGJ1Y2tldC5cbiAqL1xuT2JqZWN0TG9ja0VuYWJsZWQ/OiBcIkVuYWJsZWRcIlxuUnVsZT86IE9iamVjdExvY2tSdWxlXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgT2JqZWN0IExvY2sgcnVsZSBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QuIEVuYWJsZSB0aGlzIHJ1bGUgd2hlbiB5b3UgYXBwbHkgYGBPYmplY3RMb2NrQ29uZmlndXJhdGlvbmBgIHRvIGEgYnVja2V0LiBJZiBPYmplY3QgTG9jayBpcyB0dXJuZWQgb24sIGJ1Y2tldCBzZXR0aW5ncyByZXF1aXJlIGJvdGggYGBNb2RlYGAgYW5kIGEgcGVyaW9kIG9mIGVpdGhlciBgYERheXNgYCBvciBgYFllYXJzYGAuIFlvdSBjYW5ub3Qgc3BlY2lmeSBgYERheXNgYCBhbmQgYGBZZWFyc2BgIGF0IHRoZSBzYW1lIHRpbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW09iamVjdExvY2tSdWxlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtb2JqZWN0bG9ja3J1bGUuaHRtbCkgYW5kIFtEZWZhdWx0UmV0ZW50aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtZGVmYXVsdHJldGVudGlvbi5odG1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYmplY3RMb2NrUnVsZSB7XG5EZWZhdWx0UmV0ZW50aW9uPzogRGVmYXVsdFJldGVudGlvblxufVxuLyoqXG4gKiBUaGUgZGVmYXVsdCBPYmplY3QgTG9jayByZXRlbnRpb24gbW9kZSBhbmQgcGVyaW9kIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gbmV3IG9iamVjdHMgcGxhY2VkIGluIHRoZSBzcGVjaWZpZWQgYnVja2V0LiBJZiBPYmplY3QgTG9jayBpcyB0dXJuZWQgb24sIGJ1Y2tldCBzZXR0aW5ncyByZXF1aXJlIGJvdGggYGBNb2RlYGAgYW5kIGEgcGVyaW9kIG9mIGVpdGhlciBgYERheXNgYCBvciBgYFllYXJzYGAuIFlvdSBjYW5ub3Qgc3BlY2lmeSBgYERheXNgYCBhbmQgYGBZZWFyc2BgIGF0IHRoZSBzYW1lIHRpbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFsbG93YWJsZSB2YWx1ZXMgZm9yIG1vZGUgYW5kIHBlcmlvZCwgc2VlIFtEZWZhdWx0UmV0ZW50aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtZGVmYXVsdHJldGVudGlvbi5odG1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0UmV0ZW50aW9uIHtcbi8qKlxuICogVGhlIG51bWJlciBvZiB5ZWFycyB0aGF0IHlvdSB3YW50IHRvIHNwZWNpZnkgZm9yIHRoZSBkZWZhdWx0IHJldGVudGlvbiBwZXJpb2QuIElmIE9iamVjdCBMb2NrIGlzIHR1cm5lZCBvbiwgeW91IG11c3Qgc3BlY2lmeSBgYE1vZGVgYCBhbmQgc3BlY2lmeSBlaXRoZXIgYGBEYXlzYGAgb3IgYGBZZWFyc2BgLlxuICovXG5ZZWFycz86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGRheXMgdGhhdCB5b3Ugd2FudCB0byBzcGVjaWZ5IGZvciB0aGUgZGVmYXVsdCByZXRlbnRpb24gcGVyaW9kLiBJZiBPYmplY3QgTG9jayBpcyB0dXJuZWQgb24sIHlvdSBtdXN0IHNwZWNpZnkgYGBNb2RlYGAgYW5kIHNwZWNpZnkgZWl0aGVyIGBgRGF5c2BgIG9yIGBgWWVhcnNgYC5cbiAqL1xuRGF5cz86IG51bWJlclxuLyoqXG4gKiBUaGUgZGVmYXVsdCBPYmplY3QgTG9jayByZXRlbnRpb24gbW9kZSB5b3Ugd2FudCB0byBhcHBseSB0byBuZXcgb2JqZWN0cyBwbGFjZWQgaW4gdGhlIHNwZWNpZmllZCBidWNrZXQuIElmIE9iamVjdCBMb2NrIGlzIHR1cm5lZCBvbiwgeW91IG11c3Qgc3BlY2lmeSBgYE1vZGVgYCBhbmQgc3BlY2lmeSBlaXRoZXIgYGBEYXlzYGAgb3IgYGBZZWFyc2BgLlxuICovXG5Nb2RlPzogKFwiQ09NUExJQU5DRVwiIHwgXCJHT1ZFUk5BTkNFXCIpXG59XG4vKipcbiAqIFNldHRpbmdzIHRoYXQgZGVmaW5lIHdoZXJlIGxvZ3MgYXJlIHN0b3JlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnaW5nQ29uZmlndXJhdGlvbiB7XG5UYXJnZXRPYmplY3RLZXlGb3JtYXQ/OiBUYXJnZXRPYmplY3RLZXlGb3JtYXRcbi8qKlxuICogQSBwcmVmaXggZm9yIGFsbCBsb2cgb2JqZWN0IGtleXMuIElmIHlvdSBzdG9yZSBsb2cgZmlsZXMgZnJvbSBtdWx0aXBsZSBBbWF6b24gUzMgYnVja2V0cyBpbiBhIHNpbmdsZSBidWNrZXQsIHlvdSBjYW4gdXNlIGEgcHJlZml4IHRvIGRpc3Rpbmd1aXNoIHdoaWNoIGxvZyBmaWxlcyBjYW1lIGZyb20gd2hpY2ggYnVja2V0LlxuICovXG5Mb2dGaWxlUHJlZml4Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBidWNrZXQgd2hlcmUgQW1hem9uIFMzIHNob3VsZCBzdG9yZSBzZXJ2ZXIgYWNjZXNzIGxvZyBmaWxlcy4gWW91IGNhbiBzdG9yZSBsb2cgZmlsZXMgaW4gYW55IGJ1Y2tldCB0aGF0IHlvdSBvd24uIEJ5IGRlZmF1bHQsIGxvZ3MgYXJlIHN0b3JlZCBpbiB0aGUgYnVja2V0IHdoZXJlIHRoZSBgYExvZ2dpbmdDb25maWd1cmF0aW9uYGAgcHJvcGVydHkgaXMgZGVmaW5lZC5cbiAqL1xuRGVzdGluYXRpb25CdWNrZXROYW1lPzogc3RyaW5nXG59XG4vKipcbiAqIEFtYXpvbiBTMyBrZXlzIGZvciBsb2cgb2JqZWN0cyBhcmUgcGFydGl0aW9uZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gKiAgIGBgW0Rlc3RpbmF0aW9uUHJlZml4XVtTb3VyY2VBY2NvdW50SWRdL1tTb3VyY2VSZWdpb25dL1tTb3VyY2VCdWNrZXRdL1tZWVlZXS9bTU1dL1tERF0vW1lZWVldLVtNTV0tW0REXS1baGhdLVttbV0tW3NzXS1bVW5pcXVlU3RyaW5nXWBgIFxuICogIFBhcnRpdGlvbmVkUHJlZml4IGRlZmF1bHRzIHRvIEV2ZW50VGltZSBkZWxpdmVyeSB3aGVuIHNlcnZlciBhY2Nlc3MgbG9ncyBhcmUgZGVsaXZlcmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbmVkUHJlZml4IHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwYXJ0aXRpb24gZGF0ZSBzb3VyY2UgZm9yIHRoZSBwYXJ0aXRpb25lZCBwcmVmaXguIGBgUGFydGl0aW9uRGF0ZVNvdXJjZWBgIGNhbiBiZSBgYEV2ZW50VGltZWBgIG9yIGBgRGVsaXZlcnlUaW1lYGAuXG4gKiAgRm9yIGBgRGVsaXZlcnlUaW1lYGAsIHRoZSB0aW1lIGluIHRoZSBsb2cgZmlsZSBuYW1lcyBjb3JyZXNwb25kcyB0byB0aGUgZGVsaXZlcnkgdGltZSBmb3IgdGhlIGxvZyBmaWxlcy4gXG4gKiAgIEZvciBgYEV2ZW50VGltZWBgLCBUaGUgbG9ncyBkZWxpdmVyZWQgYXJlIGZvciBhIHNwZWNpZmljIGRheSBvbmx5LiBUaGUgeWVhciwgbW9udGgsIGFuZCBkYXkgY29ycmVzcG9uZCB0byB0aGUgZGF5IG9uIHdoaWNoIHRoZSBldmVudCBvY2N1cnJlZCwgYW5kIHRoZSBob3VyLCBtaW51dGVzIGFuZCBzZWNvbmRzIGFyZSBzZXQgdG8gMDAgaW4gdGhlIGtleS5cbiAqL1xuUGFydGl0aW9uRGF0ZVNvdXJjZT86IChcIkV2ZW50VGltZVwiIHwgXCJEZWxpdmVyeVRpbWVcIilcbn1cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgcmVwbGljYXRpbmcgb2JqZWN0cyBpbiBhbiBTMyBidWNrZXQuIFRvIGVuYWJsZSByZXBsaWNhdGlvbiwgeW91IG11c3QgYWxzbyBlbmFibGUgdmVyc2lvbmluZyBieSB1c2luZyB0aGUgYGBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbmBgIHByb3BlcnR5LlxuICogIEFtYXpvbiBTMyBjYW4gc3RvcmUgcmVwbGljYXRlZCBvYmplY3RzIGluIGEgc2luZ2xlIGRlc3RpbmF0aW9uIGJ1Y2tldCBvciBtdWx0aXBsZSBkZXN0aW5hdGlvbiBidWNrZXRzLiBUaGUgZGVzdGluYXRpb24gYnVja2V0IG9yIGJ1Y2tldHMgbXVzdCBhbHJlYWR5IGV4aXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNbG9uZyAoSUFNKSByb2xlIHRoYXQgQW1hem9uIFMzIGFzc3VtZXMgd2hlbiByZXBsaWNhdGluZyBvYmplY3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtIb3cgdG8gU2V0IFVwIFJlcGxpY2F0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1ob3ctc2V0dXAuaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cblJvbGU6IHN0cmluZ1xuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igb25lIG9yIG1vcmUgcmVwbGljYXRpb24gcnVsZXMuIEEgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHJ1bGUgYW5kIGNhbiBjb250YWluIGEgbWF4aW11bSBvZiAxLDAwMCBydWxlcy5cbiAqL1xuUnVsZXM6IFJlcGxpY2F0aW9uUnVsZVtdXG59XG4vKipcbiAqIFNwZWNpZmllcyB3aGljaCBBbWF6b24gUzMgb2JqZWN0cyB0byByZXBsaWNhdGUgYW5kIHdoZXJlIHRvIHN0b3JlIHRoZSByZXBsaWNhcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhdGlvblJ1bGUge1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgcnVsZSBpcyBlbmFibGVkLlxuICovXG5TdGF0dXM6IChcIkRpc2FibGVkXCIgfCBcIkVuYWJsZWRcIilcbkRlc3RpbmF0aW9uOiBSZXBsaWNhdGlvbkRlc3RpbmF0aW9uXG5GaWx0ZXI/OiBSZXBsaWNhdGlvblJ1bGVGaWx0ZXJcbi8qKlxuICogVGhlIHByaW9yaXR5IGluZGljYXRlcyB3aGljaCBydWxlIGhhcyBwcmVjZWRlbmNlIHdoZW5ldmVyIHR3byBvciBtb3JlIHJlcGxpY2F0aW9uIHJ1bGVzIGNvbmZsaWN0LiBBbWF6b24gUzMgd2lsbCBhdHRlbXB0IHRvIHJlcGxpY2F0ZSBvYmplY3RzIGFjY29yZGluZyB0byBhbGwgcmVwbGljYXRpb24gcnVsZXMuIEhvd2V2ZXIsIGlmIHRoZXJlIGFyZSB0d28gb3IgbW9yZSBydWxlcyB3aXRoIHRoZSBzYW1lIGRlc3RpbmF0aW9uIGJ1Y2tldCwgdGhlbiBvYmplY3RzIHdpbGwgYmUgcmVwbGljYXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eS4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgaGlnaGVyIHRoZSBwcmlvcml0eS4gXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVwbGljYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3JlcGxpY2F0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5Qcmlvcml0eT86IG51bWJlclxuU291cmNlU2VsZWN0aW9uQ3JpdGVyaWE/OiBTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVxuLyoqXG4gKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZS4gVGhlIG1heGltdW0gdmFsdWUgaXMgMjU1IGNoYXJhY3RlcnMuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgdmFsdWUsIEFXUyBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZXMgYSByYW5kb20gSUQuIFdoZW4gdXNpbmcgYSBWMiByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIHRoaXMgcHJvcGVydHkgaXMgY2FwaXRhbGl6ZWQgYXMgXCJJRFwiLlxuICovXG5JZD86IHN0cmluZ1xuLyoqXG4gKiBBbiBvYmplY3Qga2V5IG5hbWUgcHJlZml4IHRoYXQgaWRlbnRpZmllcyB0aGUgb2JqZWN0IG9yIG9iamVjdHMgdG8gd2hpY2ggdGhlIHJ1bGUgYXBwbGllcy4gVGhlIG1heGltdW0gcHJlZml4IGxlbmd0aCBpcyAxLDAyNCBjaGFyYWN0ZXJzLiBUbyBpbmNsdWRlIGFsbCBvYmplY3RzIGluIGEgYnVja2V0LCBzcGVjaWZ5IGFuIGVtcHR5IHN0cmluZy4gVG8gZmlsdGVyIHVzaW5nIGEgVjEgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgYWRkIHRoZSBgYFByZWZpeGBgIGRpcmVjdGx5IGFzIGEgY2hpbGQgZWxlbWVudCBvZiB0aGUgYGBSdWxlYGAgZWxlbWVudC5cbiAqICAgUmVwbGFjZW1lbnQgbXVzdCBiZSBtYWRlIGZvciBvYmplY3Qga2V5cyBjb250YWluaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoc3VjaCBhcyBjYXJyaWFnZSByZXR1cm5zKSB3aGVuIHVzaW5nIFhNTCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbWE1MIHJlbGF0ZWQgb2JqZWN0IGtleSBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWtleXMuaHRtbCNvYmplY3Qta2V5LXhtbC1yZWxhdGVkLWNvbnN0cmFpbnRzKS5cbiAqL1xuUHJlZml4Pzogc3RyaW5nXG5EZWxldGVNYXJrZXJSZXBsaWNhdGlvbj86IERlbGV0ZU1hcmtlclJlcGxpY2F0aW9uXG59XG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVwbGljYXRpb24gZGVzdGluYXRpb24gYW5kIGl0cyBjb25maWd1cmF0aW9ucyBpbmNsdWRpbmcgZW5hYmxpbmcgdGhlIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhdGlvbkRlc3RpbmF0aW9uIHtcbkFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbj86IEFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvblxuLyoqXG4gKiBEZXN0aW5hdGlvbiBidWNrZXQgb3duZXIgYWNjb3VudCBJRC4gSW4gYSBjcm9zcy1hY2NvdW50IHNjZW5hcmlvLCBpZiB5b3UgZGlyZWN0IEFtYXpvbiBTMyB0byBjaGFuZ2UgcmVwbGljYSBvd25lcnNoaXAgdG8gdGhlIEFXUy1hY2NvdW50IHRoYXQgb3ducyB0aGUgZGVzdGluYXRpb24gYnVja2V0IGJ5IHNwZWNpZnlpbmcgdGhlIGBgQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uYGAgcHJvcGVydHksIHRoaXMgaXMgdGhlIGFjY291bnQgSUQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldCBvd25lci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3Jvc3MtUmVnaW9uIFJlcGxpY2F0aW9uIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbjogQ2hhbmdlIFJlcGxpY2EgT3duZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2Nyci1jaGFuZ2Utb3duZXIuaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uYGAgcHJvcGVydHksIHRoZSBgYEFjY291bnRgYCBwcm9wZXJ0eSBpcyByZXF1aXJlZC5cbiAqL1xuQWNjb3VudD86IHN0cmluZ1xuTWV0cmljcz86IE1ldHJpY3Ncbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBidWNrZXQgd2hlcmUgeW91IHdhbnQgQW1hem9uIFMzIHRvIHN0b3JlIHRoZSByZXN1bHRzLlxuICovXG5CdWNrZXQ6IHN0cmluZ1xuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24/OiBFbmNyeXB0aW9uQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgc3RvcmFnZSBjbGFzcyB0byB1c2Ugd2hlbiByZXBsaWNhdGluZyBvYmplY3RzLCBzdWNoIGFzIFMzIFN0YW5kYXJkIG9yIHJlZHVjZWQgcmVkdW5kYW5jeS4gQnkgZGVmYXVsdCwgQW1hem9uIFMzIHVzZXMgdGhlIHN0b3JhZ2UgY2xhc3Mgb2YgdGhlIHNvdXJjZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBvYmplY3QgcmVwbGljYS4gXG4gKiAgRm9yIHZhbGlkIHZhbHVlcywgc2VlIHRoZSBgYFN0b3JhZ2VDbGFzc2BgIGVsZW1lbnQgb2YgdGhlIFtQVVQgQnVja2V0IHJlcGxpY2F0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUcmVwbGljYXRpb24uaHRtbCkgYWN0aW9uIGluIHRoZSAqQW1hem9uIFMzIEFQSSBSZWZlcmVuY2UqLlxuICovXG5TdG9yYWdlQ2xhc3M/OiAoXCJERUVQX0FSQ0hJVkVcIiB8IFwiR0xBQ0lFUlwiIHwgXCJHTEFDSUVSX0lSXCIgfCBcIklOVEVMTElHRU5UX1RJRVJJTkdcIiB8IFwiT05FWk9ORV9JQVwiIHwgXCJSRURVQ0VEX1JFRFVOREFOQ1lcIiB8IFwiU1RBTkRBUkRcIiB8IFwiU1RBTkRBUkRfSUFcIilcblJlcGxpY2F0aW9uVGltZT86IFJlcGxpY2F0aW9uVGltZVxufVxuLyoqXG4gKiBTcGVjaWZ5IHRoaXMgb25seSBpbiBhIGNyb3NzLWFjY291bnQgc2NlbmFyaW8gKHdoZXJlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYnVja2V0IG93bmVycyBhcmUgbm90IHRoZSBzYW1lKSwgYW5kIHlvdSB3YW50IHRvIGNoYW5nZSByZXBsaWNhIG93bmVyc2hpcCB0byB0aGUgQVdTLWFjY291bnQgdGhhdCBvd25zIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgdGhlIHJlcGxpY2FzIGFyZSBvd25lZCBieSBzYW1lIEFXUy1hY2NvdW50IHRoYXQgb3ducyB0aGUgc291cmNlIG9iamVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NDb250cm9sVHJhbnNsYXRpb24ge1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHJlcGxpY2Egb3duZXJzaGlwLiBGb3IgZGVmYXVsdCBhbmQgdmFsaWQgdmFsdWVzLCBzZWUgW1BVVCBidWNrZXQgcmVwbGljYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL1JFU1RCdWNrZXRQVVRyZXBsaWNhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuT3duZXI6IFwiRGVzdGluYXRpb25cIlxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIHJlcGxpY2F0aW9uIG1ldHJpY3MtcmVsYXRlZCBzZXR0aW5ncyBlbmFibGluZyByZXBsaWNhdGlvbiBtZXRyaWNzIGFuZCBldmVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljcyB7XG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSByZXBsaWNhdGlvbiBtZXRyaWNzIGFyZSBlbmFibGVkLlxuICovXG5TdGF0dXM6IChcIkRpc2FibGVkXCIgfCBcIkVuYWJsZWRcIilcbkV2ZW50VGhyZXNob2xkPzogUmVwbGljYXRpb25UaW1lVmFsdWVcbn1cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyB0aGUgdGltZSB0aHJlc2hvbGQgZm9yIGVtaXR0aW5nIHRoZSBgYHMzOlJlcGxpY2F0aW9uOk9wZXJhdGlvbk1pc3NlZFRocmVzaG9sZGBgIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2F0aW9uVGltZVZhbHVlIHtcbi8qKlxuICogQ29udGFpbnMgYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRpbWUgaW4gbWludXRlcy4gXG4gKiAgIFZhbGlkIHZhbHVlOiAxNVxuICovXG5NaW51dGVzOiBudW1iZXJcbn1cbi8qKlxuICogU3BlY2lmaWVzIGVuY3J5cHRpb24tcmVsYXRlZCBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgSUQgKEtleSBBUk4gb3IgQWxpYXMgQVJOKSBvZiB0aGUgY3VzdG9tZXIgbWFuYWdlZCBBV1MgS01TIGtleSBzdG9yZWQgaW4gQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykgZm9yIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQuIEFtYXpvbiBTMyB1c2VzIHRoaXMga2V5IHRvIGVuY3J5cHQgcmVwbGljYSBvYmplY3RzLiBBbWF6b24gUzMgb25seSBzdXBwb3J0cyBzeW1tZXRyaWMgZW5jcnlwdGlvbiBLTVMga2V5cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQXN5bW1ldHJpYyBrZXlzIGluIEtNU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tLy9rbXMvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3N5bW1ldHJpYy1hc3ltbWV0cmljLmh0bWwpIGluIHRoZSAqS2V5IE1hbmFnZW1lbnQgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZXBsaWNhS21zS2V5SUQ6IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSwgaW5jbHVkaW5nIHdoZXRoZXIgUzMgUlRDIGlzIGVuYWJsZWQgYW5kIHRoZSB0aW1lIHdoZW4gYWxsIG9iamVjdHMgYW5kIG9wZXJhdGlvbnMgb24gb2JqZWN0cyBtdXN0IGJlIHJlcGxpY2F0ZWQuIE11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggYSBgYE1ldHJpY3NgYCBibG9jay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhdGlvblRpbWUge1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgcmVwbGljYXRpb24gdGltZSBpcyBlbmFibGVkLlxuICovXG5TdGF0dXM6IChcIkRpc2FibGVkXCIgfCBcIkVuYWJsZWRcIilcblRpbWU6IFJlcGxpY2F0aW9uVGltZVZhbHVlMVxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIHRoZSB0aW1lIGJ5IHdoaWNoIHJlcGxpY2F0aW9uIHNob3VsZCBiZSBjb21wbGV0ZSBmb3IgYWxsIG9iamVjdHMgYW5kIG9wZXJhdGlvbnMgb24gb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhdGlvblRpbWVWYWx1ZTEge1xuLyoqXG4gKiBDb250YWlucyBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGltZSBpbiBtaW51dGVzLiBcbiAqICAgVmFsaWQgdmFsdWU6IDE1XG4gKi9cbk1pbnV0ZXM6IG51bWJlclxufVxuLyoqXG4gKiBBIGZpbHRlciB0aGF0IGlkZW50aWZpZXMgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSByZXBsaWNhdGlvbiBydWxlIGFwcGxpZXMuIEEgYGBGaWx0ZXJgYCBtdXN0IHNwZWNpZnkgZXhhY3RseSBvbmUgYGBQcmVmaXhgYCwgYGBUYWdGaWx0ZXJgYCwgb3IgYW4gYGBBbmRgYCBjaGlsZCBlbGVtZW50LiBUaGUgdXNlIG9mIHRoZSBmaWx0ZXIgZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhIFYyIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIFRoaXMgZmllbGQgaXNuJ3Qgc3VwcG9ydGVkIGluIGEgVjEgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqICAgVjEgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiBvbmx5IHN1cHBvcnRzIGZpbHRlcmluZyBieSBrZXkgcHJlZml4LiBUbyBmaWx0ZXIgdXNpbmcgYSBWMSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uLCBhZGQgdGhlIGBgUHJlZml4YGAgZGlyZWN0bHkgYXMgYSBjaGlsZCBlbGVtZW50IG9mIHRoZSBgYFJ1bGVgYCBlbGVtZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2F0aW9uUnVsZUZpbHRlciB7XG5BbmQ/OiBSZXBsaWNhdGlvblJ1bGVBbmRPcGVyYXRvclxuVGFnRmlsdGVyPzogVGFnRmlsdGVyMVxuLyoqXG4gKiBBbiBvYmplY3Qga2V5IG5hbWUgcHJlZml4IHRoYXQgaWRlbnRpZmllcyB0aGUgc3Vic2V0IG9mIG9iamVjdHMgdG8gd2hpY2ggdGhlIHJ1bGUgYXBwbGllcy5cbiAqICAgUmVwbGFjZW1lbnQgbXVzdCBiZSBtYWRlIGZvciBvYmplY3Qga2V5cyBjb250YWluaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoc3VjaCBhcyBjYXJyaWFnZSByZXR1cm5zKSB3aGVuIHVzaW5nIFhNTCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbWE1MIHJlbGF0ZWQgb2JqZWN0IGtleSBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWtleXMuaHRtbCNvYmplY3Qta2V5LXhtbC1yZWxhdGVkLWNvbnN0cmFpbnRzKS5cbiAqL1xuUHJlZml4Pzogc3RyaW5nXG59XG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHJ1bGUgZmlsdGVycy4gVGhlIGZpbHRlcnMgZGV0ZXJtaW5lIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLiBUaGlzIGVsZW1lbnQgaXMgcmVxdWlyZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBtb3JlIHRoYW4gb25lIGZpbHRlci4gRm9yIGV4YW1wbGU6IFxuICogICArICBJZiB5b3Ugc3BlY2lmeSBib3RoIGEgYGBQcmVmaXhgYCBhbmQgYSBgYFRhZ0ZpbHRlcmBgLCB3cmFwIHRoZXNlIGZpbHRlcnMgaW4gYW4gYGBBbmRgYCB0YWcuXG4gKiAgICsgIElmIHlvdSBzcGVjaWZ5IGEgZmlsdGVyIGJhc2VkIG9uIG11bHRpcGxlIHRhZ3MsIHdyYXAgdGhlIGBgVGFnRmlsdGVyYGAgZWxlbWVudHMgaW4gYW4gYGBBbmRgYCB0YWcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGljYXRpb25SdWxlQW5kT3BlcmF0b3Ige1xuLyoqXG4gKiBBbiBhcnJheSBvZiB0YWdzIGNvbnRhaW5pbmcga2V5IGFuZCB2YWx1ZSBwYWlycy5cbiAqL1xuVGFnRmlsdGVycz86IFRhZ0ZpbHRlcltdXG4vKipcbiAqIEFuIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggdGhhdCBpZGVudGlmaWVzIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLlxuICovXG5QcmVmaXg/OiBzdHJpbmdcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRhZ3MgdG8gdXNlIHRvIGlkZW50aWZ5IGEgc3Vic2V0IG9mIG9iamVjdHMgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnRmlsdGVyMSB7XG4vKipcbiAqIFRoZSB0YWcgdmFsdWUuXG4gKi9cblZhbHVlOiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZyBrZXkuXG4gKi9cbktleTogc3RyaW5nXG59XG4vKipcbiAqIEEgY29udGFpbmVyIHRoYXQgZGVzY3JpYmVzIGFkZGl0aW9uYWwgZmlsdGVycyBmb3IgaWRlbnRpZnlpbmcgdGhlIHNvdXJjZSBvYmplY3RzIHRoYXQgeW91IHdhbnQgdG8gcmVwbGljYXRlLiBZb3UgY2FuIGNob29zZSB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcmVwbGljYXRpb24gb2YgdGhlc2Ugb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYSB7XG5SZXBsaWNhTW9kaWZpY2F0aW9ucz86IFJlcGxpY2FNb2RpZmljYXRpb25zXG5Tc2VLbXNFbmNyeXB0ZWRPYmplY3RzPzogU3NlS21zRW5jcnlwdGVkT2JqZWN0c1xufVxuLyoqXG4gKiBBIGZpbHRlciB0aGF0IHlvdSBjYW4gc3BlY2lmeSBmb3Igc2VsZWN0aW9uIGZvciBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2FNb2RpZmljYXRpb25zIHtcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHJlcGxpY2F0ZXMgbW9kaWZpY2F0aW9ucyBvbiByZXBsaWNhcy5cbiAqICAgKkFsbG93ZWQgdmFsdWVzKjogYGBFbmFibGVkYGAgfCBgYERpc2FibGVkYGBcbiAqL1xuU3RhdHVzOiAoXCJFbmFibGVkXCIgfCBcIkRpc2FibGVkXCIpXG59XG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBmaWx0ZXIgaW5mb3JtYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gb2YgQW1hem9uIFMzIG9iamVjdHMgZW5jcnlwdGVkIHdpdGggQVdTIEtNUy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTc2VLbXNFbmNyeXB0ZWRPYmplY3RzIHtcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHJlcGxpY2F0ZXMgb2JqZWN0cyBjcmVhdGVkIHdpdGggc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB1c2luZyBhbiBBV1MgS01TIGtleSBzdG9yZWQgaW4gQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UuXG4gKi9cblN0YXR1czogKFwiRGlzYWJsZWRcIiB8IFwiRW5hYmxlZFwiKVxufVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgcmVwbGljYXRlcyBkZWxldGUgbWFya2Vycy4gSWYgeW91IHNwZWNpZnkgYSBgYEZpbHRlcmBgIGluIHlvdXIgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgeW91IG11c3QgYWxzbyBpbmNsdWRlIGEgYGBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbmBgIGVsZW1lbnQuIElmIHlvdXIgYGBGaWx0ZXJgYCBpbmNsdWRlcyBhIGBgVGFnYGAgZWxlbWVudCwgdGhlIGBgRGVsZXRlTWFya2VyUmVwbGljYXRpb25gYCBgYFN0YXR1c2BgIG11c3QgYmUgc2V0IHRvIERpc2FibGVkLCBiZWNhdXNlIEFtYXpvbiBTMyBkb2VzIG5vdCBzdXBwb3J0IHJlcGxpY2F0aW5nIGRlbGV0ZSBtYXJrZXJzIGZvciB0YWctYmFzZWQgcnVsZXMuIEZvciBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24sIHNlZSBbQmFzaWMgUnVsZSBDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tY29uZmlnLW1pbi1ydWxlLWNvbmZpZykuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlbGV0ZSBtYXJrZXIgcmVwbGljYXRpb24sIHNlZSBbQmFzaWMgUnVsZSBDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9kZWxldGUtbWFya2VyLXJlcGxpY2F0aW9uLmh0bWwpLiBcbiAqICAgSWYgeW91IGFyZSB1c2luZyBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24sIEFtYXpvbiBTMyBoYW5kbGVzIHJlcGxpY2F0aW9uIG9mIGRlbGV0ZSBtYXJrZXJzIGRpZmZlcmVudGx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCYWNrd2FyZCBDb21wYXRpYmlsaXR5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tYmFja3dhcmQtY29tcGF0LWNvbnNpZGVyYXRpb25zKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbiB7XG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHJlcGxpY2F0ZSBkZWxldGUgbWFya2Vycy4gRGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAqL1xuU3RhdHVzPzogKFwiRGlzYWJsZWRcIiB8IFwiRW5hYmxlZFwiKVxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVmFsdWUgb2YgdGhlIHRhZy5cbiAqL1xuVmFsdWU6IHN0cmluZ1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBvYmplY3Qga2V5LlxuICovXG5LZXk6IHN0cmluZ1xufVxuLyoqXG4gKiBTcGVjaWZpZXMgZGVmYXVsdCBlbmNyeXB0aW9uIGZvciBhIGJ1Y2tldCB1c2luZyBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHdpdGggQW1hem9uIFMzLW1hbmFnZWQga2V5cyAoU1NFLVMzKSwgQVdTIEtNUy1tYW5hZ2VkIGtleXMgKFNTRS1LTVMpLCBvciBkdWFsLWxheWVyIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBLTVMtbWFuYWdlZCBrZXlzIChEU1NFLUtNUykuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQW1hem9uIFMzIGRlZmF1bHQgZW5jcnlwdGlvbiBmZWF0dXJlLCBzZWUgW0FtYXpvbiBTMyBEZWZhdWx0IEVuY3J5cHRpb24gZm9yIFMzIEJ1Y2tldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2J1Y2tldC1lbmNyeXB0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldEVuY3J5cHRpb24ge1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgc2VydmVyLXNpZGUtZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uLlxuICovXG5TZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IFNlcnZlclNpZGVFbmNyeXB0aW9uUnVsZVtdXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgZGVmYXVsdCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiAgIElmIHlvdSdyZSBzcGVjaWZ5aW5nIGEgY3VzdG9tZXIgbWFuYWdlZCBLTVMga2V5LCB3ZSByZWNvbW1lbmQgdXNpbmcgYSBmdWxseSBxdWFsaWZpZWQgS01TIGtleSBBUk4uIElmIHlvdSB1c2UgYSBLTVMga2V5IGFsaWFzIGluc3RlYWQsIHRoZW4gS01TIHJlc29sdmVzIHRoZSBrZXkgd2l0aGluIHRoZSByZXF1ZXN0ZXLigJlzIGFjY291bnQuIFRoaXMgYmVoYXZpb3IgY2FuIHJlc3VsdCBpbiBkYXRhIHRoYXQncyBlbmNyeXB0ZWQgd2l0aCBhIEtNUyBrZXkgdGhhdCBiZWxvbmdzIHRvIHRoZSByZXF1ZXN0ZXIsIGFuZCBub3QgdGhlIGJ1Y2tldCBvd25lci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJTaWRlRW5jcnlwdGlvblJ1bGUge1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgc2hvdWxkIHVzZSBhbiBTMyBCdWNrZXQgS2V5IHdpdGggc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB1c2luZyBLTVMgKFNTRS1LTVMpIGZvciBuZXcgb2JqZWN0cyBpbiB0aGUgYnVja2V0LiBFeGlzdGluZyBvYmplY3RzIGFyZSBub3QgYWZmZWN0ZWQuIFNldHRpbmcgdGhlIGBgQnVja2V0S2V5RW5hYmxlZGBgIGVsZW1lbnQgdG8gYGB0cnVlYGAgY2F1c2VzIEFtYXpvbiBTMyB0byB1c2UgYW4gUzMgQnVja2V0IEtleS4gQnkgZGVmYXVsdCwgUzMgQnVja2V0IEtleSBpcyBub3QgZW5hYmxlZC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gUzMgQnVja2V0IEtleXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2J1Y2tldC1rZXkuaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbkJ1Y2tldEtleUVuYWJsZWQ/OiBib29sZWFuXG5TZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdD86IFNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0XG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgZGVmYXVsdCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHRvIGFwcGx5IHRvIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuIElmIGEgUFVUIE9iamVjdCByZXF1ZXN0IGRvZXNuJ3Qgc3BlY2lmeSBhbnkgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiwgdGhpcyBkZWZhdWx0IGVuY3J5cHRpb24gd2lsbCBiZSBhcHBsaWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0IHtcbi8qKlxuICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiBhbGdvcml0aG0gdG8gdXNlIGZvciB0aGUgZGVmYXVsdCBlbmNyeXB0aW9uLlxuICovXG5TU0VBbGdvcml0aG06IChcImF3czprbXNcIiB8IFwiQUVTMjU2XCIgfCBcImF3czprbXM6ZHNzZVwiKVxuLyoqXG4gKiBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBjdXN0b21lciBBV1MgS01TIGtleSBJRCB0byB1c2UgZm9yIHRoZSBkZWZhdWx0IGVuY3J5cHRpb24uIFRoaXMgcGFyYW1ldGVyIGlzIGFsbG93ZWQgaWYgYW5kIG9ubHkgaWYgYGBTU0VBbGdvcml0aG1gYCBpcyBzZXQgdG8gYGBhd3M6a21zYGAgb3IgYGBhd3M6a21zOmRzc2VgYC5cbiAqICBZb3UgY2FuIHNwZWNpZnkgdGhlIGtleSBJRCwga2V5IGFsaWFzLCBvciB0aGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEtNUyBrZXkuXG4gKiAgICsgIEtleSBJRDogYGAxMjM0YWJjZC0xMmFiLTM0Y2QtNTZlZi0xMjM0NTY3ODkwYWJgYCBcbiAqICAgKyAgS2V5IEFSTjogYGBhcm46YXdzOmttczp1cy1lYXN0LTI6MTExMTIyMjIzMzMzOmtleS8xMjM0YWJjZC0xMmFiLTM0Y2QtNTZlZi0xMjM0NTY3ODkwYWJgYCBcbiAqICAgKyAgS2V5IEFsaWFzOiBgYGFsaWFzL2FsaWFzLW5hbWVgYCBcbiAqICAgXG4gKiAgSWYgeW91IHVzZSBhIGtleSBJRCwgeW91IGNhbiBydW4gaW50byBhIExvZ0Rlc3RpbmF0aW9uIHVuZGVsaXZlcmFibGUgZXJyb3Igd2hlbiBjcmVhdGluZyBhIFZQQyBmbG93IGxvZy4gXG4gKiAgSWYgeW91IGFyZSB1c2luZyBlbmNyeXB0aW9uIHdpdGggY3Jvc3MtYWNjb3VudCBvciBBV1Mgc2VydmljZSBvcGVyYXRpb25zIHlvdSBtdXN0IHVzZSBhIGZ1bGx5IHF1YWxpZmllZCBLTVMga2V5IEFSTi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgZW5jcnlwdGlvbiBmb3IgY3Jvc3MtYWNjb3VudCBvcGVyYXRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9idWNrZXQtZW5jcnlwdGlvbi5odG1sI2J1Y2tldC1lbmNyeXB0aW9uLXVwZGF0ZS1idWNrZXQtcG9saWN5KS5cbiAqICAgQW1hem9uIFMzIG9ubHkgc3VwcG9ydHMgc3ltbWV0cmljIGVuY3J5cHRpb24gS01TIGtleXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FzeW1tZXRyaWMga2V5cyBpbiBLTVNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS8va21zL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zeW1tZXRyaWMtYXN5bW1ldHJpYy5odG1sKSBpbiB0aGUgKktleSBNYW5hZ2VtZW50IFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuS01TTWFzdGVyS2V5SUQ/OiBzdHJpbmdcbn1cbi8qKlxuICogQ29uZmlndXJhdGlvbiB0aGF0IGRlZmluZXMgaG93IEFtYXpvbiBTMyBoYW5kbGVzIGJ1Y2tldCBub3RpZmljYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgdG9waWMgdG8gd2hpY2ggbm90aWZpY2F0aW9ucyBhcmUgc2VudCBhbmQgdGhlIGV2ZW50cyBmb3Igd2hpY2ggbm90aWZpY2F0aW9ucyBhcmUgZ2VuZXJhdGVkLlxuICovXG5Ub3BpY0NvbmZpZ3VyYXRpb25zPzogVG9waWNDb25maWd1cmF0aW9uW11cbi8qKlxuICogVGhlIEFtYXpvbiBTaW1wbGUgUXVldWUgU2VydmljZSBxdWV1ZXMgdG8gcHVibGlzaCBtZXNzYWdlcyB0byBhbmQgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdG8gcHVibGlzaCBtZXNzYWdlcy5cbiAqL1xuUXVldWVDb25maWd1cmF0aW9ucz86IFF1ZXVlQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgTEFNbG9uZyBmdW5jdGlvbnMgdG8gaW52b2tlIGFuZCB0aGUgZXZlbnRzIGZvciB3aGljaCB0byBpbnZva2UgdGhlbS5cbiAqL1xuTGFtYmRhQ29uZmlndXJhdGlvbnM/OiBMYW1iZGFDb25maWd1cmF0aW9uW11cbkV2ZW50QnJpZGdlQ29uZmlndXJhdGlvbj86IEV2ZW50QnJpZGdlQ29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgY29uZmlndXJhdGlvbiBmb3IgcHVibGljYXRpb24gb2YgbWVzc2FnZXMgdG8gYW4gQW1hem9uIFNpbXBsZSBOb3RpZmljYXRpb24gU2VydmljZSAoQW1hem9uIFNOUykgdG9waWMgd2hlbiBBbWF6b24gUzMgZGV0ZWN0cyBzcGVjaWZpZWQgZXZlbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcGljQ29uZmlndXJhdGlvbiB7XG5GaWx0ZXI/OiBOb3RpZmljYXRpb25GaWx0ZXJcbi8qKlxuICogVGhlIEFtYXpvbiBTMyBidWNrZXQgZXZlbnQgYWJvdXQgd2hpY2ggdG8gc2VuZCBub3RpZmljYXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTdXBwb3J0ZWQgRXZlbnQgVHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5FdmVudDogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQW1hem9uIFNOUyB0b3BpYyB0byB3aGljaCBBbWF6b24gUzMgcHVibGlzaGVzIGEgbWVzc2FnZSB3aGVuIGl0IGRldGVjdHMgZXZlbnRzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAqL1xuVG9waWM6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZmlsdGVyaW5nIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lIGZvciB3aGljaCBvYmplY3RzIHRvIHNlbmQgbm90aWZpY2F0aW9ucy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY3JlYXRlIGEgZmlsdGVyIHNvIHRoYXQgQW1hem9uIFMzIHNlbmRzIG5vdGlmaWNhdGlvbnMgb25seSB3aGVuIGltYWdlIGZpbGVzIHdpdGggYSBgYC5qcGdgYCBleHRlbnNpb24gYXJlIGFkZGVkIHRvIHRoZSBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uRmlsdGVyIHtcblMzS2V5OiBTM0tleUZpbHRlclxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igb2JqZWN0IGtleSBuYW1lIHByZWZpeCBhbmQgc3VmZml4IGZpbHRlcmluZyBydWxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0tleUZpbHRlciB7XG4vKipcbiAqIEEgbGlzdCBvZiBjb250YWluZXJzIGZvciB0aGUga2V5LXZhbHVlIHBhaXIgdGhhdCBkZWZpbmVzIHRoZSBjcml0ZXJpYSBmb3IgdGhlIGZpbHRlciBydWxlLlxuICovXG5SdWxlczogRmlsdGVyUnVsZVtdXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgQW1hem9uIFMzIG9iamVjdCBrZXkgbmFtZSB0byBmaWx0ZXIgb24uIEFuIG9iamVjdCBrZXkgbmFtZSBpcyB0aGUgbmFtZSBhc3NpZ25lZCB0byBhbiBvYmplY3QgaW4geW91ciBBbWF6b24gUzMgYnVja2V0LiBZb3Ugc3BlY2lmeSB3aGV0aGVyIHRvIGZpbHRlciBvbiB0aGUgc3VmZml4IG9yIHByZWZpeCBvZiB0aGUgb2JqZWN0IGtleSBuYW1lLiBBIHByZWZpeCBpcyBhIHNwZWNpZmljIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gb2JqZWN0IGtleSBuYW1lLCB3aGljaCB5b3UgY2FuIHVzZSB0byBvcmdhbml6ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBzdGFydCB0aGUga2V5IG5hbWVzIG9mIHJlbGF0ZWQgb2JqZWN0cyB3aXRoIGEgcHJlZml4LCBzdWNoIGFzIGBgMjAyMy1gYCBvciBgYGVuZ2luZWVyaW5nL2BgLiBUaGVuLCB5b3UgY2FuIHVzZSBgYEZpbHRlclJ1bGVgYCB0byBmaW5kIG9iamVjdHMgaW4gYSBidWNrZXQgd2l0aCBrZXkgbmFtZXMgdGhhdCBoYXZlIHRoZSBzYW1lIHByZWZpeC4gQSBzdWZmaXggaXMgc2ltaWxhciB0byBhIHByZWZpeCwgYnV0IGl0IGlzIGF0IHRoZSBlbmQgb2YgdGhlIG9iamVjdCBrZXkgbmFtZSBpbnN0ZWFkIG9mIGF0IHRoZSBiZWdpbm5pbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUnVsZSB7XG4vKipcbiAqIFRoZSB2YWx1ZSB0aGF0IHRoZSBmaWx0ZXIgc2VhcmNoZXMgZm9yIGluIG9iamVjdCBrZXkgbmFtZXMuXG4gKi9cblZhbHVlOiBzdHJpbmdcbi8qKlxuICogVGhlIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggb3Igc3VmZml4IGlkZW50aWZ5aW5nIG9uZSBvciBtb3JlIG9iamVjdHMgdG8gd2hpY2ggdGhlIGZpbHRlcmluZyBydWxlIGFwcGxpZXMuIFRoZSBtYXhpbXVtIGxlbmd0aCBpcyAxLDAyNCBjaGFyYWN0ZXJzLiBPdmVybGFwcGluZyBwcmVmaXhlcyBhbmQgc3VmZml4ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBwdWJsaXNoaW5nIG1lc3NhZ2VzIHRvIGFuIEFtYXpvbiBTaW1wbGUgUXVldWUgU2VydmljZSAoQW1hem9uIFNRUykgcXVldWUgd2hlbiBBbWF6b24gUzMgZGV0ZWN0cyBzcGVjaWZpZWQgZXZlbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlQ29uZmlndXJhdGlvbiB7XG5GaWx0ZXI/OiBOb3RpZmljYXRpb25GaWx0ZXIxXG4vKipcbiAqIFRoZSBBbWF6b24gUzMgYnVja2V0IGV2ZW50IGFib3V0IHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggbWVzc2FnZXMgdG8gQW1hem9uIFNRUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3VwcG9ydGVkIEV2ZW50IFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuRXZlbnQ6IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEFtYXpvbiBTUVMgcXVldWUgdG8gd2hpY2ggQW1hem9uIFMzIHB1Ymxpc2hlcyBhIG1lc3NhZ2Ugd2hlbiBpdCBkZXRlY3RzIGV2ZW50cyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuIEZJRk8gcXVldWVzIGFyZSBub3QgYWxsb3dlZCB3aGVuIGVuYWJsaW5nIGFuIFNRUyBxdWV1ZSBhcyB0aGUgZXZlbnQgbm90aWZpY2F0aW9uIGRlc3RpbmF0aW9uLlxuICovXG5RdWV1ZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBmaWx0ZXJpbmcgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggb2JqZWN0cyB0cmlnZ2VyIG5vdGlmaWNhdGlvbnMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGNyZWF0ZSBhIGZpbHRlciBzbyB0aGF0IEFtYXpvbiBTMyBzZW5kcyBub3RpZmljYXRpb25zIG9ubHkgd2hlbiBpbWFnZSBmaWxlcyB3aXRoIGEgYGAuanBnYGAgZXh0ZW5zaW9uIGFyZSBhZGRlZCB0byB0aGUgYnVja2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDb25maWd1cmluZyBldmVudCBub3RpZmljYXRpb25zIHVzaW5nIG9iamVjdCBrZXkgbmFtZSBmaWx0ZXJpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlci1ndWlkZS9ub3RpZmljYXRpb24taG93LXRvLWZpbHRlcmluZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25GaWx0ZXIxIHtcblMzS2V5OiBTM0tleUZpbHRlclxufVxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIExBTWxvbmcgZnVuY3Rpb25zIHRvIGludm9rZSBhbmQgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdG8gaW52b2tlIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgTEFNbG9uZyBmdW5jdGlvbiB0aGF0IEFtYXpvbiBTMyBpbnZva2VzIHdoZW4gdGhlIHNwZWNpZmllZCBldmVudCB0eXBlIG9jY3Vycy5cbiAqL1xuRnVuY3Rpb246IHN0cmluZ1xuRmlsdGVyPzogTm90aWZpY2F0aW9uRmlsdGVyMlxuLyoqXG4gKiBUaGUgQW1hem9uIFMzIGJ1Y2tldCBldmVudCBmb3Igd2hpY2ggdG8gaW52b2tlIHRoZSBMQU1sb25nIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTdXBwb3J0ZWQgRXZlbnQgVHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5FdmVudDogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBmaWx0ZXJpbmcgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggb2JqZWN0cyBpbnZva2UgdGhlIEFXUyBMYW1iZGEgZnVuY3Rpb24uIEZvciBleGFtcGxlLCB5b3UgY2FuIGNyZWF0ZSBhIGZpbHRlciBzbyB0aGF0IG9ubHkgaW1hZ2UgZmlsZXMgd2l0aCBhIGBgLmpwZ2BgIGV4dGVuc2lvbiBpbnZva2UgdGhlIGZ1bmN0aW9uIHdoZW4gdGhleSBhcmUgYWRkZWQgdG8gdGhlIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uRmlsdGVyMiB7XG5TM0tleTogUzNLZXlGaWx0ZXJcbn1cbi8qKlxuICogRW5hYmxlcyBkZWxpdmVyeSBvZiBldmVudHMgdG8gQW1hem9uIEV2ZW50QnJpZGdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50QnJpZGdlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIEVuYWJsZXMgZGVsaXZlcnkgb2YgZXZlbnRzIHRvIEFtYXpvbiBFdmVudEJyaWRnZS5cbiAqL1xuRXZlbnRCcmlkZ2VFbmFibGVkOiAoYm9vbGVhbiAmIHN0cmluZylcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvbiBmb3Igb2JqZWN0cyBpbiBhbiBBbWF6b24gUzMgYnVja2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtPYmplY3QgTGlmZWN5Y2xlIE1hbmFnZW1lbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L29iamVjdC1saWZlY3ljbGUtbWdtdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogQSBsaWZlY3ljbGUgcnVsZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cblJ1bGVzOiBSdWxlW11cbn1cbi8qKlxuICogU3BlY2lmaWVzIGxpZmVjeWNsZSBydWxlcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUHV0IEJ1Y2tldCBMaWZlY3ljbGUgQ29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldFBVVGxpZmVjeWNsZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlKi5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IGBgQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkYGAsIGBgRXhwaXJhdGlvbkRhdGVgYCwgYGBFeHBpcmF0aW9uSW5EYXlzYGAsIGBgTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uSW5EYXlzYGAsIGBgTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uYGAsIGBgTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uc2BgLCBgYFRyYW5zaXRpb25gYCwgb3IgYGBUcmFuc2l0aW9uc2BgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGUge1xuLyoqXG4gKiBJZiBgYEVuYWJsZWRgYCwgdGhlIHJ1bGUgaXMgY3VycmVudGx5IGJlaW5nIGFwcGxpZWQuIElmIGBgRGlzYWJsZWRgYCwgdGhlIHJ1bGUgaXMgbm90IGN1cnJlbnRseSBiZWluZyBhcHBsaWVkLlxuICovXG5TdGF0dXM6IChcIkVuYWJsZWRcIiB8IFwiRGlzYWJsZWRcIilcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgQW1hem9uIFMzIHdpbGwgcmVtb3ZlIGEgZGVsZXRlIG1hcmtlciB3aXRob3V0IGFueSBub25jdXJyZW50IHZlcnNpb25zLiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGRlbGV0ZSBtYXJrZXIgd2lsbCBiZSByZW1vdmVkIGlmIHRoZXJlIGFyZSBubyBub25jdXJyZW50IHZlcnNpb25zLiBUaGlzIGNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aCBgYEV4cGlyYXRpb25JbkRheXNgYCwgYGBFeHBpcmF0aW9uRGF0ZWBgLCBvciBgYFRhZ0ZpbHRlcnNgYC5cbiAqL1xuRXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlcj86IGJvb2xlYW5cbi8qKlxuICogKERlcHJlY2F0ZWQuKSBGb3IgYnVja2V0cyB3aXRoIHZlcnNpb25pbmcgZW5hYmxlZCAob3Igc3VzcGVuZGVkKSwgc3BlY2lmaWVzIHRoZSB0aW1lLCBpbiBkYXlzLCBiZXR3ZWVuIHdoZW4gYSBuZXcgdmVyc2lvbiBvZiB0aGUgb2JqZWN0IGlzIHVwbG9hZGVkIHRvIHRoZSBidWNrZXQgYW5kIHdoZW4gb2xkIHZlcnNpb25zIG9mIHRoZSBvYmplY3QgZXhwaXJlLiBXaGVuIG9iamVjdCB2ZXJzaW9ucyBleHBpcmUsIEFtYXpvbiBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZW0uIElmIHlvdSBzcGVjaWZ5IGEgdHJhbnNpdGlvbiBhbmQgZXhwaXJhdGlvbiB0aW1lLCB0aGUgZXhwaXJhdGlvbiB0aW1lIG11c3QgYmUgbGF0ZXIgdGhhbiB0aGUgdHJhbnNpdGlvbiB0aW1lLlxuICovXG5Ob25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25JbkRheXM/OiBudW1iZXJcbi8qKlxuICogT25lIG9yIG1vcmUgdHJhbnNpdGlvbiBydWxlcyB0aGF0IHNwZWNpZnkgd2hlbiBhbiBvYmplY3QgdHJhbnNpdGlvbnMgdG8gYSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gSWYgeW91IHNwZWNpZnkgYW4gZXhwaXJhdGlvbiBhbmQgdHJhbnNpdGlvbiB0aW1lLCB5b3UgbXVzdCB1c2UgdGhlIHNhbWUgdGltZSB1bml0IGZvciBib3RoIHByb3BlcnRpZXMgKGVpdGhlciBpbiBkYXlzIG9yIGJ5IGRhdGUpLiBUaGUgZXhwaXJhdGlvbiB0aW1lIG11c3QgYWxzbyBiZSBsYXRlciB0aGFuIHRoZSB0cmFuc2l0aW9uIHRpbWUuIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhlIGBgVHJhbnNpdGlvbmBgIHByb3BlcnR5LlxuICovXG5UcmFuc2l0aW9ucz86IFRyYW5zaXRpb25bXVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gb2JqZWN0IHNpemUgaW4gYnl0ZXMgZm9yIHRoaXMgcnVsZSB0byBhcHBseSB0by4gT2JqZWN0cyBtdXN0IGJlIGxhcmdlciB0aGFuIHRoaXMgdmFsdWUgaW4gYnl0ZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNpemUgYmFzZWQgcnVsZXMsIHNlZSBbTGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb24gdXNpbmcgc2l6ZS1iYXNlZCBydWxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbGlmZWN5Y2xlLWNvbmZpZ3VyYXRpb24tZXhhbXBsZXMuaHRtbCNsYy1zaXplLXJ1bGVzKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuT2JqZWN0U2l6ZUdyZWF0ZXJUaGFuPzogc3RyaW5nXG4vKipcbiAqIFRhZ3MgdG8gdXNlIHRvIGlkZW50aWZ5IGEgc3Vic2V0IG9mIG9iamVjdHMgdG8gd2hpY2ggdGhlIGxpZmVjeWNsZSBydWxlIGFwcGxpZXMuXG4gKi9cblRhZ0ZpbHRlcnM/OiBUYWdGaWx0ZXJbXVxuLyoqXG4gKiBGb3IgYnVja2V0cyB3aXRoIHZlcnNpb25pbmcgZW5hYmxlZCAob3Igc3VzcGVuZGVkKSwgb25lIG9yIG1vcmUgdHJhbnNpdGlvbiBydWxlcyB0aGF0IHNwZWNpZnkgd2hlbiBub24tY3VycmVudCBvYmplY3RzIHRyYW5zaXRpb24gdG8gYSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gSWYgeW91IHNwZWNpZnkgYSB0cmFuc2l0aW9uIGFuZCBleHBpcmF0aW9uIHRpbWUsIHRoZSBleHBpcmF0aW9uIHRpbWUgbXVzdCBiZSBsYXRlciB0aGFuIHRoZSB0cmFuc2l0aW9uIHRpbWUuIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhlIGBgTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uYGAgcHJvcGVydHkuXG4gKi9cbk5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnM/OiBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25bXVxuLyoqXG4gKiBPYmplY3Qga2V5IHByZWZpeCB0aGF0IGlkZW50aWZpZXMgb25lIG9yIG1vcmUgb2JqZWN0cyB0byB3aGljaCB0aGlzIHJ1bGUgYXBwbGllcy5cbiAqICAgUmVwbGFjZW1lbnQgbXVzdCBiZSBtYWRlIGZvciBvYmplY3Qga2V5cyBjb250YWluaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoc3VjaCBhcyBjYXJyaWFnZSByZXR1cm5zKSB3aGVuIHVzaW5nIFhNTCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbWE1MIHJlbGF0ZWQgb2JqZWN0IGtleSBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWtleXMuaHRtbCNvYmplY3Qta2V5LXhtbC1yZWxhdGVkLWNvbnN0cmFpbnRzKS5cbiAqL1xuUHJlZml4Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBvYmplY3Qgc2l6ZSBpbiBieXRlcyBmb3IgdGhpcyBydWxlIHRvIGFwcGx5IHRvLiBPYmplY3RzIG11c3QgYmUgc21hbGxlciB0aGFuIHRoaXMgdmFsdWUgaW4gYnl0ZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNpemVkIGJhc2VkIHJ1bGVzLCBzZWUgW0xpZmVjeWNsZSBjb25maWd1cmF0aW9uIHVzaW5nIHNpemUtYmFzZWQgcnVsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2xpZmVjeWNsZS1jb25maWd1cmF0aW9uLWV4YW1wbGVzLmh0bWwjbGMtc2l6ZS1ydWxlcykgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbk9iamVjdFNpemVMZXNzVGhhbj86IHN0cmluZ1xuTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uPzogTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uMVxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hlbiBvYmplY3RzIGFyZSBkZWxldGVkIGZyb20gQW1hem9uIFMzIGFuZCBBbWF6b24gUzMgR2xhY2llci4gVGhlIGRhdGUgdmFsdWUgbXVzdCBiZSBpbiBJU08gODYwMSBmb3JtYXQuIFRoZSB0aW1lIGlzIGFsd2F5cyBtaWRuaWdodCBVVEMuIElmIHlvdSBzcGVjaWZ5IGFuIGV4cGlyYXRpb24gYW5kIHRyYW5zaXRpb24gdGltZSwgeW91IG11c3QgdXNlIHRoZSBzYW1lIHRpbWUgdW5pdCBmb3IgYm90aCBwcm9wZXJ0aWVzIChlaXRoZXIgaW4gZGF5cyBvciBieSBkYXRlKS4gVGhlIGV4cGlyYXRpb24gdGltZSBtdXN0IGFsc28gYmUgbGF0ZXIgdGhhbiB0aGUgdHJhbnNpdGlvbiB0aW1lLlxuICovXG5FeHBpcmF0aW9uRGF0ZT86IHN0cmluZ1xuTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uPzogTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uXG4vKipcbiAqIEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRheXMgYWZ0ZXIgY3JlYXRpb24gd2hlbiBvYmplY3RzIGFyZSBkZWxldGVkIGZyb20gQW1hem9uIFMzIGFuZCBBbWF6b24gUzMgR2xhY2llci4gSWYgeW91IHNwZWNpZnkgYW4gZXhwaXJhdGlvbiBhbmQgdHJhbnNpdGlvbiB0aW1lLCB5b3UgbXVzdCB1c2UgdGhlIHNhbWUgdGltZSB1bml0IGZvciBib3RoIHByb3BlcnRpZXMgKGVpdGhlciBpbiBkYXlzIG9yIGJ5IGRhdGUpLiBUaGUgZXhwaXJhdGlvbiB0aW1lIG11c3QgYWxzbyBiZSBsYXRlciB0aGFuIHRoZSB0cmFuc2l0aW9uIHRpbWUuXG4gKi9cbkV4cGlyYXRpb25JbkRheXM/OiBudW1iZXJcblRyYW5zaXRpb24/OiBUcmFuc2l0aW9uMVxuLyoqXG4gKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJ1bGUuIFRoZSB2YWx1ZSBjYW4ndCBiZSBsb25nZXIgdGhhbiAyNTUgY2hhcmFjdGVycy5cbiAqL1xuSWQ/OiBzdHJpbmdcbkFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZD86IEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZFxufVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hlbiBhbiBvYmplY3QgdHJhbnNpdGlvbnMgdG8gYSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIFMzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIHJ1bGVzLCBzZWUgW1RyYW5zaXRpb25pbmcgT2JqZWN0cyBVc2luZyBBbWF6b24gUzMgTGlmZWN5Y2xlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9saWZlY3ljbGUtdHJhbnNpdGlvbi1nZW5lcmFsLWNvbnNpZGVyYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zaXRpb24ge1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hlbiBvYmplY3RzIGFyZSB0cmFuc2l0aW9uZWQgdG8gdGhlIHNwZWNpZmllZCBzdG9yYWdlIGNsYXNzLiBUaGUgZGF0ZSB2YWx1ZSBtdXN0IGJlIGluIElTTyA4NjAxIGZvcm1hdC4gVGhlIHRpbWUgaXMgYWx3YXlzIG1pZG5pZ2h0IFVUQy5cbiAqL1xuVHJhbnNpdGlvbkRhdGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHN0b3JhZ2UgY2xhc3MgdG8gd2hpY2ggeW91IHdhbnQgdGhlIG9iamVjdCB0byB0cmFuc2l0aW9uLlxuICovXG5TdG9yYWdlQ2xhc3M6IChcIkRFRVBfQVJDSElWRVwiIHwgXCJHTEFDSUVSXCIgfCBcIkdsYWNpZXJcIiB8IFwiR0xBQ0lFUl9JUlwiIHwgXCJJTlRFTExJR0VOVF9USUVSSU5HXCIgfCBcIk9ORVpPTkVfSUFcIiB8IFwiU1RBTkRBUkRfSUFcIilcbi8qKlxuICogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZGF5cyBhZnRlciBjcmVhdGlvbiB3aGVuIG9iamVjdHMgYXJlIHRyYW5zaXRpb25lZCB0byB0aGUgc3BlY2lmaWVkIHN0b3JhZ2UgY2xhc3MuIFRoZSB2YWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuVHJhbnNpdGlvbkluRGF5cz86IG51bWJlclxufVxuLyoqXG4gKiBDb250YWluZXIgZm9yIHRoZSB0cmFuc2l0aW9uIHJ1bGUgdGhhdCBkZXNjcmliZXMgd2hlbiBub25jdXJyZW50IG9iamVjdHMgdHJhbnNpdGlvbiB0byB0aGUgYGBTVEFOREFSRF9JQWBgLCBgYE9ORVpPTkVfSUFgYCwgYGBJTlRFTExJR0VOVF9USUVSSU5HYGAsIGBgR0xBQ0lFUl9JUmBgLCBgYEdMQUNJRVJgYCwgb3IgYGBERUVQX0FSQ0hJVkVgYCBzdG9yYWdlIGNsYXNzLiBJZiB5b3VyIGJ1Y2tldCBpcyB2ZXJzaW9uaW5nLWVuYWJsZWQgKG9yIHZlcnNpb25pbmcgaXMgc3VzcGVuZGVkKSwgeW91IGNhbiBzZXQgdGhpcyBhY3Rpb24gdG8gcmVxdWVzdCB0aGF0IEFtYXpvbiBTMyB0cmFuc2l0aW9uIG5vbmN1cnJlbnQgb2JqZWN0IHZlcnNpb25zIHRvIHRoZSBgYFNUQU5EQVJEX0lBYGAsIGBgT05FWk9ORV9JQWBgLCBgYElOVEVMTElHRU5UX1RJRVJJTkdgYCwgYGBHTEFDSUVSX0lSYGAsIGBgR0xBQ0lFUmBgLCBvciBgYERFRVBfQVJDSElWRWBgIHN0b3JhZ2UgY2xhc3MgYXQgYSBzcGVjaWZpYyBwZXJpb2QgaW4gdGhlIG9iamVjdCdzIGxpZmV0aW1lLiBJZiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoZSBgYE5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnNgYCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb24ge1xuLyoqXG4gKiBUaGUgY2xhc3Mgb2Ygc3RvcmFnZSB1c2VkIHRvIHN0b3JlIHRoZSBvYmplY3QuXG4gKi9cblN0b3JhZ2VDbGFzczogKFwiREVFUF9BUkNISVZFXCIgfCBcIkdMQUNJRVJcIiB8IFwiR2xhY2llclwiIHwgXCJHTEFDSUVSX0lSXCIgfCBcIklOVEVMTElHRU5UX1RJRVJJTkdcIiB8IFwiT05FWk9ORV9JQVwiIHwgXCJTVEFOREFSRF9JQVwiKVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBkYXlzIGFuIG9iamVjdCBpcyBub25jdXJyZW50IGJlZm9yZSBBbWF6b24gUzMgY2FuIHBlcmZvcm0gdGhlIGFzc29jaWF0ZWQgYWN0aW9uLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vbmN1cnJlbnQgZGF5cyBjYWxjdWxhdGlvbnMsIHNlZSBbSG93IEFtYXpvbiBTMyBDYWxjdWxhdGVzIEhvdyBMb25nIGFuIE9iamVjdCBIYXMgQmVlbiBOb25jdXJyZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9pbnRyby1saWZlY3ljbGUtcnVsZXMuaHRtbCNub24tY3VycmVudC1kYXlzLWNhbGN1bGF0aW9ucykgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cblRyYW5zaXRpb25JbkRheXM6IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgaG93IG1hbnkgbm9uY3VycmVudCB2ZXJzaW9ucyBTMyB3aWxsIHJldGFpbi4gSWYgdGhlcmUgYXJlIHRoaXMgbWFueSBtb3JlIHJlY2VudCBub25jdXJyZW50IHZlcnNpb25zLCBTMyB3aWxsIHRha2UgdGhlIGFzc29jaWF0ZWQgYWN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBub25jdXJyZW50IHZlcnNpb25zLCBzZWUgW0xpZmVjeWNsZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9pbnRyby1saWZlY3ljbGUtcnVsZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbk5ld2VyTm9uY3VycmVudFZlcnNpb25zPzogbnVtYmVyXG59XG4vKipcbiAqIENvbnRhaW5lciBmb3IgdGhlIHRyYW5zaXRpb24gcnVsZSB0aGF0IGRlc2NyaWJlcyB3aGVuIG5vbmN1cnJlbnQgb2JqZWN0cyB0cmFuc2l0aW9uIHRvIHRoZSBgYFNUQU5EQVJEX0lBYGAsIGBgT05FWk9ORV9JQWBgLCBgYElOVEVMTElHRU5UX1RJRVJJTkdgYCwgYGBHTEFDSUVSX0lSYGAsIGBgR0xBQ0lFUmBgLCBvciBgYERFRVBfQVJDSElWRWBgIHN0b3JhZ2UgY2xhc3MuIElmIHlvdXIgYnVja2V0IGlzIHZlcnNpb25pbmctZW5hYmxlZCAob3IgdmVyc2lvbmluZyBpcyBzdXNwZW5kZWQpLCB5b3UgY2FuIHNldCB0aGlzIGFjdGlvbiB0byByZXF1ZXN0IHRoYXQgQW1hem9uIFMzIHRyYW5zaXRpb24gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgdG8gdGhlIGBgU1RBTkRBUkRfSUFgYCwgYGBPTkVaT05FX0lBYGAsIGBgSU5URUxMSUdFTlRfVElFUklOR2BgLCBgYEdMQUNJRVJfSVJgYCwgYGBHTEFDSUVSYGAsIG9yIGBgREVFUF9BUkNISVZFYGAgc3RvcmFnZSBjbGFzcyBhdCBhIHNwZWNpZmljIHBlcmlvZCBpbiB0aGUgb2JqZWN0J3MgbGlmZXRpbWUuIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhlIGBgTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uc2BgIHByb3BlcnR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbjEge1xuLyoqXG4gKiBUaGUgY2xhc3Mgb2Ygc3RvcmFnZSB1c2VkIHRvIHN0b3JlIHRoZSBvYmplY3QuXG4gKi9cblN0b3JhZ2VDbGFzczogKFwiREVFUF9BUkNISVZFXCIgfCBcIkdMQUNJRVJcIiB8IFwiR2xhY2llclwiIHwgXCJHTEFDSUVSX0lSXCIgfCBcIklOVEVMTElHRU5UX1RJRVJJTkdcIiB8IFwiT05FWk9ORV9JQVwiIHwgXCJTVEFOREFSRF9JQVwiKVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBkYXlzIGFuIG9iamVjdCBpcyBub25jdXJyZW50IGJlZm9yZSBBbWF6b24gUzMgY2FuIHBlcmZvcm0gdGhlIGFzc29jaWF0ZWQgYWN0aW9uLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vbmN1cnJlbnQgZGF5cyBjYWxjdWxhdGlvbnMsIHNlZSBbSG93IEFtYXpvbiBTMyBDYWxjdWxhdGVzIEhvdyBMb25nIGFuIE9iamVjdCBIYXMgQmVlbiBOb25jdXJyZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9pbnRyby1saWZlY3ljbGUtcnVsZXMuaHRtbCNub24tY3VycmVudC1kYXlzLWNhbGN1bGF0aW9ucykgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cblRyYW5zaXRpb25JbkRheXM6IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgaG93IG1hbnkgbm9uY3VycmVudCB2ZXJzaW9ucyBTMyB3aWxsIHJldGFpbi4gSWYgdGhlcmUgYXJlIHRoaXMgbWFueSBtb3JlIHJlY2VudCBub25jdXJyZW50IHZlcnNpb25zLCBTMyB3aWxsIHRha2UgdGhlIGFzc29jaWF0ZWQgYWN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBub25jdXJyZW50IHZlcnNpb25zLCBzZWUgW0xpZmVjeWNsZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9pbnRyby1saWZlY3ljbGUtcnVsZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbk5ld2VyTm9uY3VycmVudFZlcnNpb25zPzogbnVtYmVyXG59XG4vKipcbiAqIFNwZWNpZmllcyB3aGVuIG5vbmN1cnJlbnQgb2JqZWN0IHZlcnNpb25zIGV4cGlyZS4gVXBvbiBleHBpcmF0aW9uLCBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucy4gWW91IHNldCB0aGlzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGFjdGlvbiBvbiBhIGJ1Y2tldCB0aGF0IGhhcyB2ZXJzaW9uaW5nIGVuYWJsZWQgKG9yIHN1c3BlbmRlZCkgdG8gcmVxdWVzdCB0aGF0IFMzIGRlbGV0ZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucyBhdCBhIHNwZWNpZmljIHBlcmlvZCBpbiB0aGUgb2JqZWN0J3MgbGlmZXRpbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZGF5cyBhbiBvYmplY3QgaXMgbm9uY3VycmVudCBiZWZvcmUgUzMgY2FuIHBlcmZvcm0gdGhlIGFzc29jaWF0ZWQgYWN0aW9uLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vbmN1cnJlbnQgZGF5cyBjYWxjdWxhdGlvbnMsIHNlZSBbSG93IEFtYXpvbiBTMyBDYWxjdWxhdGVzIFdoZW4gYW4gT2JqZWN0IEJlY2FtZSBOb25jdXJyZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9pbnRyby1saWZlY3ljbGUtcnVsZXMuaHRtbCNub24tY3VycmVudC1kYXlzLWNhbGN1bGF0aW9ucykgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbk5vbmN1cnJlbnREYXlzOiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIGhvdyBtYW55IG5vbmN1cnJlbnQgdmVyc2lvbnMgUzMgd2lsbCByZXRhaW4uIElmIHRoZXJlIGFyZSB0aGlzIG1hbnkgbW9yZSByZWNlbnQgbm9uY3VycmVudCB2ZXJzaW9ucywgUzMgd2lsbCB0YWtlIHRoZSBhc3NvY2lhdGVkIGFjdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbm9uY3VycmVudCB2ZXJzaW9ucywgc2VlIFtMaWZlY3ljbGUgY29uZmlndXJhdGlvbiBlbGVtZW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvaW50cm8tbGlmZWN5Y2xlLXJ1bGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5OZXdlck5vbmN1cnJlbnRWZXJzaW9ucz86IG51bWJlclxufVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hlbiBhbiBvYmplY3QgdHJhbnNpdGlvbnMgdG8gYSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIFMzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIHJ1bGVzLCBzZWUgW1RyYW5zaXRpb25pbmcgT2JqZWN0cyBVc2luZyBBbWF6b24gUzMgTGlmZWN5Y2xlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9saWZlY3ljbGUtdHJhbnNpdGlvbi1nZW5lcmFsLWNvbnNpZGVyYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zaXRpb24xIHtcbi8qKlxuICogSW5kaWNhdGVzIHdoZW4gb2JqZWN0cyBhcmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gVGhlIGRhdGUgdmFsdWUgbXVzdCBiZSBpbiBJU08gODYwMSBmb3JtYXQuIFRoZSB0aW1lIGlzIGFsd2F5cyBtaWRuaWdodCBVVEMuXG4gKi9cblRyYW5zaXRpb25EYXRlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBzdG9yYWdlIGNsYXNzIHRvIHdoaWNoIHlvdSB3YW50IHRoZSBvYmplY3QgdG8gdHJhbnNpdGlvbi5cbiAqL1xuU3RvcmFnZUNsYXNzOiAoXCJERUVQX0FSQ0hJVkVcIiB8IFwiR0xBQ0lFUlwiIHwgXCJHbGFjaWVyXCIgfCBcIkdMQUNJRVJfSVJcIiB8IFwiSU5URUxMSUdFTlRfVElFUklOR1wiIHwgXCJPTkVaT05FX0lBXCIgfCBcIlNUQU5EQVJEX0lBXCIpXG4vKipcbiAqIEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRheXMgYWZ0ZXIgY3JlYXRpb24gd2hlbiBvYmplY3RzIGFyZSB0cmFuc2l0aW9uZWQgdG8gdGhlIHNwZWNpZmllZCBzdG9yYWdlIGNsYXNzLiBUaGUgdmFsdWUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gKi9cblRyYW5zaXRpb25JbkRheXM/OiBudW1iZXJcbn1cbi8qKlxuICogU3BlY2lmaWVzIGEgbGlmZWN5Y2xlIHJ1bGUgdGhhdCBzdG9wcyBpbmNvbXBsZXRlIG11bHRpcGFydCB1cGxvYWRzIHRvIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZGF5cyBhZnRlciB3aGljaCBBbWF6b24gUzMgc3RvcHMgYW4gaW5jb21wbGV0ZSBtdWx0aXBhcnQgdXBsb2FkLlxuICovXG5EYXlzQWZ0ZXJJbml0aWF0aW9uOiBudW1iZXJcbn1cbi8qKlxuICogRW5hYmxlcyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhbGwgb2JqZWN0cyBpbiB0aGlzIGJ1Y2tldC4gWW91IG1pZ2h0IGVuYWJsZSB2ZXJzaW9uaW5nIHRvIHByZXZlbnQgb2JqZWN0cyBmcm9tIGJlaW5nIGRlbGV0ZWQgb3Igb3ZlcndyaXR0ZW4gYnkgbWlzdGFrZSBvciB0byBhcmNoaXZlIG9iamVjdHMgc28gdGhhdCB5b3UgY2FuIHJldHJpZXZlIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoZW0uXG4gKiAgIFdoZW4geW91IGVuYWJsZSB2ZXJzaW9uaW5nIG9uIGEgYnVja2V0IGZvciB0aGUgZmlyc3QgdGltZSwgaXQgbWlnaHQgdGFrZSBhIHNob3J0IGFtb3VudCBvZiB0aW1lIGZvciB0aGUgY2hhbmdlIHRvIGJlIGZ1bGx5IHByb3BhZ2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB3YWl0IGZvciAxNSBtaW51dGVzIGFmdGVyIGVuYWJsaW5nIHZlcnNpb25pbmcgYmVmb3JlIGlzc3Vpbmcgd3JpdGUgb3BlcmF0aW9ucyAoYGBQVVRgYCBvciBgYERFTEVURWBgKSBvbiBvYmplY3RzIGluIHRoZSBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgdmVyc2lvbmluZyBzdGF0ZSBvZiB0aGUgYnVja2V0LlxuICovXG5TdGF0dXM6IChcIkVuYWJsZWRcIiB8IFwiU3VzcGVuZGVkXCIpXG59XG4vKipcbiAqIFNwZWNpZmllcyBhIG1ldHJpY3MgY29uZmlndXJhdGlvbiBmb3IgdGhlIENsb3VkV2F0Y2ggcmVxdWVzdCBtZXRyaWNzIChzcGVjaWZpZWQgYnkgdGhlIG1ldHJpY3MgY29uZmlndXJhdGlvbiBJRCkgZnJvbSBhbiBBbWF6b24gUzMgYnVja2V0LiBJZiB5b3UncmUgdXBkYXRpbmcgYW4gZXhpc3RpbmcgbWV0cmljcyBjb25maWd1cmF0aW9uLCBub3RlIHRoYXQgdGhpcyBpcyBhIGZ1bGwgcmVwbGFjZW1lbnQgb2YgdGhlIGV4aXN0aW5nIG1ldHJpY3MgY29uZmlndXJhdGlvbi4gSWYgeW91IGRvbid0IGluY2x1ZGUgdGhlIGVsZW1lbnRzIHlvdSB3YW50IHRvIGtlZXAsIHRoZXkgYXJlIGVyYXNlZC4gRm9yIGV4YW1wbGVzLCBzZWUgW0FXUzo6UzM6OkJ1Y2tldF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0Lmh0bWwjYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LS1leGFtcGxlcykuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1BVVCBCdWNrZXQgbWV0cmljc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldFBVVE1ldHJpY0NvbmZpZ3VyYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgQVBJIFJlZmVyZW5jZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgYWNjZXNzIHBvaW50IHRoYXQgd2FzIHVzZWQgd2hpbGUgcGVyZm9ybWluZyBvcGVyYXRpb25zIG9uIHRoZSBvYmplY3QuIFRoZSBtZXRyaWNzIGNvbmZpZ3VyYXRpb24gb25seSBpbmNsdWRlcyBvYmplY3RzIHRoYXQgbWVldCB0aGUgZmlsdGVyJ3MgY3JpdGVyaWEuXG4gKi9cbkFjY2Vzc1BvaW50QXJuPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyBhIGxpc3Qgb2YgdGFnIGZpbHRlcnMgdG8gdXNlIGFzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZpbHRlci4gVGhlIG1ldHJpY3MgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBvbmx5IG9iamVjdHMgdGhhdCBtZWV0IHRoZSBmaWx0ZXIncyBjcml0ZXJpYS5cbiAqL1xuVGFnRmlsdGVycz86IFRhZ0ZpbHRlcltdXG4vKipcbiAqIFRoZSBJRCB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtZXRyaWNzIGNvbmZpZ3VyYXRpb24uIFRoaXMgY2FuIGJlIGFueSB2YWx1ZSB5b3UgY2hvb3NlIHRoYXQgaGVscHMgeW91IGlkZW50aWZ5IHlvdXIgbWV0cmljcyBjb25maWd1cmF0aW9uLlxuICovXG5JZDogc3RyaW5nXG4vKipcbiAqIFRoZSBwcmVmaXggdGhhdCBhbiBvYmplY3QgbXVzdCBoYXZlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBtZXRyaWNzIHJlc3VsdHMuXG4gKi9cblByZWZpeD86IHN0cmluZ1xufVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIFMzIEludGVsbGlnZW50LVRpZXJpbmcgY29uZmlndXJhdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFMzIEludGVsbGlnZW50LVRpZXJpbmcgc3RvcmFnZSBjbGFzcywgc2VlIFtTdG9yYWdlIGNsYXNzIGZvciBhdXRvbWF0aWNhbGx5IG9wdGltaXppbmcgZnJlcXVlbnRseSBhbmQgaW5mcmVxdWVudGx5IGFjY2Vzc2VkIG9iamVjdHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3N0b3JhZ2UtY2xhc3MtaW50cm8uaHRtbCNzYy1keW5hbWljLWRhdGEtYWNjZXNzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlbGxpZ2VudFRpZXJpbmdDb25maWd1cmF0aW9uIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBzdGF0dXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKi9cblN0YXR1czogKFwiRGlzYWJsZWRcIiB8IFwiRW5hYmxlZFwiKVxuLyoqXG4gKiBTcGVjaWZpZXMgYSBsaXN0IG9mIFMzIEludGVsbGlnZW50LVRpZXJpbmcgc3RvcmFnZSBjbGFzcyB0aWVycyBpbiB0aGUgY29uZmlndXJhdGlvbi4gQXQgbGVhc3Qgb25lIHRpZXIgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsaXN0LiBBdCBtb3N0LCB5b3UgY2FuIHNwZWNpZnkgdHdvIHRpZXJzIGluIHRoZSBsaXN0LCBvbmUgZm9yIGVhY2ggYXZhaWxhYmxlIEFjY2Vzc1RpZXI6IGBgQVJDSElWRV9BQ0NFU1NgYCBhbmQgYGBERUVQX0FSQ0hJVkVfQUNDRVNTYGAuXG4gKiAgIFlvdSBvbmx5IG5lZWQgSW50ZWxsaWdlbnQgVGllcmluZyBDb25maWd1cmF0aW9uIGVuYWJsZWQgb24gYSBidWNrZXQgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseSBtb3ZlIG9iamVjdHMgc3RvcmVkIGluIHRoZSBJbnRlbGxpZ2VudC1UaWVyaW5nIHN0b3JhZ2UgY2xhc3MgdG8gQXJjaGl2ZSBBY2Nlc3Mgb3IgRGVlcCBBcmNoaXZlIEFjY2VzcyB0aWVycy5cbiAqL1xuVGllcmluZ3M6IFRpZXJpbmdbXVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3IgYSBrZXktdmFsdWUgcGFpci5cbiAqL1xuVGFnRmlsdGVycz86IFRhZ0ZpbHRlcltdXG4vKipcbiAqIFRoZSBJRCB1c2VkIHRvIGlkZW50aWZ5IHRoZSBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIGNvbmZpZ3VyYXRpb24uXG4gKi9cbklkOiBzdHJpbmdcbi8qKlxuICogQW4gb2JqZWN0IGtleSBuYW1lIHByZWZpeCB0aGF0IGlkZW50aWZpZXMgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSBydWxlIGFwcGxpZXMuXG4gKi9cblByZWZpeD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBzdG9yYWdlIGNsYXNzIGlzIGRlc2lnbmVkIHRvIG9wdGltaXplIHN0b3JhZ2UgY29zdHMgYnkgYXV0b21hdGljYWxseSBtb3ZpbmcgZGF0YSB0byB0aGUgbW9zdCBjb3N0LWVmZmVjdGl2ZSBzdG9yYWdlIGFjY2VzcyB0aWVyLCB3aXRob3V0IGFkZGl0aW9uYWwgb3BlcmF0aW9uYWwgb3ZlcmhlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGllcmluZyB7XG4vKipcbiAqIFMzIEludGVsbGlnZW50LVRpZXJpbmcgYWNjZXNzIHRpZXIuIFNlZSBbU3RvcmFnZSBjbGFzcyBmb3IgYXV0b21hdGljYWxseSBvcHRpbWl6aW5nIGZyZXF1ZW50bHkgYW5kIGluZnJlcXVlbnRseSBhY2Nlc3NlZCBvYmplY3RzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9zdG9yYWdlLWNsYXNzLWludHJvLmh0bWwjc2MtZHluYW1pYy1kYXRhLWFjY2VzcykgZm9yIGEgbGlzdCBvZiBhY2Nlc3MgdGllcnMgaW4gdGhlIFMzIEludGVsbGlnZW50LVRpZXJpbmcgc3RvcmFnZSBjbGFzcy5cbiAqL1xuQWNjZXNzVGllcjogKFwiQVJDSElWRV9BQ0NFU1NcIiB8IFwiREVFUF9BUkNISVZFX0FDQ0VTU1wiKVxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGRheXMgb2Ygbm8gYWNjZXNzIGFmdGVyIHdoaWNoIGFuIG9iamVjdCB3aWxsIGJlIGVsaWdpYmxlIHRvIGJlIHRyYW5zaXRpb25lZCB0byB0aGUgY29ycmVzcG9uZGluZyB0aWVyLiBUaGUgbWluaW11bSBudW1iZXIgb2YgZGF5cyBzcGVjaWZpZWQgZm9yIEFyY2hpdmUgQWNjZXNzIHRpZXIgbXVzdCBiZSBhdCBsZWFzdCA5MCBkYXlzIGFuZCBEZWVwIEFyY2hpdmUgQWNjZXNzIHRpZXIgbXVzdCBiZSBhdCBsZWFzdCAxODAgZGF5cy4gVGhlIG1heGltdW0gY2FuIGJlIHVwIHRvIDIgeWVhcnMgKDczMCBkYXlzKS5cbiAqL1xuRGF5czogbnVtYmVyXG59XG4vKipcbiAqIERlc2NyaWJlcyB0aGUgY3Jvc3Mtb3JpZ2luIGFjY2VzcyBjb25maWd1cmF0aW9uIGZvciBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0VuYWJsaW5nIENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9jb3JzLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcnNDb25maWd1cmF0aW9uIHtcbi8qKlxuICogQSBzZXQgb2Ygb3JpZ2lucyBhbmQgbWV0aG9kcyAoY3Jvc3Mtb3JpZ2luIGFjY2VzcyB0aGF0IHlvdSB3YW50IHRvIGFsbG93KS4gWW91IGNhbiBhZGQgdXAgdG8gMTAwIHJ1bGVzIHRvIHRoZSBjb25maWd1cmF0aW9uLlxuICovXG5Db3JzUnVsZXM6IENvcnNSdWxlW11cbn1cbi8qKlxuICogU3BlY2lmaWVzIGEgY3Jvc3Mtb3JpZ2luIGFjY2VzcyBydWxlIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcnNSdWxlIHtcbi8qKlxuICogT25lIG9yIG1vcmUgaGVhZGVycyBpbiB0aGUgcmVzcG9uc2UgdGhhdCB5b3Ugd2FudCBjdXN0b21lcnMgdG8gYmUgYWJsZSB0byBhY2Nlc3MgZnJvbSB0aGVpciBhcHBsaWNhdGlvbnMgKGZvciBleGFtcGxlLCBmcm9tIGEgSmF2YVNjcmlwdCBgYFhNTEh0dHBSZXF1ZXN0YGAgb2JqZWN0KS5cbiAqL1xuRXhwb3NlZEhlYWRlcnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBBbiBIVFRQIG1ldGhvZCB0aGF0IHlvdSBhbGxvdyB0aGUgb3JpZ2luIHRvIHJ1bi5cbiAqICAgKkFsbG93ZWQgdmFsdWVzKjogYGBHRVRgYCB8IGBgUFVUYGAgfCBgYEhFQURgYCB8IGBgUE9TVGBgIHwgYGBERUxFVEVgYFxuICovXG5BbGxvd2VkTWV0aG9kczogKFwiR0VUXCIgfCBcIlBVVFwiIHwgXCJIRUFEXCIgfCBcIlBPU1RcIiB8IFwiREVMRVRFXCIpW11cbi8qKlxuICogT25lIG9yIG1vcmUgb3JpZ2lucyB5b3Ugd2FudCBjdXN0b21lcnMgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIGJ1Y2tldCBmcm9tLlxuICovXG5BbGxvd2VkT3JpZ2luczogc3RyaW5nW11cbi8qKlxuICogSGVhZGVycyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGBgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzYGAgaGVhZGVyLiBUaGVzZSBoZWFkZXJzIGFyZSBhbGxvd2VkIGluIGEgcHJlZmxpZ2h0IE9QVElPTlMgcmVxdWVzdC4gSW4gcmVzcG9uc2UgdG8gYW55IHByZWZsaWdodCBPUFRJT05TIHJlcXVlc3QsIEFtYXpvbiBTMyByZXR1cm5zIGFueSByZXF1ZXN0ZWQgaGVhZGVycyB0aGF0IGFyZSBhbGxvd2VkLlxuICovXG5BbGxvd2VkSGVhZGVycz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3VyIGJyb3dzZXIgaXMgdG8gY2FjaGUgdGhlIHByZWZsaWdodCByZXNwb25zZSBmb3IgdGhlIHNwZWNpZmllZCByZXNvdXJjZS5cbiAqL1xuTWF4QWdlPzogbnVtYmVyXG4vKipcbiAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgcnVsZS4gVGhlIHZhbHVlIG11c3QgYmUgbm8gbW9yZSB0aGFuIDI1NSBjaGFyYWN0ZXJzLlxuICovXG5JZD86IHN0cmluZ1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXMzLWJ1Y2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1zMy1idWNrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW1hem9uIFMzIGtleSBmb3JtYXQgZm9yIGxvZyBvYmplY3RzLiBPbmx5IG9uZSBmb3JtYXQsIGVpdGhlciBQYXJ0aXRpb25lZFByZWZpeCBvciBTaW1wbGVQcmVmaXgsIGlzIGFsbG93ZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFRhcmdldE9iamVjdEtleUZvcm1hdCA9ICh7XG4vKipcbiAqIFRoaXMgZm9ybWF0IGRlZmF1bHRzIHRoZSBwcmVmaXggdG8gdGhlIGdpdmVuIGxvZyBmaWxlIHByZWZpeCBmb3IgZGVsaXZlcmluZyBzZXJ2ZXIgYWNjZXNzIGxvZyBmaWxlLlxuICovXG5TaW1wbGVQcmVmaXg6IHtcblxufVxufSB8IHtcblBhcnRpdGlvbmVkUHJlZml4OiBQYXJ0aXRpb25lZFByZWZpeFxufSlcblxuLyoqXG4gKiBUaGUgYGBBV1M6OlMzOjpCdWNrZXRgYCByZXNvdXJjZSBjcmVhdGVzIGFuIEFtYXpvbiBTMyBidWNrZXQgaW4gdGhlIHNhbWUgQVdTIFJlZ2lvbiB3aGVyZSB5b3UgY3JlYXRlIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gc3RhY2suXG4gKiAgVG8gY29udHJvbCBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgdGhlIGJ1Y2tldCB3aGVuIHRoZSBzdGFjayBpcyBkZWxldGVkLCB5b3UgY2FuIHNldCBhIGRlbGV0aW9uIHBvbGljeSBmb3IgeW91ciBidWNrZXQuIFlvdSBjYW4gY2hvb3NlIHRvICpyZXRhaW4qIHRoZSBidWNrZXQgb3IgdG8gKmRlbGV0ZSogdGhlIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRGVsZXRpb25Qb2xpY3kgQXR0cmlidXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtYXR0cmlidXRlLWRlbGV0aW9ucG9saWN5Lmh0bWwpLlxuICogICBZb3UgY2FuIG9ubHkgZGVsZXRlIGVtcHR5IGJ1Y2tldHMuIERlbGV0aW9uIGZhaWxzIGZvciBidWNrZXRzIHRoYXQgaGF2ZSBjb250ZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX1MzX0JVQ0tFVCB7XG5BY2NlbGVyYXRlQ29uZmlndXJhdGlvbj86IEFjY2VsZXJhdGVDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoaXMgaXMgYSBsZWdhY3kgcHJvcGVydHksIGFuZCBpdCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIG1vc3QgdXNlIGNhc2VzLiBBIG1ham9yaXR5IG9mIG1vZGVybiB1c2UgY2FzZXMgaW4gQW1hem9uIFMzIG5vIGxvbmdlciByZXF1aXJlIHRoZSB1c2Ugb2YgQUNMcywgYW5kIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBrZWVwIEFDTHMgZGlzYWJsZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbnRyb2xsaW5nIG9iamVjdCBvd25lcnNoaXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS8vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9hYm91dC1vYmplY3Qtb3duZXJzaGlwLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICogICBBIGNhbm5lZCBhY2Nlc3MgY29udHJvbCBsaXN0IChBQ0wpIHRoYXQgZ3JhbnRzIHByZWRlZmluZWQgcGVybWlzc2lvbnMgdG8gdGhlIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FubmVkIEFDTHMsIHNlZSBbQ2FubmVkIEFDTF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvYWNsLW92ZXJ2aWV3Lmh0bWwjY2FubmVkLWFjbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKiAgIFMzIGJ1Y2tldHMgYXJlIGNyZWF0ZWQgd2l0aCBBQ0xzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFRoZXJlZm9yZSwgdW5sZXNzIHlvdSBleHBsaWNpdGx5IHNldCB0aGUgW0FXUzo6UzM6Ok93bmVyc2hpcENvbnRyb2xzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LW93bmVyc2hpcGNvbnRyb2xzLmh0bWwpIHByb3BlcnR5IHRvIGVuYWJsZSBBQ0xzLCB5b3VyIHJlc291cmNlIHdpbGwgZmFpbCB0byBkZXBsb3kgd2l0aCBhbnkgdmFsdWUgb3RoZXIgdGhhbiBQcml2YXRlLiBVc2UgY2FzZXMgcmVxdWlyaW5nIEFDTHMgYXJlIHVuY29tbW9uLlxuICogICBUaGUgbWFqb3JpdHkgb2YgYWNjZXNzIGNvbnRyb2wgY29uZmlndXJhdGlvbnMgY2FuIGJlIHN1Y2Nlc3NmdWxseSBhbmQgbW9yZSBlYXNpbHkgYWNoaWV2ZWQgd2l0aCBidWNrZXQgcG9saWNpZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FXUzo6UzM6OkJ1Y2tldFBvbGljeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tLy9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLXMzLXBvbGljeS5odG1sKS4gRm9yIGV4YW1wbGVzIG9mIGNvbW1vbiBwb2xpY3kgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBTMyBTZXJ2ZXIgQWNjZXNzIExvZ3MgYnVja2V0cyBhbmQgbW9yZSwgc2VlIFtCdWNrZXQgcG9saWN5IGV4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9leGFtcGxlLWJ1Y2tldC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuQWNjZXNzQ29udHJvbD86IChcIkF1dGhlbnRpY2F0ZWRSZWFkXCIgfCBcIkF3c0V4ZWNSZWFkXCIgfCBcIkJ1Y2tldE93bmVyRnVsbENvbnRyb2xcIiB8IFwiQnVja2V0T3duZXJSZWFkXCIgfCBcIkxvZ0RlbGl2ZXJ5V3JpdGVcIiB8IFwiUHJpdmF0ZVwiIHwgXCJQdWJsaWNSZWFkXCIgfCBcIlB1YmxpY1JlYWRXcml0ZVwiKVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGFueSBhbmFseXNlcyBmb3IgdGhlIGFuYWx5dGljcyBmaWx0ZXIgb2YgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqL1xuQW5hbHl0aWNzQ29uZmlndXJhdGlvbnM/OiBBbmFseXRpY3NDb25maWd1cmF0aW9uW11cbkJ1Y2tldEVuY3J5cHRpb24/OiBCdWNrZXRFbmNyeXB0aW9uXG4vKipcbiAqIEEgbmFtZSBmb3IgdGhlIGJ1Y2tldC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBuYW1lLCBBV1MgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIGEgdW5pcXVlIElEIGFuZCB1c2VzIHRoYXQgSUQgZm9yIHRoZSBidWNrZXQgbmFtZS4gVGhlIGJ1Y2tldCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCBwZXJpb2RzICguKSwgYW5kIGRhc2hlcyAoLSkgYW5kIG11c3QgZm9sbG93IFtBbWF6b24gUzMgYnVja2V0IHJlc3RyaWN0aW9ucyBhbmQgbGltaXRhdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L0J1Y2tldFJlc3RyaWN0aW9ucy5odG1sKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUnVsZXMgZm9yIG5hbWluZyBBbWF6b24gUzMgYnVja2V0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvQnVja2V0UmVzdHJpY3Rpb25zLmh0bWwjYnVja2V0bmFtaW5ncnVsZXMpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLiBcbiAqICAgSWYgeW91IHNwZWNpZnkgYSBuYW1lLCB5b3UgY2FuJ3QgcGVyZm9ybSB1cGRhdGVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBvZiB0aGlzIHJlc291cmNlLiBZb3UgY2FuIHBlcmZvcm0gdXBkYXRlcyB0aGF0IHJlcXVpcmUgbm8gb3Igc29tZSBpbnRlcnJ1cHRpb24uIElmIHlvdSBuZWVkIHRvIHJlcGxhY2UgdGhlIHJlc291cmNlLCBzcGVjaWZ5IGEgbmV3IG5hbWUuXG4gKi9cbkJ1Y2tldE5hbWU/OiBzdHJpbmdcbkNvcnNDb25maWd1cmF0aW9uPzogQ29yc0NvbmZpZ3VyYXRpb25cbi8qKlxuICogRGVmaW5lcyBob3cgQW1hem9uIFMzIGhhbmRsZXMgSW50ZWxsaWdlbnQtVGllcmluZyBzdG9yYWdlLlxuICovXG5JbnRlbGxpZ2VudFRpZXJpbmdDb25maWd1cmF0aW9ucz86IEludGVsbGlnZW50VGllcmluZ0NvbmZpZ3VyYXRpb25bXVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGludmVudG9yeSBjb25maWd1cmF0aW9uIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtHRVQgQnVja2V0IGludmVudG9yeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldEdFVEludmVudG9yeUNvbmZpZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuSW52ZW50b3J5Q29uZmlndXJhdGlvbnM/OiBJbnZlbnRvcnlDb25maWd1cmF0aW9uW11cbkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/OiBMaWZlY3ljbGVDb25maWd1cmF0aW9uXG5Mb2dnaW5nQ29uZmlndXJhdGlvbj86IExvZ2dpbmdDb25maWd1cmF0aW9uXG4vKipcbiAqIFNwZWNpZmllcyBhIG1ldHJpY3MgY29uZmlndXJhdGlvbiBmb3IgdGhlIENsb3VkV2F0Y2ggcmVxdWVzdCBtZXRyaWNzIChzcGVjaWZpZWQgYnkgdGhlIG1ldHJpY3MgY29uZmlndXJhdGlvbiBJRCkgZnJvbSBhbiBBbWF6b24gUzMgYnVja2V0LiBJZiB5b3UncmUgdXBkYXRpbmcgYW4gZXhpc3RpbmcgbWV0cmljcyBjb25maWd1cmF0aW9uLCBub3RlIHRoYXQgdGhpcyBpcyBhIGZ1bGwgcmVwbGFjZW1lbnQgb2YgdGhlIGV4aXN0aW5nIG1ldHJpY3MgY29uZmlndXJhdGlvbi4gSWYgeW91IGRvbid0IGluY2x1ZGUgdGhlIGVsZW1lbnRzIHlvdSB3YW50IHRvIGtlZXAsIHRoZXkgYXJlIGVyYXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUHV0QnVja2V0TWV0cmljc0NvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL1JFU1RCdWNrZXRQVVRNZXRyaWNDb25maWd1cmF0aW9uLmh0bWwpLlxuICovXG5NZXRyaWNzQ29uZmlndXJhdGlvbnM/OiBNZXRyaWNzQ29uZmlndXJhdGlvbltdXG5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uPzogTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblxuT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24/OiBPYmplY3RMb2NrQ29uZmlndXJhdGlvblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGJ1Y2tldCBoYXMgYW4gT2JqZWN0IExvY2sgY29uZmlndXJhdGlvbiBlbmFibGVkLiBFbmFibGUgYGBPYmplY3RMb2NrRW5hYmxlZGBgIHdoZW4geW91IGFwcGx5IGBgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25gYCB0byBhIGJ1Y2tldC5cbiAqL1xuT2JqZWN0TG9ja0VuYWJsZWQ/OiBib29sZWFuXG5Pd25lcnNoaXBDb250cm9scz86IE93bmVyc2hpcENvbnRyb2xzXG5QdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24/OiBQdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb25cblJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbj86IFJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxuLyoqXG4gKiBBbiBhcmJpdHJhcnkgc2V0IG9mIHRhZ3MgKGtleS12YWx1ZSBwYWlycykgZm9yIHRoaXMgUzMgYnVja2V0LlxuICovXG5UYWdzPzogVGFnW11cblZlcnNpb25pbmdDb25maWd1cmF0aW9uPzogVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cbldlYnNpdGVDb25maWd1cmF0aW9uPzogV2Vic2l0ZUNvbmZpZ3VyYXRpb25cbkFybj86IHN0cmluZ1xuRG9tYWluTmFtZT86IHN0cmluZ1xuRHVhbFN0YWNrRG9tYWluTmFtZT86IHN0cmluZ1xuUmVnaW9uYWxEb21haW5OYW1lPzogc3RyaW5nXG5XZWJzaXRlVVJMPzogc3RyaW5nXG59XG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIHRyYW5zZmVyIGFjY2VsZXJhdGlvbiBzdGF0ZSBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIFMzIFRyYW5zZmVyIEFjY2VsZXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvdHJhbnNmZXItYWNjZWxlcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2VsZXJhdGVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSB0cmFuc2ZlciBhY2NlbGVyYXRpb24gc3RhdHVzIG9mIHRoZSBidWNrZXQuXG4gKi9cbkFjY2VsZXJhdGlvblN0YXR1czogKFwiRW5hYmxlZFwiIHwgXCJTdXNwZW5kZWRcIilcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbnkgYW5hbHlzZXMgZm9yIHRoZSBhbmFseXRpY3MgZmlsdGVyIG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSB0YWdzIHRvIHVzZSB3aGVuIGV2YWx1YXRpbmcgYW4gYW5hbHl0aWNzIGZpbHRlci5cbiAqICBUaGUgYW5hbHl0aWNzIG9ubHkgaW5jbHVkZXMgb2JqZWN0cyB0aGF0IG1lZXQgdGhlIGZpbHRlcidzIGNyaXRlcmlhLiBJZiBubyBmaWx0ZXIgaXMgc3BlY2lmaWVkLCBhbGwgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWNrZXQgYXJlIGluY2x1ZGVkIGluIHRoZSBhbmFseXNpcy5cbiAqL1xuVGFnRmlsdGVycz86IFRhZ0ZpbHRlcltdXG5TdG9yYWdlQ2xhc3NBbmFseXNpczogU3RvcmFnZUNsYXNzQW5hbHlzaXNcbi8qKlxuICogVGhlIElEIHRoYXQgaWRlbnRpZmllcyB0aGUgYW5hbHl0aWNzIGNvbmZpZ3VyYXRpb24uXG4gKi9cbklkOiBzdHJpbmdcbi8qKlxuICogVGhlIHByZWZpeCB0aGF0IGFuIG9iamVjdCBtdXN0IGhhdmUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGFuYWx5dGljcyByZXN1bHRzLlxuICovXG5QcmVmaXg/OiBzdHJpbmdcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRhZ3MgdG8gdXNlIHRvIGlkZW50aWZ5IGEgc3Vic2V0IG9mIG9iamVjdHMgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnRmlsdGVyIHtcbi8qKlxuICogVGhlIHRhZyB2YWx1ZS5cbiAqL1xuVmFsdWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFnIGtleS5cbiAqL1xuS2V5OiBzdHJpbmdcbn1cbi8qKlxuICogQ29udGFpbnMgZGF0YSByZWxhdGVkIHRvIGFjY2VzcyBwYXR0ZXJucyB0byBiZSBjb2xsZWN0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHRvIGFuYWx5emUgdGhlIHRyYWRlb2ZmcyBiZXR3ZWVuIGRpZmZlcmVudCBzdG9yYWdlIGNsYXNzZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUNsYXNzQW5hbHlzaXMge1xuRGF0YUV4cG9ydD86IERhdGFFeHBvcnRcbn1cbi8qKlxuICogU3BlY2lmaWVzIGhvdyBkYXRhIHJlbGF0ZWQgdG8gdGhlIHN0b3JhZ2UgY2xhc3MgYW5hbHlzaXMgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQgc2hvdWxkIGJlIGV4cG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFFeHBvcnQge1xuRGVzdGluYXRpb246IERlc3RpbmF0aW9uXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBvdXRwdXQgc2NoZW1hIHRvIHVzZSB3aGVuIGV4cG9ydGluZyBkYXRhLiBNdXN0IGJlIGBgVl8xYGAuXG4gKi9cbk91dHB1dFNjaGVtYVZlcnNpb246IFwiVl8xXCJcbn1cbi8qKlxuICogVGhlIHBsYWNlIHRvIHN0b3JlIHRoZSBkYXRhIGZvciBhbiBhbmFseXNpcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXN0aW5hdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgYnVja2V0IHRvIHdoaWNoIGRhdGEgaXMgZXhwb3J0ZWQuXG4gKi9cbkJ1Y2tldEFybjogc3RyaW5nXG4vKipcbiAqIFRoZSBhY2NvdW50IElEIHRoYXQgb3ducyB0aGUgZGVzdGluYXRpb24gUzMgYnVja2V0LiBJZiBubyBhY2NvdW50IElEIGlzIHByb3ZpZGVkLCB0aGUgb3duZXIgaXMgbm90IHZhbGlkYXRlZCBiZWZvcmUgZXhwb3J0aW5nIGRhdGEuXG4gKiAgICBBbHRob3VnaCB0aGlzIHZhbHVlIGlzIG9wdGlvbmFsLCB3ZSBzdHJvbmdseSByZWNvbW1lbmQgdGhhdCB5b3Ugc2V0IGl0IHRvIGhlbHAgcHJldmVudCBwcm9ibGVtcyBpZiB0aGUgZGVzdGluYXRpb24gYnVja2V0IG93bmVyc2hpcCBjaGFuZ2VzLlxuICovXG5CdWNrZXRBY2NvdW50SWQ/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBmaWxlIGZvcm1hdCB1c2VkIHdoZW4gZXhwb3J0aW5nIGRhdGEgdG8gQW1hem9uIFMzLlxuICogICAqQWxsb3dlZCB2YWx1ZXMqOiBgYENTVmBgIHwgYGBPUkNgYCB8IGBgUGFycXVldGBgXG4gKi9cbkZvcm1hdDogKFwiQ1NWXCIgfCBcIk9SQ1wiIHwgXCJQYXJxdWV0XCIpXG4vKipcbiAqIFRoZSBwcmVmaXggdG8gdXNlIHdoZW4gZXhwb3J0aW5nIGRhdGEuIFRoZSBwcmVmaXggaXMgcHJlcGVuZGVkIHRvIGFsbCByZXN1bHRzLlxuICovXG5QcmVmaXg/OiBzdHJpbmdcbn1cbi8qKlxuICogU3BlY2lmaWVzIGRlZmF1bHQgZW5jcnlwdGlvbiBmb3IgYSBidWNrZXQgdXNpbmcgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB3aXRoIEFtYXpvbiBTMy1tYW5hZ2VkIGtleXMgKFNTRS1TMyksIEFXUyBLTVMtbWFuYWdlZCBrZXlzIChTU0UtS01TKSwgb3IgZHVhbC1sYXllciBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHdpdGggS01TLW1hbmFnZWQga2V5cyAoRFNTRS1LTVMpLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFtYXpvbiBTMyBkZWZhdWx0IGVuY3J5cHRpb24gZmVhdHVyZSwgc2VlIFtBbWF6b24gUzMgRGVmYXVsdCBFbmNyeXB0aW9uIGZvciBTMyBCdWNrZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9idWNrZXQtZW5jcnlwdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRFbmNyeXB0aW9uIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlLWVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqL1xuU2VydmVyU2lkZUVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBTZXJ2ZXJTaWRlRW5jcnlwdGlvblJ1bGVbXVxufVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uLlxuICogICAgKyAgICpHZW5lcmFsIHB1cnBvc2UgYnVja2V0cyogLSBJZiB5b3UncmUgc3BlY2lmeWluZyBhIGN1c3RvbWVyIG1hbmFnZWQgS01TIGtleSwgd2UgcmVjb21tZW5kIHVzaW5nIGEgZnVsbHkgcXVhbGlmaWVkIEtNUyBrZXkgQVJOLiBJZiB5b3UgdXNlIGEgS01TIGtleSBhbGlhcyBpbnN0ZWFkLCB0aGVuIEtNUyByZXNvbHZlcyB0aGUga2V5IHdpdGhpbiB0aGUgcmVxdWVzdGVy4oCZcyBhY2NvdW50LiBUaGlzIGJlaGF2aW9yIGNhbiByZXN1bHQgaW4gZGF0YSB0aGF0J3MgZW5jcnlwdGVkIHdpdGggYSBLTVMga2V5IHRoYXQgYmVsb25ncyB0byB0aGUgcmVxdWVzdGVyLCBhbmQgbm90IHRoZSBidWNrZXQgb3duZXIuXG4gKiAgICsgICAqRGlyZWN0b3J5IGJ1Y2tldHMqIC0gV2hlbiB5b3Ugc3BlY2lmeSBhbiBbY3VzdG9tZXIgbWFuYWdlZCBrZXldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9rbXMvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NvbmNlcHRzLmh0bWwjY3VzdG9tZXItY21rKSBmb3IgZW5jcnlwdGlvbiBpbiB5b3VyIGRpcmVjdG9yeSBidWNrZXQsIG9ubHkgdXNlIHRoZSBrZXkgSUQgb3Iga2V5IEFSTi4gVGhlIGtleSBhbGlhcyBmb3JtYXQgb2YgdGhlIEtNUyBrZXkgaXNuJ3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclNpZGVFbmNyeXB0aW9uUnVsZSB7XG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIEFtYXpvbiBTMyBzaG91bGQgdXNlIGFuIFMzIEJ1Y2tldCBLZXkgd2l0aCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHVzaW5nIEtNUyAoU1NFLUtNUykgZm9yIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuIEV4aXN0aW5nIG9iamVjdHMgYXJlIG5vdCBhZmZlY3RlZC4gU2V0dGluZyB0aGUgYGBCdWNrZXRLZXlFbmFibGVkYGAgZWxlbWVudCB0byBgYHRydWVgYCBjYXVzZXMgQW1hem9uIFMzIHRvIHVzZSBhbiBTMyBCdWNrZXQgS2V5LiBCeSBkZWZhdWx0LCBTMyBCdWNrZXQgS2V5IGlzIG5vdCBlbmFibGVkLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBTMyBCdWNrZXQgS2V5c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvYnVja2V0LWtleS5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuQnVja2V0S2V5RW5hYmxlZD86IGJvb2xlYW5cblNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0PzogU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHRcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdG8gYXBwbHkgdG8gbmV3IG9iamVjdHMgaW4gdGhlIGJ1Y2tldC4gSWYgYSBQVVQgT2JqZWN0IHJlcXVlc3QgZG9lc24ndCBzcGVjaWZ5IGFueSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uLCB0aGlzIGRlZmF1bHQgZW5jcnlwdGlvbiB3aWxsIGJlIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQge1xuLyoqXG4gKiBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBjdXN0b21lciBtYW5hZ2VkIGtleSBJRCB0byB1c2UgZm9yIHRoZSBkZWZhdWx0IGVuY3J5cHRpb24uIFxuICogICAgKyAgICpHZW5lcmFsIHB1cnBvc2UgYnVja2V0cyogLSBUaGlzIHBhcmFtZXRlciBpcyBhbGxvd2VkIGlmIGFuZCBvbmx5IGlmIGBgU1NFQWxnb3JpdGhtYGAgaXMgc2V0IHRvIGBgYXdzOmttc2BgIG9yIGBgYXdzOmttczpkc3NlYGAuXG4gKiAgICsgICAqRGlyZWN0b3J5IGJ1Y2tldHMqIC0gVGhpcyBwYXJhbWV0ZXIgaXMgYWxsb3dlZCBpZiBhbmQgb25seSBpZiBgYFNTRUFsZ29yaXRobWBgIGlzIHNldCB0byBgYGF3czprbXNgYC5cbiAqICAgXG4gKiAgIFlvdSBjYW4gc3BlY2lmeSB0aGUga2V5IElELCBrZXkgYWxpYXMsIG9yIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgS01TIGtleS5cbiAqICAgKyAgS2V5IElEOiBgYDEyMzRhYmNkLTEyYWItMzRjZC01NmVmLTEyMzQ1Njc4OTBhYmBgIFxuICogICArICBLZXkgQVJOOiBgYGFybjphd3M6a21zOnVzLWVhc3QtMjoxMTExMjIyMjMzMzM6a2V5LzEyMzRhYmNkLTEyYWItMzRjZC01NmVmLTEyMzQ1Njc4OTBhYmBgIFxuICogICArICBLZXkgQWxpYXM6IGBgYWxpYXMvYWxpYXMtbmFtZWBgIFxuICogICBcbiAqICBJZiB5b3UgYXJlIHVzaW5nIGVuY3J5cHRpb24gd2l0aCBjcm9zcy1hY2NvdW50IG9yIEFXUyBzZXJ2aWNlIG9wZXJhdGlvbnMsIHlvdSBtdXN0IHVzZSBhIGZ1bGx5IHF1YWxpZmllZCBLTVMga2V5IEFSTi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgZW5jcnlwdGlvbiBmb3IgY3Jvc3MtYWNjb3VudCBvcGVyYXRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9idWNrZXQtZW5jcnlwdGlvbi5odG1sI2J1Y2tldC1lbmNyeXB0aW9uLXVwZGF0ZS1idWNrZXQtcG9saWN5KS5cbiAqICAgICsgICAqR2VuZXJhbCBwdXJwb3NlIGJ1Y2tldHMqIC0gSWYgeW91J3JlIHNwZWNpZnlpbmcgYSBjdXN0b21lciBtYW5hZ2VkIEtNUyBrZXksIHdlIHJlY29tbWVuZCB1c2luZyBhIGZ1bGx5IHF1YWxpZmllZCBLTVMga2V5IEFSTi4gSWYgeW91IHVzZSBhIEtNUyBrZXkgYWxpYXMgaW5zdGVhZCwgdGhlbiBLTVMgcmVzb2x2ZXMgdGhlIGtleSB3aXRoaW4gdGhlIHJlcXVlc3RlcuKAmXMgYWNjb3VudC4gVGhpcyBiZWhhdmlvciBjYW4gcmVzdWx0IGluIGRhdGEgdGhhdCdzIGVuY3J5cHRlZCB3aXRoIGEgS01TIGtleSB0aGF0IGJlbG9uZ3MgdG8gdGhlIHJlcXVlc3RlciwgYW5kIG5vdCB0aGUgYnVja2V0IG93bmVyLiBBbHNvLCBpZiB5b3UgdXNlIGEga2V5IElELCB5b3UgY2FuIHJ1biBpbnRvIGEgTG9nRGVzdGluYXRpb24gdW5kZWxpdmVyYWJsZSBlcnJvciB3aGVuIGNyZWF0aW5nIGEgVlBDIGZsb3cgbG9nLiBcbiAqICAgKyAgICpEaXJlY3RvcnkgYnVja2V0cyogLSBXaGVuIHlvdSBzcGVjaWZ5IGFuIFtjdXN0b21lciBtYW5hZ2VkIGtleV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ttcy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29uY2VwdHMuaHRtbCNjdXN0b21lci1jbWspIGZvciBlbmNyeXB0aW9uIGluIHlvdXIgZGlyZWN0b3J5IGJ1Y2tldCwgb25seSB1c2UgdGhlIGtleSBJRCBvciBrZXkgQVJOLiBUaGUga2V5IGFsaWFzIGZvcm1hdCBvZiB0aGUgS01TIGtleSBpc24ndCBzdXBwb3J0ZWQuXG4gKiAgIFxuICogICAgQW1hem9uIFMzIG9ubHkgc3VwcG9ydHMgc3ltbWV0cmljIGVuY3J5cHRpb24gS01TIGtleXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FzeW1tZXRyaWMga2V5cyBpbiBLTVNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS8va21zL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zeW1tZXRyaWMtYXN5bW1ldHJpYy5odG1sKSBpbiB0aGUgKktleSBNYW5hZ2VtZW50IFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuS01TTWFzdGVyS2V5SUQ/OiBzdHJpbmdcbi8qKlxuICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiBhbGdvcml0aG0gdG8gdXNlIGZvciB0aGUgZGVmYXVsdCBlbmNyeXB0aW9uLlxuICogICBGb3IgZGlyZWN0b3J5IGJ1Y2tldHMsIHRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgdmFsdWVzIGZvciBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uOiBgYEFFUzI1NmBgIGFuZCBgYGF3czprbXNgYC5cbiAqL1xuU1NFQWxnb3JpdGhtOiAoXCJhd3M6a21zXCIgfCBcIkFFUzI1NlwiIHwgXCJhd3M6a21zOmRzc2VcIilcbn1cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBjcm9zcy1vcmlnaW4gYWNjZXNzIGNvbmZpZ3VyYXRpb24gZm9yIG9iamVjdHMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRW5hYmxpbmcgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2NvcnMuaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29yc0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBBIHNldCBvZiBvcmlnaW5zIGFuZCBtZXRob2RzIChjcm9zcy1vcmlnaW4gYWNjZXNzIHRoYXQgeW91IHdhbnQgdG8gYWxsb3cpLiBZb3UgY2FuIGFkZCB1cCB0byAxMDAgcnVsZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbkNvcnNSdWxlczogQ29yc1J1bGVbXVxufVxuLyoqXG4gKiBTcGVjaWZpZXMgYSBjcm9zcy1vcmlnaW4gYWNjZXNzIHJ1bGUgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29yc1J1bGUge1xuLyoqXG4gKiBIZWFkZXJzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgYGBBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnNgYCBoZWFkZXIuIFRoZXNlIGhlYWRlcnMgYXJlIGFsbG93ZWQgaW4gYSBwcmVmbGlnaHQgT1BUSU9OUyByZXF1ZXN0LiBJbiByZXNwb25zZSB0byBhbnkgcHJlZmxpZ2h0IE9QVElPTlMgcmVxdWVzdCwgQW1hem9uIFMzIHJldHVybnMgYW55IHJlcXVlc3RlZCBoZWFkZXJzIHRoYXQgYXJlIGFsbG93ZWQuXG4gKi9cbkFsbG93ZWRIZWFkZXJzPzogc3RyaW5nW11cbi8qKlxuICogQW4gSFRUUCBtZXRob2QgdGhhdCB5b3UgYWxsb3cgdGhlIG9yaWdpbiB0byBydW4uXG4gKiAgICpBbGxvd2VkIHZhbHVlcyo6IGBgR0VUYGAgfCBgYFBVVGBgIHwgYGBIRUFEYGAgfCBgYFBPU1RgYCB8IGBgREVMRVRFYGBcbiAqL1xuQWxsb3dlZE1ldGhvZHM6IChcIkdFVFwiIHwgXCJQVVRcIiB8IFwiSEVBRFwiIHwgXCJQT1NUXCIgfCBcIkRFTEVURVwiKVtdXG4vKipcbiAqIE9uZSBvciBtb3JlIG9yaWdpbnMgeW91IHdhbnQgY3VzdG9tZXJzIHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBidWNrZXQgZnJvbS5cbiAqL1xuQWxsb3dlZE9yaWdpbnM6IHN0cmluZ1tdXG4vKipcbiAqIE9uZSBvciBtb3JlIGhlYWRlcnMgaW4gdGhlIHJlc3BvbnNlIHRoYXQgeW91IHdhbnQgY3VzdG9tZXJzIHRvIGJlIGFibGUgdG8gYWNjZXNzIGZyb20gdGhlaXIgYXBwbGljYXRpb25zIChmb3IgZXhhbXBsZSwgZnJvbSBhIEphdmFTY3JpcHQgYGBYTUxIdHRwUmVxdWVzdGBgIG9iamVjdCkuXG4gKi9cbkV4cG9zZWRIZWFkZXJzPzogc3RyaW5nW11cbi8qKlxuICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBydWxlLiBUaGUgdmFsdWUgbXVzdCBiZSBubyBtb3JlIHRoYW4gMjU1IGNoYXJhY3RlcnMuXG4gKi9cbklkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3VyIGJyb3dzZXIgaXMgdG8gY2FjaGUgdGhlIHByZWZsaWdodCByZXNwb25zZSBmb3IgdGhlIHNwZWNpZmllZCByZXNvdXJjZS5cbiAqL1xuTWF4QWdlPzogbnVtYmVyXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBjb25maWd1cmF0aW9uIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBzdG9yYWdlIGNsYXNzLCBzZWUgW1N0b3JhZ2UgY2xhc3MgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW1pemluZyBmcmVxdWVudGx5IGFuZCBpbmZyZXF1ZW50bHkgYWNjZXNzZWQgb2JqZWN0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvc3RvcmFnZS1jbGFzcy1pbnRyby5odG1sI3NjLWR5bmFtaWMtZGF0YS1hY2Nlc3MpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVsbGlnZW50VGllcmluZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgSUQgdXNlZCB0byBpZGVudGlmeSB0aGUgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBjb25maWd1cmF0aW9uLlxuICovXG5JZDogc3RyaW5nXG4vKipcbiAqIEFuIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggdGhhdCBpZGVudGlmaWVzIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLlxuICovXG5QcmVmaXg/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBzdGF0dXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKi9cblN0YXR1czogKFwiRGlzYWJsZWRcIiB8IFwiRW5hYmxlZFwiKVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3IgYSBrZXktdmFsdWUgcGFpci5cbiAqL1xuVGFnRmlsdGVycz86IFRhZ0ZpbHRlcltdXG4vKipcbiAqIFNwZWNpZmllcyBhIGxpc3Qgb2YgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBzdG9yYWdlIGNsYXNzIHRpZXJzIGluIHRoZSBjb25maWd1cmF0aW9uLiBBdCBsZWFzdCBvbmUgdGllciBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxpc3QuIEF0IG1vc3QsIHlvdSBjYW4gc3BlY2lmeSB0d28gdGllcnMgaW4gdGhlIGxpc3QsIG9uZSBmb3IgZWFjaCBhdmFpbGFibGUgQWNjZXNzVGllcjogYGBBUkNISVZFX0FDQ0VTU2BgIGFuZCBgYERFRVBfQVJDSElWRV9BQ0NFU1NgYC5cbiAqICAgWW91IG9ubHkgbmVlZCBJbnRlbGxpZ2VudCBUaWVyaW5nIENvbmZpZ3VyYXRpb24gZW5hYmxlZCBvbiBhIGJ1Y2tldCBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IG1vdmUgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIEludGVsbGlnZW50LVRpZXJpbmcgc3RvcmFnZSBjbGFzcyB0byBBcmNoaXZlIEFjY2VzcyBvciBEZWVwIEFyY2hpdmUgQWNjZXNzIHRpZXJzLlxuICovXG5UaWVyaW5nczogVGllcmluZ1tdXG59XG4vKipcbiAqIFRoZSBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIHN0b3JhZ2UgY2xhc3MgaXMgZGVzaWduZWQgdG8gb3B0aW1pemUgc3RvcmFnZSBjb3N0cyBieSBhdXRvbWF0aWNhbGx5IG1vdmluZyBkYXRhIHRvIHRoZSBtb3N0IGNvc3QtZWZmZWN0aXZlIHN0b3JhZ2UgYWNjZXNzIHRpZXIsIHdpdGhvdXQgYWRkaXRpb25hbCBvcGVyYXRpb25hbCBvdmVyaGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWVyaW5nIHtcbi8qKlxuICogUzMgSW50ZWxsaWdlbnQtVGllcmluZyBhY2Nlc3MgdGllci4gU2VlIFtTdG9yYWdlIGNsYXNzIGZvciBhdXRvbWF0aWNhbGx5IG9wdGltaXppbmcgZnJlcXVlbnRseSBhbmQgaW5mcmVxdWVudGx5IGFjY2Vzc2VkIG9iamVjdHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3N0b3JhZ2UtY2xhc3MtaW50cm8uaHRtbCNzYy1keW5hbWljLWRhdGEtYWNjZXNzKSBmb3IgYSBsaXN0IG9mIGFjY2VzcyB0aWVycyBpbiB0aGUgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBzdG9yYWdlIGNsYXNzLlxuICovXG5BY2Nlc3NUaWVyOiAoXCJBUkNISVZFX0FDQ0VTU1wiIHwgXCJERUVQX0FSQ0hJVkVfQUNDRVNTXCIpXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgZGF5cyBvZiBubyBhY2Nlc3MgYWZ0ZXIgd2hpY2ggYW4gb2JqZWN0IHdpbGwgYmUgZWxpZ2libGUgdG8gYmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRpZXIuIFRoZSBtaW5pbXVtIG51bWJlciBvZiBkYXlzIHNwZWNpZmllZCBmb3IgQXJjaGl2ZSBBY2Nlc3MgdGllciBtdXN0IGJlIGF0IGxlYXN0IDkwIGRheXMgYW5kIERlZXAgQXJjaGl2ZSBBY2Nlc3MgdGllciBtdXN0IGJlIGF0IGxlYXN0IDE4MCBkYXlzLiBUaGUgbWF4aW11bSBjYW4gYmUgdXAgdG8gMiB5ZWFycyAoNzMwIGRheXMpLlxuICovXG5EYXlzOiBudW1iZXJcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBpbnZlbnRvcnkgY29uZmlndXJhdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbR0VUIEJ1Y2tldCBpbnZlbnRvcnldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL1JFU1RCdWNrZXRHRVRJbnZlbnRvcnlDb25maWcuaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgQVBJIFJlZmVyZW5jZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW52ZW50b3J5Q29uZmlndXJhdGlvbiB7XG5EZXN0aW5hdGlvbjogRGVzdGluYXRpb24xXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBpbnZlbnRvcnkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gSWYgc2V0IHRvIGBgVHJ1ZWBgLCBhbiBpbnZlbnRvcnkgbGlzdCBpcyBnZW5lcmF0ZWQuIElmIHNldCB0byBgYEZhbHNlYGAsIG5vIGludmVudG9yeSBsaXN0IGlzIGdlbmVyYXRlZC5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuLyoqXG4gKiBUaGUgSUQgdXNlZCB0byBpZGVudGlmeSB0aGUgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbklkOiBzdHJpbmdcbi8qKlxuICogT2JqZWN0IHZlcnNpb25zIHRvIGluY2x1ZGUgaW4gdGhlIGludmVudG9yeSBsaXN0LiBJZiBzZXQgdG8gYGBBbGxgYCwgdGhlIGxpc3QgaW5jbHVkZXMgYWxsIHRoZSBvYmplY3QgdmVyc2lvbnMsIHdoaWNoIGFkZHMgdGhlIHZlcnNpb24tcmVsYXRlZCBmaWVsZHMgYGBWZXJzaW9uSWRgYCwgYGBJc0xhdGVzdGBgLCBhbmQgYGBEZWxldGVNYXJrZXJgYCB0byB0aGUgbGlzdC4gSWYgc2V0IHRvIGBgQ3VycmVudGBgLCB0aGUgbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZXNlIHZlcnNpb24tcmVsYXRlZCBmaWVsZHMuXG4gKi9cbkluY2x1ZGVkT2JqZWN0VmVyc2lvbnM6IChcIkFsbFwiIHwgXCJDdXJyZW50XCIpXG4vKipcbiAqIENvbnRhaW5zIHRoZSBvcHRpb25hbCBmaWVsZHMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGludmVudG9yeSByZXN1bHRzLlxuICovXG5PcHRpb25hbEZpZWxkcz86IChcIlNpemVcIiB8IFwiTGFzdE1vZGlmaWVkRGF0ZVwiIHwgXCJTdG9yYWdlQ2xhc3NcIiB8IFwiRVRhZ1wiIHwgXCJJc011bHRpcGFydFVwbG9hZGVkXCIgfCBcIlJlcGxpY2F0aW9uU3RhdHVzXCIgfCBcIkVuY3J5cHRpb25TdGF0dXNcIiB8IFwiT2JqZWN0TG9ja1JldGFpblVudGlsRGF0ZVwiIHwgXCJPYmplY3RMb2NrTW9kZVwiIHwgXCJPYmplY3RMb2NrTGVnYWxIb2xkU3RhdHVzXCIgfCBcIkludGVsbGlnZW50VGllcmluZ0FjY2Vzc1RpZXJcIiB8IFwiQnVja2V0S2V5U3RhdHVzXCIgfCBcIkNoZWNrc3VtQWxnb3JpdGhtXCIgfCBcIk9iamVjdEFjY2Vzc0NvbnRyb2xMaXN0XCIgfCBcIk9iamVjdE93bmVyXCIpW11cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBpbnZlbnRvcnkgZmlsdGVyIHByZWZpeC5cbiAqL1xuUHJlZml4Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgc2NoZWR1bGUgZm9yIGdlbmVyYXRpbmcgaW52ZW50b3J5IHJlc3VsdHMuXG4gKi9cblNjaGVkdWxlRnJlcXVlbmN5OiAoXCJEYWlseVwiIHwgXCJXZWVrbHlcIilcbn1cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCB0aGUgaW52ZW50b3J5IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdGluYXRpb24xIHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBidWNrZXQgdG8gd2hpY2ggZGF0YSBpcyBleHBvcnRlZC5cbiAqL1xuQnVja2V0QXJuOiBzdHJpbmdcbi8qKlxuICogVGhlIGFjY291bnQgSUQgdGhhdCBvd25zIHRoZSBkZXN0aW5hdGlvbiBTMyBidWNrZXQuIElmIG5vIGFjY291bnQgSUQgaXMgcHJvdmlkZWQsIHRoZSBvd25lciBpcyBub3QgdmFsaWRhdGVkIGJlZm9yZSBleHBvcnRpbmcgZGF0YS5cbiAqICAgIEFsdGhvdWdoIHRoaXMgdmFsdWUgaXMgb3B0aW9uYWwsIHdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGF0IHlvdSBzZXQgaXQgdG8gaGVscCBwcmV2ZW50IHByb2JsZW1zIGlmIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQgb3duZXJzaGlwIGNoYW5nZXMuXG4gKi9cbkJ1Y2tldEFjY291bnRJZD86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGZpbGUgZm9ybWF0IHVzZWQgd2hlbiBleHBvcnRpbmcgZGF0YSB0byBBbWF6b24gUzMuXG4gKiAgICpBbGxvd2VkIHZhbHVlcyo6IGBgQ1NWYGAgfCBgYE9SQ2BgIHwgYGBQYXJxdWV0YGBcbiAqL1xuRm9ybWF0OiAoXCJDU1ZcIiB8IFwiT1JDXCIgfCBcIlBhcnF1ZXRcIilcbi8qKlxuICogVGhlIHByZWZpeCB0byB1c2Ugd2hlbiBleHBvcnRpbmcgZGF0YS4gVGhlIHByZWZpeCBpcyBwcmVwZW5kZWQgdG8gYWxsIHJlc3VsdHMuXG4gKi9cblByZWZpeD86IHN0cmluZ1xufVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGZvciBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW09iamVjdCBMaWZlY3ljbGUgTWFuYWdlbWVudF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvb2JqZWN0LWxpZmVjeWNsZS1tZ210Lmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpZmVjeWNsZUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBBIGxpZmVjeWNsZSBydWxlIGZvciBpbmRpdmlkdWFsIG9iamVjdHMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqL1xuUnVsZXM6IFJ1bGVbXVxuVHJhbnNpdGlvbkRlZmF1bHRNaW5pbXVtT2JqZWN0U2l6ZT86IChcInZhcmllc19ieV9zdG9yYWdlX2NsYXNzXCIgfCBcImFsbF9zdG9yYWdlX2NsYXNzZXNfMTI4S1wiKVxufVxuLyoqXG4gKiBTcGVjaWZpZXMgbGlmZWN5Y2xlIHJ1bGVzIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtQdXQgQnVja2V0IExpZmVjeWNsZSBDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUbGlmZWN5Y2xlLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIEFQSSBSZWZlcmVuY2UqLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogYGBBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRgYCwgYGBFeHBpcmF0aW9uRGF0ZWBgLCBgYEV4cGlyYXRpb25JbkRheXNgYCwgYGBOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25JbkRheXNgYCwgYGBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25gYCwgYGBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zYGAsIGBgVHJhbnNpdGlvbmBgLCBvciBgYFRyYW5zaXRpb25zYGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZSB7XG5BYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQ/OiBBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRcbi8qKlxuICogSW5kaWNhdGVzIHdoZW4gb2JqZWN0cyBhcmUgZGVsZXRlZCBmcm9tIEFtYXpvbiBTMyBhbmQgQW1hem9uIFMzIEdsYWNpZXIuIFRoZSBkYXRlIHZhbHVlIG11c3QgYmUgaW4gSVNPIDg2MDEgZm9ybWF0LiBUaGUgdGltZSBpcyBhbHdheXMgbWlkbmlnaHQgVVRDLiBJZiB5b3Ugc3BlY2lmeSBhbiBleHBpcmF0aW9uIGFuZCB0cmFuc2l0aW9uIHRpbWUsIHlvdSBtdXN0IHVzZSB0aGUgc2FtZSB0aW1lIHVuaXQgZm9yIGJvdGggcHJvcGVydGllcyAoZWl0aGVyIGluIGRheXMgb3IgYnkgZGF0ZSkuIFRoZSBleHBpcmF0aW9uIHRpbWUgbXVzdCBhbHNvIGJlIGxhdGVyIHRoYW4gdGhlIHRyYW5zaXRpb24gdGltZS5cbiAqL1xuRXhwaXJhdGlvbkRhdGU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZGF5cyBhZnRlciBjcmVhdGlvbiB3aGVuIG9iamVjdHMgYXJlIGRlbGV0ZWQgZnJvbSBBbWF6b24gUzMgYW5kIEFtYXpvbiBTMyBHbGFjaWVyLiBJZiB5b3Ugc3BlY2lmeSBhbiBleHBpcmF0aW9uIGFuZCB0cmFuc2l0aW9uIHRpbWUsIHlvdSBtdXN0IHVzZSB0aGUgc2FtZSB0aW1lIHVuaXQgZm9yIGJvdGggcHJvcGVydGllcyAoZWl0aGVyIGluIGRheXMgb3IgYnkgZGF0ZSkuIFRoZSBleHBpcmF0aW9uIHRpbWUgbXVzdCBhbHNvIGJlIGxhdGVyIHRoYW4gdGhlIHRyYW5zaXRpb24gdGltZS5cbiAqL1xuRXhwaXJhdGlvbkluRGF5cz86IG51bWJlclxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBBbWF6b24gUzMgd2lsbCByZW1vdmUgYSBkZWxldGUgbWFya2VyIHdpdGhvdXQgYW55IG5vbmN1cnJlbnQgdmVyc2lvbnMuIElmIHNldCB0byB0cnVlLCB0aGUgZGVsZXRlIG1hcmtlciB3aWxsIGJlIHJlbW92ZWQgaWYgdGhlcmUgYXJlIG5vIG5vbmN1cnJlbnQgdmVyc2lvbnMuIFRoaXMgY2Fubm90IGJlIHNwZWNpZmllZCB3aXRoIGBgRXhwaXJhdGlvbkluRGF5c2BgLCBgYEV4cGlyYXRpb25EYXRlYGAsIG9yIGBgVGFnRmlsdGVyc2BgLlxuICovXG5FeHBpcmVkT2JqZWN0RGVsZXRlTWFya2VyPzogYm9vbGVhblxuLyoqXG4gKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJ1bGUuIFRoZSB2YWx1ZSBjYW4ndCBiZSBsb25nZXIgdGhhbiAyNTUgY2hhcmFjdGVycy5cbiAqL1xuSWQ/OiBzdHJpbmdcbi8qKlxuICogKERlcHJlY2F0ZWQuKSBGb3IgYnVja2V0cyB3aXRoIHZlcnNpb25pbmcgZW5hYmxlZCAob3Igc3VzcGVuZGVkKSwgc3BlY2lmaWVzIHRoZSB0aW1lLCBpbiBkYXlzLCBiZXR3ZWVuIHdoZW4gYSBuZXcgdmVyc2lvbiBvZiB0aGUgb2JqZWN0IGlzIHVwbG9hZGVkIHRvIHRoZSBidWNrZXQgYW5kIHdoZW4gb2xkIHZlcnNpb25zIG9mIHRoZSBvYmplY3QgZXhwaXJlLiBXaGVuIG9iamVjdCB2ZXJzaW9ucyBleHBpcmUsIEFtYXpvbiBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZW0uIElmIHlvdSBzcGVjaWZ5IGEgdHJhbnNpdGlvbiBhbmQgZXhwaXJhdGlvbiB0aW1lLCB0aGUgZXhwaXJhdGlvbiB0aW1lIG11c3QgYmUgbGF0ZXIgdGhhbiB0aGUgdHJhbnNpdGlvbiB0aW1lLlxuICovXG5Ob25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25JbkRheXM/OiBudW1iZXJcbk5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbj86IE5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvblxuTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uPzogTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uXG4vKipcbiAqIEZvciBidWNrZXRzIHdpdGggdmVyc2lvbmluZyBlbmFibGVkIChvciBzdXNwZW5kZWQpLCBvbmUgb3IgbW9yZSB0cmFuc2l0aW9uIHJ1bGVzIHRoYXQgc3BlY2lmeSB3aGVuIG5vbi1jdXJyZW50IG9iamVjdHMgdHJhbnNpdGlvbiB0byBhIHNwZWNpZmllZCBzdG9yYWdlIGNsYXNzLiBJZiB5b3Ugc3BlY2lmeSBhIHRyYW5zaXRpb24gYW5kIGV4cGlyYXRpb24gdGltZSwgdGhlIGV4cGlyYXRpb24gdGltZSBtdXN0IGJlIGxhdGVyIHRoYW4gdGhlIHRyYW5zaXRpb24gdGltZS4gSWYgeW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25gYCBwcm9wZXJ0eS5cbiAqL1xuTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucz86IE5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbjFbXVxuLyoqXG4gKiBPYmplY3Qga2V5IHByZWZpeCB0aGF0IGlkZW50aWZpZXMgb25lIG9yIG1vcmUgb2JqZWN0cyB0byB3aGljaCB0aGlzIHJ1bGUgYXBwbGllcy5cbiAqICAgUmVwbGFjZW1lbnQgbXVzdCBiZSBtYWRlIGZvciBvYmplY3Qga2V5cyBjb250YWluaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoc3VjaCBhcyBjYXJyaWFnZSByZXR1cm5zKSB3aGVuIHVzaW5nIFhNTCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbWE1MIHJlbGF0ZWQgb2JqZWN0IGtleSBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWtleXMuaHRtbCNvYmplY3Qta2V5LXhtbC1yZWxhdGVkLWNvbnN0cmFpbnRzKS5cbiAqL1xuUHJlZml4Pzogc3RyaW5nXG4vKipcbiAqIElmIGBgRW5hYmxlZGBgLCB0aGUgcnVsZSBpcyBjdXJyZW50bHkgYmVpbmcgYXBwbGllZC4gSWYgYGBEaXNhYmxlZGBgLCB0aGUgcnVsZSBpcyBub3QgY3VycmVudGx5IGJlaW5nIGFwcGxpZWQuXG4gKi9cblN0YXR1czogKFwiRW5hYmxlZFwiIHwgXCJEaXNhYmxlZFwiKVxuLyoqXG4gKiBUYWdzIHRvIHVzZSB0byBpZGVudGlmeSBhIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSBsaWZlY3ljbGUgcnVsZSBhcHBsaWVzLlxuICovXG5UYWdGaWx0ZXJzPzogVGFnRmlsdGVyW11cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIG9iamVjdCBzaXplIGluIGJ5dGVzIGZvciB0aGlzIHJ1bGUgdG8gYXBwbHkgdG8uIE9iamVjdHMgbXVzdCBiZSBsYXJnZXIgdGhhbiB0aGlzIHZhbHVlIGluIGJ5dGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzaXplIGJhc2VkIHJ1bGVzLCBzZWUgW0xpZmVjeWNsZSBjb25maWd1cmF0aW9uIHVzaW5nIHNpemUtYmFzZWQgcnVsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2xpZmVjeWNsZS1jb25maWd1cmF0aW9uLWV4YW1wbGVzLmh0bWwjbGMtc2l6ZS1ydWxlcykgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbk9iamVjdFNpemVHcmVhdGVyVGhhbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gb2JqZWN0IHNpemUgaW4gYnl0ZXMgZm9yIHRoaXMgcnVsZSB0byBhcHBseSB0by4gT2JqZWN0cyBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGlzIHZhbHVlIGluIGJ5dGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzaXplZCBiYXNlZCBydWxlcywgc2VlIFtMaWZlY3ljbGUgY29uZmlndXJhdGlvbiB1c2luZyBzaXplLWJhc2VkIHJ1bGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9saWZlY3ljbGUtY29uZmlndXJhdGlvbi1leGFtcGxlcy5odG1sI2xjLXNpemUtcnVsZXMpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5PYmplY3RTaXplTGVzc1RoYW4/OiBzdHJpbmdcblRyYW5zaXRpb24/OiBUcmFuc2l0aW9uXG4vKipcbiAqIE9uZSBvciBtb3JlIHRyYW5zaXRpb24gcnVsZXMgdGhhdCBzcGVjaWZ5IHdoZW4gYW4gb2JqZWN0IHRyYW5zaXRpb25zIHRvIGEgc3BlY2lmaWVkIHN0b3JhZ2UgY2xhc3MuIElmIHlvdSBzcGVjaWZ5IGFuIGV4cGlyYXRpb24gYW5kIHRyYW5zaXRpb24gdGltZSwgeW91IG11c3QgdXNlIHRoZSBzYW1lIHRpbWUgdW5pdCBmb3IgYm90aCBwcm9wZXJ0aWVzIChlaXRoZXIgaW4gZGF5cyBvciBieSBkYXRlKS4gVGhlIGV4cGlyYXRpb24gdGltZSBtdXN0IGFsc28gYmUgbGF0ZXIgdGhhbiB0aGUgdHJhbnNpdGlvbiB0aW1lLiBJZiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoZSBgYFRyYW5zaXRpb25gYCBwcm9wZXJ0eS5cbiAqL1xuVHJhbnNpdGlvbnM/OiBUcmFuc2l0aW9uMVtdXG59XG4vKipcbiAqIFNwZWNpZmllcyBhIGxpZmVjeWNsZSBydWxlIHRoYXQgc3RvcHMgaW5jb21wbGV0ZSBtdWx0aXBhcnQgdXBsb2FkcyB0byBhbiBBbWF6b24gUzMgYnVja2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZCB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRheXMgYWZ0ZXIgd2hpY2ggQW1hem9uIFMzIHN0b3BzIGFuIGluY29tcGxldGUgbXVsdGlwYXJ0IHVwbG9hZC5cbiAqL1xuRGF5c0FmdGVySW5pdGlhdGlvbjogbnVtYmVyXG59XG4vKipcbiAqIFNwZWNpZmllcyB3aGVuIG5vbmN1cnJlbnQgb2JqZWN0IHZlcnNpb25zIGV4cGlyZS4gVXBvbiBleHBpcmF0aW9uLCBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucy4gWW91IHNldCB0aGlzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGFjdGlvbiBvbiBhIGJ1Y2tldCB0aGF0IGhhcyB2ZXJzaW9uaW5nIGVuYWJsZWQgKG9yIHN1c3BlbmRlZCkgdG8gcmVxdWVzdCB0aGF0IFMzIGRlbGV0ZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucyBhdCBhIHNwZWNpZmljIHBlcmlvZCBpbiB0aGUgb2JqZWN0J3MgbGlmZXRpbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZGF5cyBhbiBvYmplY3QgaXMgbm9uY3VycmVudCBiZWZvcmUgUzMgY2FuIHBlcmZvcm0gdGhlIGFzc29jaWF0ZWQgYWN0aW9uLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vbmN1cnJlbnQgZGF5cyBjYWxjdWxhdGlvbnMsIHNlZSBbSG93IEFtYXpvbiBTMyBDYWxjdWxhdGVzIFdoZW4gYW4gT2JqZWN0IEJlY2FtZSBOb25jdXJyZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9pbnRyby1saWZlY3ljbGUtcnVsZXMuaHRtbCNub24tY3VycmVudC1kYXlzLWNhbGN1bGF0aW9ucykgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbk5vbmN1cnJlbnREYXlzOiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIGhvdyBtYW55IG5vbmN1cnJlbnQgdmVyc2lvbnMgUzMgd2lsbCByZXRhaW4uIElmIHRoZXJlIGFyZSB0aGlzIG1hbnkgbW9yZSByZWNlbnQgbm9uY3VycmVudCB2ZXJzaW9ucywgUzMgd2lsbCB0YWtlIHRoZSBhc3NvY2lhdGVkIGFjdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbm9uY3VycmVudCB2ZXJzaW9ucywgc2VlIFtMaWZlY3ljbGUgY29uZmlndXJhdGlvbiBlbGVtZW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvaW50cm8tbGlmZWN5Y2xlLXJ1bGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5OZXdlck5vbmN1cnJlbnRWZXJzaW9ucz86IG51bWJlclxufVxuLyoqXG4gKiAoRGVwcmVjYXRlZC4pIEZvciBidWNrZXRzIHdpdGggdmVyc2lvbmluZyBlbmFibGVkIChvciBzdXNwZW5kZWQpLCBzcGVjaWZpZXMgd2hlbiBub24tY3VycmVudCBvYmplY3RzIHRyYW5zaXRpb24gdG8gYSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gSWYgeW91IHNwZWNpZnkgYSB0cmFuc2l0aW9uIGFuZCBleHBpcmF0aW9uIHRpbWUsIHRoZSBleHBpcmF0aW9uIHRpbWUgbXVzdCBiZSBsYXRlciB0aGFuIHRoZSB0cmFuc2l0aW9uIHRpbWUuIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhlIGBgTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uc2BgIHByb3BlcnR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbiB7XG4vKipcbiAqIFRoZSBjbGFzcyBvZiBzdG9yYWdlIHVzZWQgdG8gc3RvcmUgdGhlIG9iamVjdC5cbiAqL1xuU3RvcmFnZUNsYXNzOiAoXCJERUVQX0FSQ0hJVkVcIiB8IFwiR0xBQ0lFUlwiIHwgXCJHbGFjaWVyXCIgfCBcIkdMQUNJRVJfSVJcIiB8IFwiSU5URUxMSUdFTlRfVElFUklOR1wiIHwgXCJPTkVaT05FX0lBXCIgfCBcIlNUQU5EQVJEX0lBXCIpXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRheXMgYW4gb2JqZWN0IGlzIG5vbmN1cnJlbnQgYmVmb3JlIEFtYXpvbiBTMyBjYW4gcGVyZm9ybSB0aGUgYXNzb2NpYXRlZCBhY3Rpb24uIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9uY3VycmVudCBkYXlzIGNhbGN1bGF0aW9ucywgc2VlIFtIb3cgQW1hem9uIFMzIENhbGN1bGF0ZXMgSG93IExvbmcgYW4gT2JqZWN0IEhhcyBCZWVuIE5vbmN1cnJlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2ludHJvLWxpZmVjeWNsZS1ydWxlcy5odG1sI25vbi1jdXJyZW50LWRheXMtY2FsY3VsYXRpb25zKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuVHJhbnNpdGlvbkluRGF5czogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyBob3cgbWFueSBub25jdXJyZW50IHZlcnNpb25zIFMzIHdpbGwgcmV0YWluLiBJZiB0aGVyZSBhcmUgdGhpcyBtYW55IG1vcmUgcmVjZW50IG5vbmN1cnJlbnQgdmVyc2lvbnMsIFMzIHdpbGwgdGFrZSB0aGUgYXNzb2NpYXRlZCBhY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG5vbmN1cnJlbnQgdmVyc2lvbnMsIHNlZSBbTGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb24gZWxlbWVudHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2ludHJvLWxpZmVjeWNsZS1ydWxlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuTmV3ZXJOb25jdXJyZW50VmVyc2lvbnM/OiBudW1iZXJcbn1cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgdHJhbnNpdGlvbiBydWxlIHRoYXQgZGVzY3JpYmVzIHdoZW4gbm9uY3VycmVudCBvYmplY3RzIHRyYW5zaXRpb24gdG8gdGhlIGBgU1RBTkRBUkRfSUFgYCwgYGBPTkVaT05FX0lBYGAsIGBgSU5URUxMSUdFTlRfVElFUklOR2BgLCBgYEdMQUNJRVJfSVJgYCwgYGBHTEFDSUVSYGAsIG9yIGBgREVFUF9BUkNISVZFYGAgc3RvcmFnZSBjbGFzcy4gSWYgeW91ciBidWNrZXQgaXMgdmVyc2lvbmluZy1lbmFibGVkIChvciB2ZXJzaW9uaW5nIGlzIHN1c3BlbmRlZCksIHlvdSBjYW4gc2V0IHRoaXMgYWN0aW9uIHRvIHJlcXVlc3QgdGhhdCBBbWF6b24gUzMgdHJhbnNpdGlvbiBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucyB0byB0aGUgYGBTVEFOREFSRF9JQWBgLCBgYE9ORVpPTkVfSUFgYCwgYGBJTlRFTExJR0VOVF9USUVSSU5HYGAsIGBgR0xBQ0lFUl9JUmBgLCBgYEdMQUNJRVJgYCwgb3IgYGBERUVQX0FSQ0hJVkVgYCBzdG9yYWdlIGNsYXNzIGF0IGEgc3BlY2lmaWMgcGVyaW9kIGluIHRoZSBvYmplY3QncyBsaWZldGltZS4gSWYgeW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zYGAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uMSB7XG4vKipcbiAqIFRoZSBjbGFzcyBvZiBzdG9yYWdlIHVzZWQgdG8gc3RvcmUgdGhlIG9iamVjdC5cbiAqL1xuU3RvcmFnZUNsYXNzOiAoXCJERUVQX0FSQ0hJVkVcIiB8IFwiR0xBQ0lFUlwiIHwgXCJHbGFjaWVyXCIgfCBcIkdMQUNJRVJfSVJcIiB8IFwiSU5URUxMSUdFTlRfVElFUklOR1wiIHwgXCJPTkVaT05FX0lBXCIgfCBcIlNUQU5EQVJEX0lBXCIpXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRheXMgYW4gb2JqZWN0IGlzIG5vbmN1cnJlbnQgYmVmb3JlIEFtYXpvbiBTMyBjYW4gcGVyZm9ybSB0aGUgYXNzb2NpYXRlZCBhY3Rpb24uIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9uY3VycmVudCBkYXlzIGNhbGN1bGF0aW9ucywgc2VlIFtIb3cgQW1hem9uIFMzIENhbGN1bGF0ZXMgSG93IExvbmcgYW4gT2JqZWN0IEhhcyBCZWVuIE5vbmN1cnJlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2ludHJvLWxpZmVjeWNsZS1ydWxlcy5odG1sI25vbi1jdXJyZW50LWRheXMtY2FsY3VsYXRpb25zKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuVHJhbnNpdGlvbkluRGF5czogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyBob3cgbWFueSBub25jdXJyZW50IHZlcnNpb25zIFMzIHdpbGwgcmV0YWluLiBJZiB0aGVyZSBhcmUgdGhpcyBtYW55IG1vcmUgcmVjZW50IG5vbmN1cnJlbnQgdmVyc2lvbnMsIFMzIHdpbGwgdGFrZSB0aGUgYXNzb2NpYXRlZCBhY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG5vbmN1cnJlbnQgdmVyc2lvbnMsIHNlZSBbTGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb24gZWxlbWVudHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2ludHJvLWxpZmVjeWNsZS1ydWxlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuTmV3ZXJOb25jdXJyZW50VmVyc2lvbnM/OiBudW1iZXJcbn1cbi8qKlxuICogKERlcHJlY2F0ZWQuKSBTcGVjaWZpZXMgd2hlbiBhbiBvYmplY3QgdHJhbnNpdGlvbnMgdG8gYSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gSWYgeW91IHNwZWNpZnkgYW4gZXhwaXJhdGlvbiBhbmQgdHJhbnNpdGlvbiB0aW1lLCB5b3UgbXVzdCB1c2UgdGhlIHNhbWUgdGltZSB1bml0IGZvciBib3RoIHByb3BlcnRpZXMgKGVpdGhlciBpbiBkYXlzIG9yIGJ5IGRhdGUpLiBUaGUgZXhwaXJhdGlvbiB0aW1lIG11c3QgYWxzbyBiZSBsYXRlciB0aGFuIHRoZSB0cmFuc2l0aW9uIHRpbWUuIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhlIGBgVHJhbnNpdGlvbnNgYCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2l0aW9uIHtcbi8qKlxuICogVGhlIHN0b3JhZ2UgY2xhc3MgdG8gd2hpY2ggeW91IHdhbnQgdGhlIG9iamVjdCB0byB0cmFuc2l0aW9uLlxuICovXG5TdG9yYWdlQ2xhc3M6IChcIkRFRVBfQVJDSElWRVwiIHwgXCJHTEFDSUVSXCIgfCBcIkdsYWNpZXJcIiB8IFwiR0xBQ0lFUl9JUlwiIHwgXCJJTlRFTExJR0VOVF9USUVSSU5HXCIgfCBcIk9ORVpPTkVfSUFcIiB8IFwiU1RBTkRBUkRfSUFcIilcbi8qKlxuICogSW5kaWNhdGVzIHdoZW4gb2JqZWN0cyBhcmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gVGhlIGRhdGUgdmFsdWUgbXVzdCBiZSBpbiBJU08gODYwMSBmb3JtYXQuIFRoZSB0aW1lIGlzIGFsd2F5cyBtaWRuaWdodCBVVEMuXG4gKi9cblRyYW5zaXRpb25EYXRlPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRheXMgYWZ0ZXIgY3JlYXRpb24gd2hlbiBvYmplY3RzIGFyZSB0cmFuc2l0aW9uZWQgdG8gdGhlIHNwZWNpZmllZCBzdG9yYWdlIGNsYXNzLiBUaGUgdmFsdWUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gKi9cblRyYW5zaXRpb25JbkRheXM/OiBudW1iZXJcbn1cbi8qKlxuICogU3BlY2lmaWVzIHdoZW4gYW4gb2JqZWN0IHRyYW5zaXRpb25zIHRvIGEgc3BlY2lmaWVkIHN0b3JhZ2UgY2xhc3MuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEFtYXpvbiBTMyBsaWZlY3ljbGUgY29uZmlndXJhdGlvbiBydWxlcywgc2VlIFtUcmFuc2l0aW9uaW5nIE9iamVjdHMgVXNpbmcgQW1hem9uIFMzIExpZmVjeWNsZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvbGlmZWN5Y2xlLXRyYW5zaXRpb24tZ2VuZXJhbC1jb25zaWRlcmF0aW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2l0aW9uMSB7XG4vKipcbiAqIFRoZSBzdG9yYWdlIGNsYXNzIHRvIHdoaWNoIHlvdSB3YW50IHRoZSBvYmplY3QgdG8gdHJhbnNpdGlvbi5cbiAqL1xuU3RvcmFnZUNsYXNzOiAoXCJERUVQX0FSQ0hJVkVcIiB8IFwiR0xBQ0lFUlwiIHwgXCJHbGFjaWVyXCIgfCBcIkdMQUNJRVJfSVJcIiB8IFwiSU5URUxMSUdFTlRfVElFUklOR1wiIHwgXCJPTkVaT05FX0lBXCIgfCBcIlNUQU5EQVJEX0lBXCIpXG4vKipcbiAqIEluZGljYXRlcyB3aGVuIG9iamVjdHMgYXJlIHRyYW5zaXRpb25lZCB0byB0aGUgc3BlY2lmaWVkIHN0b3JhZ2UgY2xhc3MuIFRoZSBkYXRlIHZhbHVlIG11c3QgYmUgaW4gSVNPIDg2MDEgZm9ybWF0LiBUaGUgdGltZSBpcyBhbHdheXMgbWlkbmlnaHQgVVRDLlxuICovXG5UcmFuc2l0aW9uRGF0ZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBkYXlzIGFmdGVyIGNyZWF0aW9uIHdoZW4gb2JqZWN0cyBhcmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gVGhlIHZhbHVlIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxuICovXG5UcmFuc2l0aW9uSW5EYXlzPzogbnVtYmVyXG59XG4vKipcbiAqIFNldHRpbmdzIHRoYXQgZGVmaW5lIHdoZXJlIGxvZ3MgYXJlIHN0b3JlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnaW5nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBidWNrZXQgd2hlcmUgQW1hem9uIFMzIHNob3VsZCBzdG9yZSBzZXJ2ZXIgYWNjZXNzIGxvZyBmaWxlcy4gWW91IGNhbiBzdG9yZSBsb2cgZmlsZXMgaW4gYW55IGJ1Y2tldCB0aGF0IHlvdSBvd24uIEJ5IGRlZmF1bHQsIGxvZ3MgYXJlIHN0b3JlZCBpbiB0aGUgYnVja2V0IHdoZXJlIHRoZSBgYExvZ2dpbmdDb25maWd1cmF0aW9uYGAgcHJvcGVydHkgaXMgZGVmaW5lZC5cbiAqL1xuRGVzdGluYXRpb25CdWNrZXROYW1lPzogc3RyaW5nXG4vKipcbiAqIEEgcHJlZml4IGZvciBhbGwgbG9nIG9iamVjdCBrZXlzLiBJZiB5b3Ugc3RvcmUgbG9nIGZpbGVzIGZyb20gbXVsdGlwbGUgQW1hem9uIFMzIGJ1Y2tldHMgaW4gYSBzaW5nbGUgYnVja2V0LCB5b3UgY2FuIHVzZSBhIHByZWZpeCB0byBkaXN0aW5ndWlzaCB3aGljaCBsb2cgZmlsZXMgY2FtZSBmcm9tIHdoaWNoIGJ1Y2tldC5cbiAqL1xuTG9nRmlsZVByZWZpeD86IHN0cmluZ1xuVGFyZ2V0T2JqZWN0S2V5Rm9ybWF0PzogVGFyZ2V0T2JqZWN0S2V5Rm9ybWF0XG59XG4vKipcbiAqIEFtYXpvbiBTMyBrZXlzIGZvciBsb2cgb2JqZWN0cyBhcmUgcGFydGl0aW9uZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gKiAgIGBgW0Rlc3RpbmF0aW9uUHJlZml4XVtTb3VyY2VBY2NvdW50SWRdL1tTb3VyY2VSZWdpb25dL1tTb3VyY2VCdWNrZXRdL1tZWVlZXS9bTU1dL1tERF0vW1lZWVldLVtNTV0tW0REXS1baGhdLVttbV0tW3NzXS1bVW5pcXVlU3RyaW5nXWBgIFxuICogIFBhcnRpdGlvbmVkUHJlZml4IGRlZmF1bHRzIHRvIEV2ZW50VGltZSBkZWxpdmVyeSB3aGVuIHNlcnZlciBhY2Nlc3MgbG9ncyBhcmUgZGVsaXZlcmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbmVkUHJlZml4IHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwYXJ0aXRpb24gZGF0ZSBzb3VyY2UgZm9yIHRoZSBwYXJ0aXRpb25lZCBwcmVmaXguIGBgUGFydGl0aW9uRGF0ZVNvdXJjZWBgIGNhbiBiZSBgYEV2ZW50VGltZWBgIG9yIGBgRGVsaXZlcnlUaW1lYGAuXG4gKiAgRm9yIGBgRGVsaXZlcnlUaW1lYGAsIHRoZSB0aW1lIGluIHRoZSBsb2cgZmlsZSBuYW1lcyBjb3JyZXNwb25kcyB0byB0aGUgZGVsaXZlcnkgdGltZSBmb3IgdGhlIGxvZyBmaWxlcy4gXG4gKiAgIEZvciBgYEV2ZW50VGltZWBgLCBUaGUgbG9ncyBkZWxpdmVyZWQgYXJlIGZvciBhIHNwZWNpZmljIGRheSBvbmx5LiBUaGUgeWVhciwgbW9udGgsIGFuZCBkYXkgY29ycmVzcG9uZCB0byB0aGUgZGF5IG9uIHdoaWNoIHRoZSBldmVudCBvY2N1cnJlZCwgYW5kIHRoZSBob3VyLCBtaW51dGVzIGFuZCBzZWNvbmRzIGFyZSBzZXQgdG8gMDAgaW4gdGhlIGtleS5cbiAqL1xuUGFydGl0aW9uRGF0ZVNvdXJjZT86IChcIkV2ZW50VGltZVwiIHwgXCJEZWxpdmVyeVRpbWVcIilcbn1cbi8qKlxuICogU3BlY2lmaWVzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZvciB0aGUgQ2xvdWRXYXRjaCByZXF1ZXN0IG1ldHJpY3MgKHNwZWNpZmllZCBieSB0aGUgbWV0cmljcyBjb25maWd1cmF0aW9uIElEKSBmcm9tIGFuIEFtYXpvbiBTMyBidWNrZXQuIElmIHlvdSdyZSB1cGRhdGluZyBhbiBleGlzdGluZyBtZXRyaWNzIGNvbmZpZ3VyYXRpb24sIG5vdGUgdGhhdCB0aGlzIGlzIGEgZnVsbCByZXBsYWNlbWVudCBvZiB0aGUgZXhpc3RpbmcgbWV0cmljcyBjb25maWd1cmF0aW9uLiBJZiB5b3UgZG9uJ3QgaW5jbHVkZSB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8ga2VlcCwgdGhleSBhcmUgZXJhc2VkLiBGb3IgZXhhbXBsZXMsIHNlZSBbQVdTOjpTMzo6QnVja2V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQuaHRtbCNhd3MtcHJvcGVydGllcy1zMy1idWNrZXQtLWV4YW1wbGVzKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUFVUIEJ1Y2tldCBtZXRyaWNzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUTWV0cmljQ29uZmlndXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBhY2Nlc3MgcG9pbnQgdGhhdCB3YXMgdXNlZCB3aGlsZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgb24gdGhlIG9iamVjdC4gVGhlIG1ldHJpY3MgY29uZmlndXJhdGlvbiBvbmx5IGluY2x1ZGVzIG9iamVjdHMgdGhhdCBtZWV0IHRoZSBmaWx0ZXIncyBjcml0ZXJpYS5cbiAqL1xuQWNjZXNzUG9pbnRBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1ldHJpY3MgY29uZmlndXJhdGlvbi4gVGhpcyBjYW4gYmUgYW55IHZhbHVlIHlvdSBjaG9vc2UgdGhhdCBoZWxwcyB5b3UgaWRlbnRpZnkgeW91ciBtZXRyaWNzIGNvbmZpZ3VyYXRpb24uXG4gKi9cbklkOiBzdHJpbmdcbi8qKlxuICogVGhlIHByZWZpeCB0aGF0IGFuIG9iamVjdCBtdXN0IGhhdmUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1ldHJpY3MgcmVzdWx0cy5cbiAqL1xuUHJlZml4Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyBhIGxpc3Qgb2YgdGFnIGZpbHRlcnMgdG8gdXNlIGFzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZpbHRlci4gVGhlIG1ldHJpY3MgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBvbmx5IG9iamVjdHMgdGhhdCBtZWV0IHRoZSBmaWx0ZXIncyBjcml0ZXJpYS5cbiAqL1xuVGFnRmlsdGVycz86IFRhZ0ZpbHRlcltdXG59XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gdGhhdCBkZWZpbmVzIGhvdyBBbWF6b24gUzMgaGFuZGxlcyBidWNrZXQgbm90aWZpY2F0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25Db25maWd1cmF0aW9uIHtcbkV2ZW50QnJpZGdlQ29uZmlndXJhdGlvbj86IEV2ZW50QnJpZGdlQ29uZmlndXJhdGlvblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIExBTWxvbmcgZnVuY3Rpb25zIHRvIGludm9rZSBhbmQgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdG8gaW52b2tlIHRoZW0uXG4gKi9cbkxhbWJkYUNvbmZpZ3VyYXRpb25zPzogTGFtYmRhQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBBbWF6b24gU2ltcGxlIFF1ZXVlIFNlcnZpY2UgcXVldWVzIHRvIHB1Ymxpc2ggbWVzc2FnZXMgdG8gYW5kIHRoZSBldmVudHMgZm9yIHdoaWNoIHRvIHB1Ymxpc2ggbWVzc2FnZXMuXG4gKi9cblF1ZXVlQ29uZmlndXJhdGlvbnM/OiBRdWV1ZUNvbmZpZ3VyYXRpb25bXVxuLyoqXG4gKiBUaGUgdG9waWMgdG8gd2hpY2ggbm90aWZpY2F0aW9ucyBhcmUgc2VudCBhbmQgdGhlIGV2ZW50cyBmb3Igd2hpY2ggbm90aWZpY2F0aW9ucyBhcmUgZ2VuZXJhdGVkLlxuICovXG5Ub3BpY0NvbmZpZ3VyYXRpb25zPzogVG9waWNDb25maWd1cmF0aW9uW11cbn1cbi8qKlxuICogRW5hYmxlcyBkZWxpdmVyeSBvZiBldmVudHMgdG8gQW1hem9uIEV2ZW50QnJpZGdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50QnJpZGdlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIEVuYWJsZXMgZGVsaXZlcnkgb2YgZXZlbnRzIHRvIEFtYXpvbiBFdmVudEJyaWRnZS5cbiAqL1xuRXZlbnRCcmlkZ2VFbmFibGVkOiAoYm9vbGVhbiAmIHN0cmluZylcbn1cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBMQU1sb25nIGZ1bmN0aW9ucyB0byBpbnZva2UgYW5kIHRoZSBldmVudHMgZm9yIHdoaWNoIHRvIGludm9rZSB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgQW1hem9uIFMzIGJ1Y2tldCBldmVudCBmb3Igd2hpY2ggdG8gaW52b2tlIHRoZSBMQU1sb25nIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTdXBwb3J0ZWQgRXZlbnQgVHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5FdmVudDogc3RyaW5nXG5GaWx0ZXI/OiBOb3RpZmljYXRpb25GaWx0ZXJcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBMQU1sb25nIGZ1bmN0aW9uIHRoYXQgQW1hem9uIFMzIGludm9rZXMgd2hlbiB0aGUgc3BlY2lmaWVkIGV2ZW50IHR5cGUgb2NjdXJzLlxuICovXG5GdW5jdGlvbjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBmaWx0ZXJpbmcgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggb2JqZWN0cyBpbnZva2UgdGhlIEFXUyBMYW1iZGEgZnVuY3Rpb24uIEZvciBleGFtcGxlLCB5b3UgY2FuIGNyZWF0ZSBhIGZpbHRlciBzbyB0aGF0IG9ubHkgaW1hZ2UgZmlsZXMgd2l0aCBhIGBgLmpwZ2BgIGV4dGVuc2lvbiBpbnZva2UgdGhlIGZ1bmN0aW9uIHdoZW4gdGhleSBhcmUgYWRkZWQgdG8gdGhlIEFtYXpvbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uRmlsdGVyIHtcblMzS2V5OiBTM0tleUZpbHRlclxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igb2JqZWN0IGtleSBuYW1lIHByZWZpeCBhbmQgc3VmZml4IGZpbHRlcmluZyBydWxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0tleUZpbHRlciB7XG4vKipcbiAqIEEgbGlzdCBvZiBjb250YWluZXJzIGZvciB0aGUga2V5LXZhbHVlIHBhaXIgdGhhdCBkZWZpbmVzIHRoZSBjcml0ZXJpYSBmb3IgdGhlIGZpbHRlciBydWxlLlxuICovXG5SdWxlczogRmlsdGVyUnVsZVtdXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgQW1hem9uIFMzIG9iamVjdCBrZXkgbmFtZSB0byBmaWx0ZXIgb24uIEFuIG9iamVjdCBrZXkgbmFtZSBpcyB0aGUgbmFtZSBhc3NpZ25lZCB0byBhbiBvYmplY3QgaW4geW91ciBBbWF6b24gUzMgYnVja2V0LiBZb3Ugc3BlY2lmeSB3aGV0aGVyIHRvIGZpbHRlciBvbiB0aGUgc3VmZml4IG9yIHByZWZpeCBvZiB0aGUgb2JqZWN0IGtleSBuYW1lLiBBIHByZWZpeCBpcyBhIHNwZWNpZmljIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gb2JqZWN0IGtleSBuYW1lLCB3aGljaCB5b3UgY2FuIHVzZSB0byBvcmdhbml6ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBzdGFydCB0aGUga2V5IG5hbWVzIG9mIHJlbGF0ZWQgb2JqZWN0cyB3aXRoIGEgcHJlZml4LCBzdWNoIGFzIGBgMjAyMy1gYCBvciBgYGVuZ2luZWVyaW5nL2BgLiBUaGVuLCB5b3UgY2FuIHVzZSBgYEZpbHRlclJ1bGVgYCB0byBmaW5kIG9iamVjdHMgaW4gYSBidWNrZXQgd2l0aCBrZXkgbmFtZXMgdGhhdCBoYXZlIHRoZSBzYW1lIHByZWZpeC4gQSBzdWZmaXggaXMgc2ltaWxhciB0byBhIHByZWZpeCwgYnV0IGl0IGlzIGF0IHRoZSBlbmQgb2YgdGhlIG9iamVjdCBrZXkgbmFtZSBpbnN0ZWFkIG9mIGF0IHRoZSBiZWdpbm5pbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUnVsZSB7XG4vKipcbiAqIFRoZSBvYmplY3Qga2V5IG5hbWUgcHJlZml4IG9yIHN1ZmZpeCBpZGVudGlmeWluZyBvbmUgb3IgbW9yZSBvYmplY3RzIHRvIHdoaWNoIHRoZSBmaWx0ZXJpbmcgcnVsZSBhcHBsaWVzLiBUaGUgbWF4aW11bSBsZW5ndGggaXMgMSwwMjQgY2hhcmFjdGVycy4gT3ZlcmxhcHBpbmcgcHJlZml4ZXMgYW5kIHN1ZmZpeGVzIGFyZSBub3Qgc3VwcG9ydGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDb25maWd1cmluZyBFdmVudCBOb3RpZmljYXRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSB2YWx1ZSB0aGF0IHRoZSBmaWx0ZXIgc2VhcmNoZXMgZm9yIGluIG9iamVjdCBrZXkgbmFtZXMuXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBwdWJsaXNoaW5nIG1lc3NhZ2VzIHRvIGFuIEFtYXpvbiBTaW1wbGUgUXVldWUgU2VydmljZSAoQW1hem9uIFNRUykgcXVldWUgd2hlbiBBbWF6b24gUzMgZGV0ZWN0cyBzcGVjaWZpZWQgZXZlbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUzMgYnVja2V0IGV2ZW50IGFib3V0IHdoaWNoIHlvdSB3YW50IHRvIHB1Ymxpc2ggbWVzc2FnZXMgdG8gQW1hem9uIFNRUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3VwcG9ydGVkIEV2ZW50IFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuRXZlbnQ6IHN0cmluZ1xuRmlsdGVyPzogTm90aWZpY2F0aW9uRmlsdGVyMVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEFtYXpvbiBTUVMgcXVldWUgdG8gd2hpY2ggQW1hem9uIFMzIHB1Ymxpc2hlcyBhIG1lc3NhZ2Ugd2hlbiBpdCBkZXRlY3RzIGV2ZW50cyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuIEZJRk8gcXVldWVzIGFyZSBub3QgYWxsb3dlZCB3aGVuIGVuYWJsaW5nIGFuIFNRUyBxdWV1ZSBhcyB0aGUgZXZlbnQgbm90aWZpY2F0aW9uIGRlc3RpbmF0aW9uLlxuICovXG5RdWV1ZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBmaWx0ZXJpbmcgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggb2JqZWN0cyB0cmlnZ2VyIG5vdGlmaWNhdGlvbnMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGNyZWF0ZSBhIGZpbHRlciBzbyB0aGF0IEFtYXpvbiBTMyBzZW5kcyBub3RpZmljYXRpb25zIG9ubHkgd2hlbiBpbWFnZSBmaWxlcyB3aXRoIGEgYGAuanBnYGAgZXh0ZW5zaW9uIGFyZSBhZGRlZCB0byB0aGUgYnVja2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDb25maWd1cmluZyBldmVudCBub3RpZmljYXRpb25zIHVzaW5nIG9iamVjdCBrZXkgbmFtZSBmaWx0ZXJpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlci1ndWlkZS9ub3RpZmljYXRpb24taG93LXRvLWZpbHRlcmluZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25GaWx0ZXIxIHtcblMzS2V5OiBTM0tleUZpbHRlclxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgY29uZmlndXJhdGlvbiBmb3IgcHVibGljYXRpb24gb2YgbWVzc2FnZXMgdG8gYW4gQW1hem9uIFNpbXBsZSBOb3RpZmljYXRpb24gU2VydmljZSAoQW1hem9uIFNOUykgdG9waWMgd2hlbiBBbWF6b24gUzMgZGV0ZWN0cyBzcGVjaWZpZWQgZXZlbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcGljQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUzMgYnVja2V0IGV2ZW50IGFib3V0IHdoaWNoIHRvIHNlbmQgbm90aWZpY2F0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3VwcG9ydGVkIEV2ZW50IFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuRXZlbnQ6IHN0cmluZ1xuRmlsdGVyPzogTm90aWZpY2F0aW9uRmlsdGVyMlxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEFtYXpvbiBTTlMgdG9waWMgdG8gd2hpY2ggQW1hem9uIFMzIHB1Ymxpc2hlcyBhIG1lc3NhZ2Ugd2hlbiBpdCBkZXRlY3RzIGV2ZW50cyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gKi9cblRvcGljOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGZpbHRlcmluZyBydWxlcyB0aGF0IGRldGVybWluZSBmb3Igd2hpY2ggb2JqZWN0cyB0byBzZW5kIG5vdGlmaWNhdGlvbnMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGNyZWF0ZSBhIGZpbHRlciBzbyB0aGF0IEFtYXpvbiBTMyBzZW5kcyBub3RpZmljYXRpb25zIG9ubHkgd2hlbiBpbWFnZSBmaWxlcyB3aXRoIGEgYGAuanBnYGAgZXh0ZW5zaW9uIGFyZSBhZGRlZCB0byB0aGUgYnVja2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkZpbHRlcjIge1xuUzNLZXk6IFMzS2V5RmlsdGVyXG59XG4vKipcbiAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGlyZWN0b3J5IGJ1Y2tldHMuXG4gKiAgIFBsYWNlcyBhbiBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uIG9uIHRoZSBzcGVjaWZpZWQgYnVja2V0LiBUaGUgcnVsZSBzcGVjaWZpZWQgaW4gdGhlIE9iamVjdCBMb2NrIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBhcHBsaWVkIGJ5IGRlZmF1bHQgdG8gZXZlcnkgbmV3IG9iamVjdCBwbGFjZWQgaW4gdGhlIHNwZWNpZmllZCBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0xvY2tpbmcgT2JqZWN0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvb2JqZWN0LWxvY2suaHRtbCkuIFxuICogICAgKyAgVGhlIGBgRGVmYXVsdFJldGVudGlvbmBgIHNldHRpbmdzIHJlcXVpcmUgYm90aCBhIG1vZGUgYW5kIGEgcGVyaW9kLlxuICogICArICBUaGUgYGBEZWZhdWx0UmV0ZW50aW9uYGAgcGVyaW9kIGNhbiBiZSBlaXRoZXIgYGBEYXlzYGAgb3IgYGBZZWFyc2BgIGJ1dCB5b3UgbXVzdCBzZWxlY3Qgb25lLiBZb3UgY2Fubm90IHNwZWNpZnkgYGBEYXlzYGAgYW5kIGBgWWVhcnNgYCBhdCB0aGUgc2FtZSB0aW1lLlxuICogICArICBZb3UgY2FuIGVuYWJsZSBPYmplY3QgTG9jayBmb3IgbmV3IG9yIGV4aXN0aW5nIGJ1Y2tldHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyaW5nIE9iamVjdCBMb2NrXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3QtbG9jay1jb25maWd1cmUuaHRtbCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGJ1Y2tldCBoYXMgYW4gT2JqZWN0IExvY2sgY29uZmlndXJhdGlvbiBlbmFibGVkLiBFbmFibGUgYGBPYmplY3RMb2NrRW5hYmxlZGBgIHdoZW4geW91IGFwcGx5IGBgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25gYCB0byBhIGJ1Y2tldC5cbiAqL1xuT2JqZWN0TG9ja0VuYWJsZWQ/OiBcIkVuYWJsZWRcIlxuUnVsZT86IE9iamVjdExvY2tSdWxlXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgT2JqZWN0IExvY2sgcnVsZSBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QuIEVuYWJsZSB0aGlzIHJ1bGUgd2hlbiB5b3UgYXBwbHkgYGBPYmplY3RMb2NrQ29uZmlndXJhdGlvbmBgIHRvIGEgYnVja2V0LiBJZiBPYmplY3QgTG9jayBpcyB0dXJuZWQgb24sIGJ1Y2tldCBzZXR0aW5ncyByZXF1aXJlIGJvdGggYGBNb2RlYGAgYW5kIGEgcGVyaW9kIG9mIGVpdGhlciBgYERheXNgYCBvciBgYFllYXJzYGAuIFlvdSBjYW5ub3Qgc3BlY2lmeSBgYERheXNgYCBhbmQgYGBZZWFyc2BgIGF0IHRoZSBzYW1lIHRpbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW09iamVjdExvY2tSdWxlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtb2JqZWN0bG9ja3J1bGUuaHRtbCkgYW5kIFtEZWZhdWx0UmV0ZW50aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtZGVmYXVsdHJldGVudGlvbi5odG1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYmplY3RMb2NrUnVsZSB7XG5EZWZhdWx0UmV0ZW50aW9uPzogRGVmYXVsdFJldGVudGlvblxufVxuLyoqXG4gKiBUaGUgZGVmYXVsdCBPYmplY3QgTG9jayByZXRlbnRpb24gbW9kZSBhbmQgcGVyaW9kIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gbmV3IG9iamVjdHMgcGxhY2VkIGluIHRoZSBzcGVjaWZpZWQgYnVja2V0LiBJZiBPYmplY3QgTG9jayBpcyB0dXJuZWQgb24sIGJ1Y2tldCBzZXR0aW5ncyByZXF1aXJlIGJvdGggYGBNb2RlYGAgYW5kIGEgcGVyaW9kIG9mIGVpdGhlciBgYERheXNgYCBvciBgYFllYXJzYGAuIFlvdSBjYW5ub3Qgc3BlY2lmeSBgYERheXNgYCBhbmQgYGBZZWFyc2BgIGF0IHRoZSBzYW1lIHRpbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFsbG93YWJsZSB2YWx1ZXMgZm9yIG1vZGUgYW5kIHBlcmlvZCwgc2VlIFtEZWZhdWx0UmV0ZW50aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtZGVmYXVsdHJldGVudGlvbi5odG1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0UmV0ZW50aW9uIHtcbi8qKlxuICogVGhlIG51bWJlciBvZiB5ZWFycyB0aGF0IHlvdSB3YW50IHRvIHNwZWNpZnkgZm9yIHRoZSBkZWZhdWx0IHJldGVudGlvbiBwZXJpb2QuIElmIE9iamVjdCBMb2NrIGlzIHR1cm5lZCBvbiwgeW91IG11c3Qgc3BlY2lmeSBgYE1vZGVgYCBhbmQgc3BlY2lmeSBlaXRoZXIgYGBEYXlzYGAgb3IgYGBZZWFyc2BgLlxuICovXG5ZZWFycz86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGRheXMgdGhhdCB5b3Ugd2FudCB0byBzcGVjaWZ5IGZvciB0aGUgZGVmYXVsdCByZXRlbnRpb24gcGVyaW9kLiBJZiBPYmplY3QgTG9jayBpcyB0dXJuZWQgb24sIHlvdSBtdXN0IHNwZWNpZnkgYGBNb2RlYGAgYW5kIHNwZWNpZnkgZWl0aGVyIGBgRGF5c2BgIG9yIGBgWWVhcnNgYC5cbiAqL1xuRGF5cz86IG51bWJlclxuLyoqXG4gKiBUaGUgZGVmYXVsdCBPYmplY3QgTG9jayByZXRlbnRpb24gbW9kZSB5b3Ugd2FudCB0byBhcHBseSB0byBuZXcgb2JqZWN0cyBwbGFjZWQgaW4gdGhlIHNwZWNpZmllZCBidWNrZXQuIElmIE9iamVjdCBMb2NrIGlzIHR1cm5lZCBvbiwgeW91IG11c3Qgc3BlY2lmeSBgYE1vZGVgYCBhbmQgc3BlY2lmeSBlaXRoZXIgYGBEYXlzYGAgb3IgYGBZZWFyc2BgLlxuICovXG5Nb2RlPzogKFwiQ09NUExJQU5DRVwiIHwgXCJHT1ZFUk5BTkNFXCIpXG59XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gdGhhdCBkZWZpbmVzIGhvdyBBbWF6b24gUzMgaGFuZGxlcyBPYmplY3QgT3duZXJzaGlwIHJ1bGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE93bmVyc2hpcENvbnRyb2xzIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb250YWluZXIgZWxlbWVudCBmb3IgT2JqZWN0IE93bmVyc2hpcCBydWxlcy5cbiAqL1xuUnVsZXM6IE93bmVyc2hpcENvbnRyb2xzUnVsZVtdXG59XG4vKipcbiAqIFNwZWNpZmllcyBhbiBPYmplY3QgT3duZXJzaGlwIHJ1bGUuXG4gKiAgUzMgT2JqZWN0IE93bmVyc2hpcCBpcyBhbiBBbWF6b24gUzMgYnVja2V0LWxldmVsIHNldHRpbmcgdGhhdCB5b3UgY2FuIHVzZSB0byBkaXNhYmxlIGFjY2VzcyBjb250cm9sIGxpc3RzIChBQ0xzKSBhbmQgdGFrZSBvd25lcnNoaXAgb2YgZXZlcnkgb2JqZWN0IGluIHlvdXIgYnVja2V0LCBzaW1wbGlmeWluZyBhY2Nlc3MgbWFuYWdlbWVudCBmb3IgZGF0YSBzdG9yZWQgaW4gQW1hem9uIFMzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDb250cm9sbGluZyBvd25lcnNoaXAgb2Ygb2JqZWN0cyBhbmQgZGlzYWJsaW5nIEFDTHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2Fib3V0LW9iamVjdC1vd25lcnNoaXAuaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3duZXJzaGlwQ29udHJvbHNSdWxlIHtcbi8qKlxuICogU3BlY2lmaWVzIGFuIG9iamVjdCBvd25lcnNoaXAgcnVsZS5cbiAqL1xuT2JqZWN0T3duZXJzaGlwPzogKFwiT2JqZWN0V3JpdGVyXCIgfCBcIkJ1Y2tldE93bmVyUHJlZmVycmVkXCIgfCBcIkJ1Y2tldE93bmVyRW5mb3JjZWRcIilcbn1cbi8qKlxuICogQ29uZmlndXJhdGlvbiB0aGF0IGRlZmluZXMgaG93IEFtYXpvbiBTMyBoYW5kbGVzIHB1YmxpYyBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uIHtcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHNob3VsZCBibG9jayBwdWJsaWMgYWNjZXNzIGNvbnRyb2wgbGlzdHMgKEFDTHMpIGZvciB0aGlzIGJ1Y2tldCBhbmQgb2JqZWN0cyBpbiB0aGlzIGJ1Y2tldC4gU2V0dGluZyB0aGlzIGVsZW1lbnQgdG8gYGBUUlVFYGAgY2F1c2VzIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3I6XG4gKiAgICsgIFBVVCBCdWNrZXQgQUNMIGFuZCBQVVQgT2JqZWN0IEFDTCBjYWxscyBmYWlsIGlmIHRoZSBzcGVjaWZpZWQgQUNMIGlzIHB1YmxpYy5cbiAqICAgKyAgUFVUIE9iamVjdCBjYWxscyBmYWlsIGlmIHRoZSByZXF1ZXN0IGluY2x1ZGVzIGEgcHVibGljIEFDTC5cbiAqICAgKyAgUFVUIEJ1Y2tldCBjYWxscyBmYWlsIGlmIHRoZSByZXF1ZXN0IGluY2x1ZGVzIGEgcHVibGljIEFDTC5cbiAqICAgXG4gKiAgRW5hYmxpbmcgdGhpcyBzZXR0aW5nIGRvZXNuJ3QgYWZmZWN0IGV4aXN0aW5nIHBvbGljaWVzIG9yIEFDTHMuXG4gKi9cbkJsb2NrUHVibGljQWNscz86IGJvb2xlYW5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHNob3VsZCBibG9jayBwdWJsaWMgYnVja2V0IHBvbGljaWVzIGZvciB0aGlzIGJ1Y2tldC4gU2V0dGluZyB0aGlzIGVsZW1lbnQgdG8gYGBUUlVFYGAgY2F1c2VzIEFtYXpvbiBTMyB0byByZWplY3QgY2FsbHMgdG8gUFVUIEJ1Y2tldCBwb2xpY3kgaWYgdGhlIHNwZWNpZmllZCBidWNrZXQgcG9saWN5IGFsbG93cyBwdWJsaWMgYWNjZXNzLiBcbiAqICBFbmFibGluZyB0aGlzIHNldHRpbmcgZG9lc24ndCBhZmZlY3QgZXhpc3RpbmcgYnVja2V0IHBvbGljaWVzLlxuICovXG5CbG9ja1B1YmxpY1BvbGljeT86IGJvb2xlYW5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHNob3VsZCBpZ25vcmUgcHVibGljIEFDTHMgZm9yIHRoaXMgYnVja2V0IGFuZCBvYmplY3RzIGluIHRoaXMgYnVja2V0LiBTZXR0aW5nIHRoaXMgZWxlbWVudCB0byBgYFRSVUVgYCBjYXVzZXMgQW1hem9uIFMzIHRvIGlnbm9yZSBhbGwgcHVibGljIEFDTHMgb24gdGhpcyBidWNrZXQgYW5kIG9iamVjdHMgaW4gdGhpcyBidWNrZXQuXG4gKiAgRW5hYmxpbmcgdGhpcyBzZXR0aW5nIGRvZXNuJ3QgYWZmZWN0IHRoZSBwZXJzaXN0ZW5jZSBvZiBhbnkgZXhpc3RpbmcgQUNMcyBhbmQgZG9lc24ndCBwcmV2ZW50IG5ldyBwdWJsaWMgQUNMcyBmcm9tIGJlaW5nIHNldC5cbiAqL1xuSWdub3JlUHVibGljQWNscz86IGJvb2xlYW5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHNob3VsZCByZXN0cmljdCBwdWJsaWMgYnVja2V0IHBvbGljaWVzIGZvciB0aGlzIGJ1Y2tldC4gU2V0dGluZyB0aGlzIGVsZW1lbnQgdG8gYGBUUlVFYGAgcmVzdHJpY3RzIGFjY2VzcyB0byB0aGlzIGJ1Y2tldCB0byBvbmx5IEFXUy1zZXJ2aWNlIHByaW5jaXBhbHMgYW5kIGF1dGhvcml6ZWQgdXNlcnMgd2l0aGluIHRoaXMgYWNjb3VudCBpZiB0aGUgYnVja2V0IGhhcyBhIHB1YmxpYyBwb2xpY3kuXG4gKiAgRW5hYmxpbmcgdGhpcyBzZXR0aW5nIGRvZXNuJ3QgYWZmZWN0IHByZXZpb3VzbHkgc3RvcmVkIGJ1Y2tldCBwb2xpY2llcywgZXhjZXB0IHRoYXQgcHVibGljIGFuZCBjcm9zcy1hY2NvdW50IGFjY2VzcyB3aXRoaW4gYW55IHB1YmxpYyBidWNrZXQgcG9saWN5LCBpbmNsdWRpbmcgbm9uLXB1YmxpYyBkZWxlZ2F0aW9uIHRvIHNwZWNpZmljIGFjY291bnRzLCBpcyBibG9ja2VkLlxuICovXG5SZXN0cmljdFB1YmxpY0J1Y2tldHM/OiBib29sZWFuXG59XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHJlcGxpY2F0aW5nIG9iamVjdHMgaW4gYW4gUzMgYnVja2V0LiBUbyBlbmFibGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IGFsc28gZW5hYmxlIHZlcnNpb25pbmcgYnkgdXNpbmcgdGhlIGBgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eS5cbiAqICBBbWF6b24gUzMgY2FuIHN0b3JlIHJlcGxpY2F0ZWQgb2JqZWN0cyBpbiBhIHNpbmdsZSBkZXN0aW5hdGlvbiBidWNrZXQgb3IgbXVsdGlwbGUgZGVzdGluYXRpb24gYnVja2V0cy4gVGhlIGRlc3RpbmF0aW9uIGJ1Y2tldCBvciBidWNrZXRzIG11c3QgYWxyZWFkeSBleGlzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTWxvbmcgKElBTSkgcm9sZSB0aGF0IEFtYXpvbiBTMyBhc3N1bWVzIHdoZW4gcmVwbGljYXRpbmcgb2JqZWN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSG93IHRvIFNldCBVcCBSZXBsaWNhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvcmVwbGljYXRpb24taG93LXNldHVwLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICovXG5Sb2xlOiBzdHJpbmdcbi8qKlxuICogQSBjb250YWluZXIgZm9yIG9uZSBvciBtb3JlIHJlcGxpY2F0aW9uIHJ1bGVzLiBBIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBydWxlIGFuZCBjYW4gY29udGFpbiBhIG1heGltdW0gb2YgMSwwMDAgcnVsZXMuXG4gKi9cblJ1bGVzOiBSZXBsaWNhdGlvblJ1bGVbXVxufVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hpY2ggQW1hem9uIFMzIG9iamVjdHMgdG8gcmVwbGljYXRlIGFuZCB3aGVyZSB0byBzdG9yZSB0aGUgcmVwbGljYXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGljYXRpb25SdWxlIHtcbkRlbGV0ZU1hcmtlclJlcGxpY2F0aW9uPzogRGVsZXRlTWFya2VyUmVwbGljYXRpb25cbkRlc3RpbmF0aW9uOiBSZXBsaWNhdGlvbkRlc3RpbmF0aW9uXG5GaWx0ZXI/OiBSZXBsaWNhdGlvblJ1bGVGaWx0ZXJcbi8qKlxuICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJ1bGUuIFRoZSBtYXhpbXVtIHZhbHVlIGlzIDI1NSBjaGFyYWN0ZXJzLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHZhbHVlLCBBV1MgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIGEgcmFuZG9tIElELiBXaGVuIHVzaW5nIGEgVjIgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiB0aGlzIHByb3BlcnR5IGlzIGNhcGl0YWxpemVkIGFzIFwiSURcIi5cbiAqL1xuSWQ/OiBzdHJpbmdcbi8qKlxuICogQW4gb2JqZWN0IGtleSBuYW1lIHByZWZpeCB0aGF0IGlkZW50aWZpZXMgdGhlIG9iamVjdCBvciBvYmplY3RzIHRvIHdoaWNoIHRoZSBydWxlIGFwcGxpZXMuIFRoZSBtYXhpbXVtIHByZWZpeCBsZW5ndGggaXMgMSwwMjQgY2hhcmFjdGVycy4gVG8gaW5jbHVkZSBhbGwgb2JqZWN0cyBpbiBhIGJ1Y2tldCwgc3BlY2lmeSBhbiBlbXB0eSBzdHJpbmcuIFRvIGZpbHRlciB1c2luZyBhIFYxIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24sIGFkZCB0aGUgYGBQcmVmaXhgYCBkaXJlY3RseSBhcyBhIGNoaWxkIGVsZW1lbnQgb2YgdGhlIGBgUnVsZWBgIGVsZW1lbnQuXG4gKiAgIFJlcGxhY2VtZW50IG11c3QgYmUgbWFkZSBmb3Igb2JqZWN0IGtleXMgY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMgKHN1Y2ggYXMgY2FycmlhZ2UgcmV0dXJucykgd2hlbiB1c2luZyBYTUwgcmVxdWVzdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1hNTCByZWxhdGVkIG9iamVjdCBrZXkgY29uc3RyYWludHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1rZXlzLmh0bWwjb2JqZWN0LWtleS14bWwtcmVsYXRlZC1jb25zdHJhaW50cykuXG4gKi9cblByZWZpeD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcHJpb3JpdHkgaW5kaWNhdGVzIHdoaWNoIHJ1bGUgaGFzIHByZWNlZGVuY2Ugd2hlbmV2ZXIgdHdvIG9yIG1vcmUgcmVwbGljYXRpb24gcnVsZXMgY29uZmxpY3QuIEFtYXpvbiBTMyB3aWxsIGF0dGVtcHQgdG8gcmVwbGljYXRlIG9iamVjdHMgYWNjb3JkaW5nIHRvIGFsbCByZXBsaWNhdGlvbiBydWxlcy4gSG93ZXZlciwgaWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIHJ1bGVzIHdpdGggdGhlIHNhbWUgZGVzdGluYXRpb24gYnVja2V0LCB0aGVuIG9iamVjdHMgd2lsbCBiZSByZXBsaWNhdGVkIGFjY29yZGluZyB0byB0aGUgcnVsZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5LiBUaGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBoaWdoZXIgdGhlIHByaW9yaXR5LiBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXBsaWNhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvcmVwbGljYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgVXNlciBHdWlkZSouXG4gKi9cblByaW9yaXR5PzogbnVtYmVyXG5Tb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYT86IFNvdXJjZVNlbGVjdGlvbkNyaXRlcmlhXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBydWxlIGlzIGVuYWJsZWQuXG4gKi9cblN0YXR1czogKFwiRGlzYWJsZWRcIiB8IFwiRW5hYmxlZFwiKVxufVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgcmVwbGljYXRlcyBkZWxldGUgbWFya2Vycy4gSWYgeW91IHNwZWNpZnkgYSBgYEZpbHRlcmBgIGluIHlvdXIgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgeW91IG11c3QgYWxzbyBpbmNsdWRlIGEgYGBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbmBgIGVsZW1lbnQuIElmIHlvdXIgYGBGaWx0ZXJgYCBpbmNsdWRlcyBhIGBgVGFnYGAgZWxlbWVudCwgdGhlIGBgRGVsZXRlTWFya2VyUmVwbGljYXRpb25gYCBgYFN0YXR1c2BgIG11c3QgYmUgc2V0IHRvIERpc2FibGVkLCBiZWNhdXNlIEFtYXpvbiBTMyBkb2VzIG5vdCBzdXBwb3J0IHJlcGxpY2F0aW5nIGRlbGV0ZSBtYXJrZXJzIGZvciB0YWctYmFzZWQgcnVsZXMuIEZvciBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24sIHNlZSBbQmFzaWMgUnVsZSBDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tY29uZmlnLW1pbi1ydWxlLWNvbmZpZykuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlbGV0ZSBtYXJrZXIgcmVwbGljYXRpb24sIHNlZSBbQmFzaWMgUnVsZSBDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9kZWxldGUtbWFya2VyLXJlcGxpY2F0aW9uLmh0bWwpLiBcbiAqICAgSWYgeW91IGFyZSB1c2luZyBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24sIEFtYXpvbiBTMyBoYW5kbGVzIHJlcGxpY2F0aW9uIG9mIGRlbGV0ZSBtYXJrZXJzIGRpZmZlcmVudGx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCYWNrd2FyZCBDb21wYXRpYmlsaXR5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tYmFja3dhcmQtY29tcGF0LWNvbnNpZGVyYXRpb25zKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbiB7XG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHJlcGxpY2F0ZSBkZWxldGUgbWFya2Vycy4gRGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAqL1xuU3RhdHVzPzogKFwiRGlzYWJsZWRcIiB8IFwiRW5hYmxlZFwiKVxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcGxpY2F0aW9uIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29uZmlndXJhdGlvbnMgaW5jbHVkaW5nIGVuYWJsaW5nIHRoZSBTMyBSZXBsaWNhdGlvbiBUaW1lIENvbnRyb2wgKFMzIFJUQykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGljYXRpb25EZXN0aW5hdGlvbiB7XG5BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24/OiBBY2Nlc3NDb250cm9sVHJhbnNsYXRpb25cbi8qKlxuICogRGVzdGluYXRpb24gYnVja2V0IG93bmVyIGFjY291bnQgSUQuIEluIGEgY3Jvc3MtYWNjb3VudCBzY2VuYXJpbywgaWYgeW91IGRpcmVjdCBBbWF6b24gUzMgdG8gY2hhbmdlIHJlcGxpY2Egb3duZXJzaGlwIHRvIHRoZSBBV1MtYWNjb3VudCB0aGF0IG93bnMgdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldCBieSBzcGVjaWZ5aW5nIHRoZSBgYEFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbmBgIHByb3BlcnR5LCB0aGlzIGlzIHRoZSBhY2NvdW50IElEIG9mIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQgb3duZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0Nyb3NzLVJlZ2lvbiBSZXBsaWNhdGlvbiBBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb246IENoYW5nZSBSZXBsaWNhIE93bmVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9jcnItY2hhbmdlLW93bmVyLmh0bWwpIGluIHRoZSAqQW1hem9uIFMzIFVzZXIgR3VpZGUqLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYEFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbmBgIHByb3BlcnR5LCB0aGUgYGBBY2NvdW50YGAgcHJvcGVydHkgaXMgcmVxdWlyZWQuXG4gKi9cbkFjY291bnQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBidWNrZXQgd2hlcmUgeW91IHdhbnQgQW1hem9uIFMzIHRvIHN0b3JlIHRoZSByZXN1bHRzLlxuICovXG5CdWNrZXQ6IHN0cmluZ1xuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24/OiBFbmNyeXB0aW9uQ29uZmlndXJhdGlvblxuTWV0cmljcz86IE1ldHJpY3NcblJlcGxpY2F0aW9uVGltZT86IFJlcGxpY2F0aW9uVGltZVxuLyoqXG4gKiBUaGUgc3RvcmFnZSBjbGFzcyB0byB1c2Ugd2hlbiByZXBsaWNhdGluZyBvYmplY3RzLCBzdWNoIGFzIFMzIFN0YW5kYXJkIG9yIHJlZHVjZWQgcmVkdW5kYW5jeS4gQnkgZGVmYXVsdCwgQW1hem9uIFMzIHVzZXMgdGhlIHN0b3JhZ2UgY2xhc3Mgb2YgdGhlIHNvdXJjZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBvYmplY3QgcmVwbGljYS4gXG4gKiAgRm9yIHZhbGlkIHZhbHVlcywgc2VlIHRoZSBgYFN0b3JhZ2VDbGFzc2BgIGVsZW1lbnQgb2YgdGhlIFtQVVQgQnVja2V0IHJlcGxpY2F0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUcmVwbGljYXRpb24uaHRtbCkgYWN0aW9uIGluIHRoZSAqQW1hem9uIFMzIEFQSSBSZWZlcmVuY2UqLlxuICovXG5TdG9yYWdlQ2xhc3M/OiAoXCJERUVQX0FSQ0hJVkVcIiB8IFwiR0xBQ0lFUlwiIHwgXCJHTEFDSUVSX0lSXCIgfCBcIklOVEVMTElHRU5UX1RJRVJJTkdcIiB8IFwiT05FWk9ORV9JQVwiIHwgXCJSRURVQ0VEX1JFRFVOREFOQ1lcIiB8IFwiU1RBTkRBUkRcIiB8IFwiU1RBTkRBUkRfSUFcIilcbn1cbi8qKlxuICogU3BlY2lmeSB0aGlzIG9ubHkgaW4gYSBjcm9zcy1hY2NvdW50IHNjZW5hcmlvICh3aGVyZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGJ1Y2tldCBvd25lcnMgYXJlIG5vdCB0aGUgc2FtZSksIGFuZCB5b3Ugd2FudCB0byBjaGFuZ2UgcmVwbGljYSBvd25lcnNoaXAgdG8gdGhlIEFXUy1hY2NvdW50IHRoYXQgb3ducyB0aGUgZGVzdGluYXRpb24gYnVja2V0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24sIHRoZSByZXBsaWNhcyBhcmUgb3duZWQgYnkgc2FtZSBBV1MtYWNjb3VudCB0aGF0IG93bnMgdGhlIHNvdXJjZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSByZXBsaWNhIG93bmVyc2hpcC4gRm9yIGRlZmF1bHQgYW5kIHZhbGlkIHZhbHVlcywgc2VlIFtQVVQgYnVja2V0IHJlcGxpY2F0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUcmVwbGljYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUzMgQVBJIFJlZmVyZW5jZSouXG4gKi9cbk93bmVyOiBcIkRlc3RpbmF0aW9uXCJcbn1cbi8qKlxuICogU3BlY2lmaWVzIGVuY3J5cHRpb24tcmVsYXRlZCBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgSUQgKEtleSBBUk4gb3IgQWxpYXMgQVJOKSBvZiB0aGUgY3VzdG9tZXIgbWFuYWdlZCBBV1MgS01TIGtleSBzdG9yZWQgaW4gQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykgZm9yIHRoZSBkZXN0aW5hdGlvbiBidWNrZXQuIEFtYXpvbiBTMyB1c2VzIHRoaXMga2V5IHRvIGVuY3J5cHQgcmVwbGljYSBvYmplY3RzLiBBbWF6b24gUzMgb25seSBzdXBwb3J0cyBzeW1tZXRyaWMgZW5jcnlwdGlvbiBLTVMga2V5cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQXN5bW1ldHJpYyBrZXlzIGluIEtNU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tLy9rbXMvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3N5bW1ldHJpYy1hc3ltbWV0cmljLmh0bWwpIGluIHRoZSAqS2V5IE1hbmFnZW1lbnQgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZXBsaWNhS21zS2V5SUQ6IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIHJlcGxpY2F0aW9uIG1ldHJpY3MtcmVsYXRlZCBzZXR0aW5ncyBlbmFibGluZyByZXBsaWNhdGlvbiBtZXRyaWNzIGFuZCBldmVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljcyB7XG5FdmVudFRocmVzaG9sZD86IFJlcGxpY2F0aW9uVGltZVZhbHVlXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSByZXBsaWNhdGlvbiBtZXRyaWNzIGFyZSBlbmFibGVkLlxuICovXG5TdGF0dXM6IChcIkRpc2FibGVkXCIgfCBcIkVuYWJsZWRcIilcbn1cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyB0aGUgdGltZSB0aHJlc2hvbGQgZm9yIGVtaXR0aW5nIHRoZSBgYHMzOlJlcGxpY2F0aW9uOk9wZXJhdGlvbk1pc3NlZFRocmVzaG9sZGBgIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2F0aW9uVGltZVZhbHVlIHtcbi8qKlxuICogQ29udGFpbnMgYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRpbWUgaW4gbWludXRlcy4gXG4gKiAgIFZhbGlkIHZhbHVlOiAxNVxuICovXG5NaW51dGVzOiBudW1iZXJcbn1cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyBTMyBSZXBsaWNhdGlvbiBUaW1lIENvbnRyb2wgKFMzIFJUQyksIGluY2x1ZGluZyB3aGV0aGVyIFMzIFJUQyBpcyBlbmFibGVkIGFuZCB0aGUgdGltZSB3aGVuIGFsbCBvYmplY3RzIGFuZCBvcGVyYXRpb25zIG9uIG9iamVjdHMgbXVzdCBiZSByZXBsaWNhdGVkLiBNdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIGEgYGBNZXRyaWNzYGAgYmxvY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGljYXRpb25UaW1lIHtcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHJlcGxpY2F0aW9uIHRpbWUgaXMgZW5hYmxlZC5cbiAqL1xuU3RhdHVzOiAoXCJEaXNhYmxlZFwiIHwgXCJFbmFibGVkXCIpXG5UaW1lOiBSZXBsaWNhdGlvblRpbWVWYWx1ZTFcbn1cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyB0aGUgdGltZSBieSB3aGljaCByZXBsaWNhdGlvbiBzaG91bGQgYmUgY29tcGxldGUgZm9yIGFsbCBvYmplY3RzIGFuZCBvcGVyYXRpb25zIG9uIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGljYXRpb25UaW1lVmFsdWUxIHtcbi8qKlxuICogQ29udGFpbnMgYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRpbWUgaW4gbWludXRlcy4gXG4gKiAgIFZhbGlkIHZhbHVlOiAxNVxuICovXG5NaW51dGVzOiBudW1iZXJcbn1cbi8qKlxuICogQSBmaWx0ZXIgdGhhdCBpZGVudGlmaWVzIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcmVwbGljYXRpb24gcnVsZSBhcHBsaWVzLiBBIGBgRmlsdGVyYGAgbXVzdCBzcGVjaWZ5IGV4YWN0bHkgb25lIGBgUHJlZml4YGAsIGBgVGFnRmlsdGVyYGAsIG9yIGFuIGBgQW5kYGAgY2hpbGQgZWxlbWVudC4gVGhlIHVzZSBvZiB0aGUgZmlsdGVyIGZpZWxkIGluZGljYXRlcyB0aGF0IHRoaXMgaXMgYSBWMiByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uLiBUaGlzIGZpZWxkIGlzbid0IHN1cHBvcnRlZCBpbiBhIFYxIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiAgIFYxIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb25seSBzdXBwb3J0cyBmaWx0ZXJpbmcgYnkga2V5IHByZWZpeC4gVG8gZmlsdGVyIHVzaW5nIGEgVjEgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgYWRkIHRoZSBgYFByZWZpeGBgIGRpcmVjdGx5IGFzIGEgY2hpbGQgZWxlbWVudCBvZiB0aGUgYGBSdWxlYGAgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhdGlvblJ1bGVGaWx0ZXIge1xuQW5kPzogUmVwbGljYXRpb25SdWxlQW5kT3BlcmF0b3Jcbi8qKlxuICogQW4gb2JqZWN0IGtleSBuYW1lIHByZWZpeCB0aGF0IGlkZW50aWZpZXMgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSBydWxlIGFwcGxpZXMuXG4gKiAgIFJlcGxhY2VtZW50IG11c3QgYmUgbWFkZSBmb3Igb2JqZWN0IGtleXMgY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMgKHN1Y2ggYXMgY2FycmlhZ2UgcmV0dXJucykgd2hlbiB1c2luZyBYTUwgcmVxdWVzdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1hNTCByZWxhdGVkIG9iamVjdCBrZXkgY29uc3RyYWludHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1rZXlzLmh0bWwjb2JqZWN0LWtleS14bWwtcmVsYXRlZC1jb25zdHJhaW50cykuXG4gKi9cblByZWZpeD86IHN0cmluZ1xuVGFnRmlsdGVyPzogVGFnRmlsdGVyMVxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyBydWxlIGZpbHRlcnMuIFRoZSBmaWx0ZXJzIGRldGVybWluZSB0aGUgc3Vic2V0IG9mIG9iamVjdHMgdG8gd2hpY2ggdGhlIHJ1bGUgYXBwbGllcy4gVGhpcyBlbGVtZW50IGlzIHJlcXVpcmVkIG9ubHkgaWYgeW91IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBmaWx0ZXIuIEZvciBleGFtcGxlOiBcbiAqICAgKyAgSWYgeW91IHNwZWNpZnkgYm90aCBhIGBgUHJlZml4YGAgYW5kIGEgYGBUYWdGaWx0ZXJgYCwgd3JhcCB0aGVzZSBmaWx0ZXJzIGluIGFuIGBgQW5kYGAgdGFnLlxuICogICArICBJZiB5b3Ugc3BlY2lmeSBhIGZpbHRlciBiYXNlZCBvbiBtdWx0aXBsZSB0YWdzLCB3cmFwIHRoZSBgYFRhZ0ZpbHRlcmBgIGVsZW1lbnRzIGluIGFuIGBgQW5kYGAgdGFnLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2F0aW9uUnVsZUFuZE9wZXJhdG9yIHtcbi8qKlxuICogQW4gb2JqZWN0IGtleSBuYW1lIHByZWZpeCB0aGF0IGlkZW50aWZpZXMgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSBydWxlIGFwcGxpZXMuXG4gKi9cblByZWZpeD86IHN0cmluZ1xuLyoqXG4gKiBBbiBhcnJheSBvZiB0YWdzIGNvbnRhaW5pbmcga2V5IGFuZCB2YWx1ZSBwYWlycy5cbiAqL1xuVGFnRmlsdGVycz86IFRhZ0ZpbHRlcltdXG59XG4vKipcbiAqIFNwZWNpZmllcyB0YWdzIHRvIHVzZSB0byBpZGVudGlmeSBhIHN1YnNldCBvZiBvYmplY3RzIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZ0ZpbHRlcjEge1xuLyoqXG4gKiBUaGUgdGFnIHZhbHVlLlxuICovXG5WYWx1ZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWcga2V5LlxuICovXG5LZXk6IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbnRhaW5lciB0aGF0IGRlc2NyaWJlcyBhZGRpdGlvbmFsIGZpbHRlcnMgZm9yIGlkZW50aWZ5aW5nIHRoZSBzb3VyY2Ugb2JqZWN0cyB0aGF0IHlvdSB3YW50IHRvIHJlcGxpY2F0ZS4gWW91IGNhbiBjaG9vc2UgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHJlcGxpY2F0aW9uIG9mIHRoZXNlIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEge1xuUmVwbGljYU1vZGlmaWNhdGlvbnM/OiBSZXBsaWNhTW9kaWZpY2F0aW9uc1xuU3NlS21zRW5jcnlwdGVkT2JqZWN0cz86IFNzZUttc0VuY3J5cHRlZE9iamVjdHNcbn1cbi8qKlxuICogQSBmaWx0ZXIgdGhhdCB5b3UgY2FuIHNwZWNpZnkgZm9yIHNlbGVjdGlvbiBmb3IgbW9kaWZpY2F0aW9ucyBvbiByZXBsaWNhcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhTW9kaWZpY2F0aW9ucyB7XG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIEFtYXpvbiBTMyByZXBsaWNhdGVzIG1vZGlmaWNhdGlvbnMgb24gcmVwbGljYXMuXG4gKiAgICpBbGxvd2VkIHZhbHVlcyo6IGBgRW5hYmxlZGBgIHwgYGBEaXNhYmxlZGBgXG4gKi9cblN0YXR1czogKFwiRW5hYmxlZFwiIHwgXCJEaXNhYmxlZFwiKVxufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3IgZmlsdGVyIGluZm9ybWF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIG9mIEFtYXpvbiBTMyBvYmplY3RzIGVuY3J5cHRlZCB3aXRoIEFXUyBLTVMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NlS21zRW5jcnlwdGVkT2JqZWN0cyB7XG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIEFtYXpvbiBTMyByZXBsaWNhdGVzIG9iamVjdHMgY3JlYXRlZCB3aXRoIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdXNpbmcgYW4gQVdTIEtNUyBrZXkgc3RvcmVkIGluIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlLlxuICovXG5TdGF0dXM6IChcIkRpc2FibGVkXCIgfCBcIkVuYWJsZWRcIilcbn1cbi8qKlxuICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIE5hbWUgb2YgdGhlIG9iamVjdCBrZXkuXG4gKi9cbktleTogc3RyaW5nXG4vKipcbiAqIFZhbHVlIG9mIHRoZSB0YWcuXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbi8qKlxuICogRW5hYmxlcyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhbGwgb2JqZWN0cyBpbiB0aGlzIGJ1Y2tldC4gWW91IG1pZ2h0IGVuYWJsZSB2ZXJzaW9uaW5nIHRvIHByZXZlbnQgb2JqZWN0cyBmcm9tIGJlaW5nIGRlbGV0ZWQgb3Igb3ZlcndyaXR0ZW4gYnkgbWlzdGFrZSBvciB0byBhcmNoaXZlIG9iamVjdHMgc28gdGhhdCB5b3UgY2FuIHJldHJpZXZlIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoZW0uXG4gKiAgIFdoZW4geW91IGVuYWJsZSB2ZXJzaW9uaW5nIG9uIGEgYnVja2V0IGZvciB0aGUgZmlyc3QgdGltZSwgaXQgbWlnaHQgdGFrZSBhIHNob3J0IGFtb3VudCBvZiB0aW1lIGZvciB0aGUgY2hhbmdlIHRvIGJlIGZ1bGx5IHByb3BhZ2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB3YWl0IGZvciAxNSBtaW51dGVzIGFmdGVyIGVuYWJsaW5nIHZlcnNpb25pbmcgYmVmb3JlIGlzc3Vpbmcgd3JpdGUgb3BlcmF0aW9ucyAoYGBQVVRgYCBvciBgYERFTEVURWBgKSBvbiBvYmplY3RzIGluIHRoZSBidWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgdmVyc2lvbmluZyBzdGF0ZSBvZiB0aGUgYnVja2V0LlxuICovXG5TdGF0dXM6IChcIkVuYWJsZWRcIiB8IFwiU3VzcGVuZGVkXCIpXG59XG4vKipcbiAqIEluZm9ybWF0aW9uIHVzZWQgdG8gY29uZmlndXJlIHRoZSBidWNrZXQgYXMgYSBzdGF0aWMgd2Vic2l0ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSG9zdGluZyBXZWJzaXRlcyBvbiBBbWF6b24gUzNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1dlYnNpdGVIb3N0aW5nLmh0bWwpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYnNpdGVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGVycm9yIGRvY3VtZW50IGZvciB0aGUgd2Vic2l0ZS5cbiAqL1xuRXJyb3JEb2N1bWVudD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgaW5kZXggZG9jdW1lbnQgZm9yIHRoZSB3ZWJzaXRlLlxuICovXG5JbmRleERvY3VtZW50Pzogc3RyaW5nXG4vKipcbiAqIFJ1bGVzIHRoYXQgZGVmaW5lIHdoZW4gYSByZWRpcmVjdCBpcyBhcHBsaWVkIGFuZCB0aGUgcmVkaXJlY3QgYmVoYXZpb3IuXG4gKi9cblJvdXRpbmdSdWxlcz86IFJvdXRpbmdSdWxlW11cblJlZGlyZWN0QWxsUmVxdWVzdHNUbz86IFJlZGlyZWN0QWxsUmVxdWVzdHNUb1xufVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHJlZGlyZWN0IGJlaGF2aW9yIGFuZCB3aGVuIGEgcmVkaXJlY3QgaXMgYXBwbGllZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcm91dGluZyBydWxlcywgc2VlIFtDb25maWd1cmluZyBhZHZhbmNlZCBjb25kaXRpb25hbCByZWRpcmVjdHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2hvdy10by1wYWdlLXJlZGlyZWN0Lmh0bWwjYWR2YW5jZWQtY29uZGl0aW9uYWwtcmVkaXJlY3RzKSBpbiB0aGUgKkFtYXpvbiBTMyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0aW5nUnVsZSB7XG5SZWRpcmVjdFJ1bGU6IFJlZGlyZWN0UnVsZVxuUm91dGluZ1J1bGVDb25kaXRpb24/OiBSb3V0aW5nUnVsZUNvbmRpdGlvblxufVxuLyoqXG4gKiBDb250YWluZXIgZm9yIHJlZGlyZWN0IGluZm9ybWF0aW9uLiBZb3UgY2FuIHJlZGlyZWN0IHJlcXVlc3RzIHRvIGFub3RoZXIgaG9zdCwgdG8gYW5vdGhlciBwYWdlLCBvciB3aXRoIGFub3RoZXIgcHJvdG9jb2wuIEluIHRoZSBldmVudCBvZiBhbiBlcnJvciwgeW91IGNhbiBzcGVjaWZ5IGEgZGlmZmVyZW50IGVycm9yIGNvZGUgdG8gcmV0dXJuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlyZWN0UnVsZSB7XG4vKipcbiAqIFRoZSBob3N0IG5hbWUgdG8gdXNlIGluIHRoZSByZWRpcmVjdCByZXF1ZXN0LlxuICovXG5Ib3N0TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSFRUUCByZWRpcmVjdCBjb2RlIHRvIHVzZSBvbiB0aGUgcmVzcG9uc2UuIE5vdCByZXF1aXJlZCBpZiBvbmUgb2YgdGhlIHNpYmxpbmdzIGlzIHByZXNlbnQuXG4gKi9cbkh0dHBSZWRpcmVjdENvZGU/OiBzdHJpbmdcbi8qKlxuICogUHJvdG9jb2wgdG8gdXNlIHdoZW4gcmVkaXJlY3RpbmcgcmVxdWVzdHMuIFRoZSBkZWZhdWx0IGlzIHRoZSBwcm90b2NvbCB0aGF0IGlzIHVzZWQgaW4gdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gKi9cblByb3RvY29sPzogKFwiaHR0cFwiIHwgXCJodHRwc1wiKVxuLyoqXG4gKiBUaGUgb2JqZWN0IGtleSBwcmVmaXggdG8gdXNlIGluIHRoZSByZWRpcmVjdCByZXF1ZXN0LiBGb3IgZXhhbXBsZSwgdG8gcmVkaXJlY3QgcmVxdWVzdHMgZm9yIGFsbCBwYWdlcyB3aXRoIHByZWZpeCBgYGRvY3MvYGAgKG9iamVjdHMgaW4gdGhlIGBgZG9jcy9gYCBmb2xkZXIpIHRvIGBgZG9jdW1lbnRzL2BgLCB5b3UgY2FuIHNldCBhIGNvbmRpdGlvbiBibG9jayB3aXRoIGBgS2V5UHJlZml4RXF1YWxzYGAgc2V0IHRvIGBgZG9jcy9gYCBhbmQgaW4gdGhlIFJlZGlyZWN0IHNldCBgYFJlcGxhY2VLZXlQcmVmaXhXaXRoYGAgdG8gYGAvZG9jdW1lbnRzYGAuIE5vdCByZXF1aXJlZCBpZiBvbmUgb2YgdGhlIHNpYmxpbmdzIGlzIHByZXNlbnQuIENhbiBiZSBwcmVzZW50IG9ubHkgaWYgYGBSZXBsYWNlS2V5V2l0aGBgIGlzIG5vdCBwcm92aWRlZC5cbiAqICAgUmVwbGFjZW1lbnQgbXVzdCBiZSBtYWRlIGZvciBvYmplY3Qga2V5cyBjb250YWluaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoc3VjaCBhcyBjYXJyaWFnZSByZXR1cm5zKSB3aGVuIHVzaW5nIFhNTCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbWE1MIHJlbGF0ZWQgb2JqZWN0IGtleSBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWtleXMuaHRtbCNvYmplY3Qta2V5LXhtbC1yZWxhdGVkLWNvbnN0cmFpbnRzKS5cbiAqL1xuUmVwbGFjZUtleVByZWZpeFdpdGg/OiBzdHJpbmdcbi8qKlxuICogVGhlIHNwZWNpZmljIG9iamVjdCBrZXkgdG8gdXNlIGluIHRoZSByZWRpcmVjdCByZXF1ZXN0LiBGb3IgZXhhbXBsZSwgcmVkaXJlY3QgcmVxdWVzdCB0byBgYGVycm9yLmh0bWxgYC4gTm90IHJlcXVpcmVkIGlmIG9uZSBvZiB0aGUgc2libGluZ3MgaXMgcHJlc2VudC4gQ2FuIGJlIHByZXNlbnQgb25seSBpZiBgYFJlcGxhY2VLZXlQcmVmaXhXaXRoYGAgaXMgbm90IHByb3ZpZGVkLlxuICogICBSZXBsYWNlbWVudCBtdXN0IGJlIG1hZGUgZm9yIG9iamVjdCBrZXlzIGNvbnRhaW5pbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChzdWNoIGFzIGNhcnJpYWdlIHJldHVybnMpIHdoZW4gdXNpbmcgWE1MIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtYTUwgcmVsYXRlZCBvYmplY3Qga2V5IGNvbnN0cmFpbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3Qta2V5cy5odG1sI29iamVjdC1rZXkteG1sLXJlbGF0ZWQtY29uc3RyYWludHMpLlxuICovXG5SZXBsYWNlS2V5V2l0aD86IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3IgZGVzY3JpYmluZyBhIGNvbmRpdGlvbiB0aGF0IG11c3QgYmUgbWV0IGZvciB0aGUgc3BlY2lmaWVkIHJlZGlyZWN0IHRvIGFwcGx5LiBGb3IgZXhhbXBsZSwgMS4gSWYgcmVxdWVzdCBpcyBmb3IgcGFnZXMgaW4gdGhlIGBgL2RvY3NgYCBmb2xkZXIsIHJlZGlyZWN0IHRvIHRoZSBgYC9kb2N1bWVudHNgYCBmb2xkZXIuIDIuIElmIHJlcXVlc3QgcmVzdWx0cyBpbiBIVFRQIGVycm9yIDR4eCwgcmVkaXJlY3QgcmVxdWVzdCB0byBhbm90aGVyIGhvc3Qgd2hlcmUgeW91IG1pZ2h0IHByb2Nlc3MgdGhlIGVycm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRpbmdSdWxlQ29uZGl0aW9uIHtcbi8qKlxuICogVGhlIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggd2hlbiB0aGUgcmVkaXJlY3QgaXMgYXBwbGllZC4gRm9yIGV4YW1wbGUsIHRvIHJlZGlyZWN0IHJlcXVlc3RzIGZvciBgYEV4YW1wbGVQYWdlLmh0bWxgYCwgdGhlIGtleSBwcmVmaXggd2lsbCBiZSBgYEV4YW1wbGVQYWdlLmh0bWxgYC4gVG8gcmVkaXJlY3QgcmVxdWVzdCBmb3IgYWxsIHBhZ2VzIHdpdGggdGhlIHByZWZpeCBgYGRvY3MvYGAsIHRoZSBrZXkgcHJlZml4IHdpbGwgYmUgYGAvZG9jc2BgLCB3aGljaCBpZGVudGlmaWVzIGFsbCBvYmplY3RzIGluIHRoZSBkb2NzLyBmb2xkZXIuXG4gKiAgUmVxdWlyZWQgd2hlbiB0aGUgcGFyZW50IGVsZW1lbnQgYGBDb25kaXRpb25gYCBpcyBzcGVjaWZpZWQgYW5kIHNpYmxpbmcgYGBIdHRwRXJyb3JDb2RlUmV0dXJuZWRFcXVhbHNgYCBpcyBub3Qgc3BlY2lmaWVkLiBJZiBib3RoIGNvbmRpdGlvbnMgYXJlIHNwZWNpZmllZCwgYm90aCBtdXN0IGJlIHRydWUgZm9yIHRoZSByZWRpcmVjdCB0byBiZSBhcHBsaWVkLlxuICovXG5LZXlQcmVmaXhFcXVhbHM/OiBzdHJpbmdcbi8qKlxuICogVGhlIEhUVFAgZXJyb3IgY29kZSB3aGVuIHRoZSByZWRpcmVjdCBpcyBhcHBsaWVkLiBJbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IsIGlmIHRoZSBlcnJvciBjb2RlIGVxdWFscyB0aGlzIHZhbHVlLCB0aGVuIHRoZSBzcGVjaWZpZWQgcmVkaXJlY3QgaXMgYXBwbGllZC5cbiAqICBSZXF1aXJlZCB3aGVuIHBhcmVudCBlbGVtZW50IGBgQ29uZGl0aW9uYGAgaXMgc3BlY2lmaWVkIGFuZCBzaWJsaW5nIGBgS2V5UHJlZml4RXF1YWxzYGAgaXMgbm90IHNwZWNpZmllZC4gSWYgYm90aCBhcmUgc3BlY2lmaWVkLCB0aGVuIGJvdGggbXVzdCBiZSB0cnVlIGZvciB0aGUgcmVkaXJlY3QgdG8gYmUgYXBwbGllZC5cbiAqL1xuSHR0cEVycm9yQ29kZVJldHVybmVkRXF1YWxzPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSByZWRpcmVjdCBiZWhhdmlvciBmb3IgZXZlcnkgcmVxdWVzdCB0byB0aGlzIGJ1Y2tldCdzIHdlYnNpdGUgZW5kcG9pbnQuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIHlvdSBjYW4ndCBzcGVjaWZ5IGFueSBvdGhlciBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRpcmVjdEFsbFJlcXVlc3RzVG8ge1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBob3N0IHdoZXJlIHJlcXVlc3RzIGFyZSByZWRpcmVjdGVkLlxuICovXG5Ib3N0TmFtZTogc3RyaW5nXG4vKipcbiAqIFByb3RvY29sIHRvIHVzZSB3aGVuIHJlZGlyZWN0aW5nIHJlcXVlc3RzLiBUaGUgZGVmYXVsdCBpcyB0aGUgcHJvdG9jb2wgdGhhdCBpcyB1c2VkIGluIHRoZSBvcmlnaW5hbCByZXF1ZXN0LlxuICovXG5Qcm90b2NvbD86IChcImh0dHBcIiB8IFwiaHR0cHNcIilcbn1cbiJdfQ==
@@ -6,7 +6,10 @@ export interface _AWS_S3EXPRESS_DIRECTORYBUCKET {
6
6
  * Specifies a name for the bucket. The bucket name must contain only lowercase letters, numbers, and hyphens (-). A directory bucket name must be unique in the chosen Availability Zone. The bucket name must also follow the format 'bucket_base_name--az_id--x-s3' (for example, 'DOC-EXAMPLE-BUCKET--usw2-az1--x-s3'). If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the bucket name.
7
7
  */
8
8
  BucketName?: string;
9
- BucketEncryption?: unknown;
9
+ /**
10
+ * Specifies the AZ ID of the Availability Zone where the directory bucket will be created. An example AZ ID value is 'use1-az5'.
11
+ */
12
+ LocationName: string;
10
13
  /**
11
14
  * Returns the code for the Availability Zone where the directory bucket was created.
12
15
  */
@@ -19,8 +22,36 @@ export interface _AWS_S3EXPRESS_DIRECTORYBUCKET {
19
22
  * Returns the Amazon Resource Name (ARN) of the specified bucket.
20
23
  */
21
24
  Arn?: string;
25
+ BucketEncryption?: BucketEncryption;
26
+ }
27
+ /**
28
+ * Specifies default encryption for a bucket using server-side encryption with Amazon S3 managed keys (SSE-S3) or AWS KMS keys (SSE-KMS).
29
+ */
30
+ export interface BucketEncryption {
22
31
  /**
23
- * Specifies the AZ ID of the Availability Zone where the directory bucket will be created. An example AZ ID value is 'use1-az5'.
32
+ * Specifies the default server-side-encryption configuration.
24
33
  */
25
- LocationName: string;
34
+ ServerSideEncryptionConfiguration: ServerSideEncryptionRule[];
35
+ }
36
+ /**
37
+ * Specifies the default server-side encryption configuration.
38
+ */
39
+ export interface ServerSideEncryptionRule {
40
+ /**
41
+ * Specifies whether Amazon S3 should use an S3 Bucket Key with server-side encryption using KMS (SSE-KMS) for new objects in the bucket. Existing objects are not affected. Amazon S3 Express One Zone uses an S3 Bucket Key with SSE-KMS and S3 Bucket Key cannot be disabled. It's only allowed to set the BucketKeyEnabled element to true.
42
+ */
43
+ BucketKeyEnabled?: boolean;
44
+ ServerSideEncryptionByDefault?: ServerSideEncryptionByDefault;
45
+ }
46
+ /**
47
+ * Specifies the default server-side encryption to apply to new objects in the bucket. If a PUT Object request doesn't specify any server-side encryption, this default encryption will be applied.
48
+ */
49
+ export interface ServerSideEncryptionByDefault {
50
+ /**
51
+ * AWS Key Management Service (KMS) customer managed key ID to use for the default encryption. This parameter is allowed only if SSEAlgorithm is set to aws:kms. You can specify this parameter with the key ID or the Amazon Resource Name (ARN) of the KMS key
52
+ */
53
+ KMSMasterKeyID?: ({
54
+ [k: string]: unknown;
55
+ } & string);
56
+ SSEAlgorithm: ("aws:kms" | "AES256");
26
57
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXMzZXhwcmVzcy1kaXJlY3RvcnlidWNrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtczNleHByZXNzLWRpcmVjdG9yeWJ1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZSBUeXBlIGRlZmluaXRpb24gZm9yIEFXUzo6UzNFeHByZXNzOjpEaXJlY3RvcnlCdWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19TM0VYUFJFU1NfRElSRUNUT1JZQlVDS0VUIHtcbi8qKlxuICogU3BlY2lmaWVzIGEgbmFtZSBmb3IgdGhlIGJ1Y2tldC4gVGhlIGJ1Y2tldCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVucyAoLSkuIEEgZGlyZWN0b3J5IGJ1Y2tldCBuYW1lIG11c3QgYmUgdW5pcXVlIGluIHRoZSBjaG9zZW4gQXZhaWxhYmlsaXR5IFpvbmUuIFRoZSBidWNrZXQgbmFtZSBtdXN0IGFsc28gZm9sbG93IHRoZSBmb3JtYXQgJ2J1Y2tldF9iYXNlX25hbWUtLWF6X2lkLS14LXMzJyAoZm9yIGV4YW1wbGUsICdET0MtRVhBTVBMRS1CVUNLRVQtLXVzdzItYXoxLS14LXMzJykuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgbmFtZSwgQVdTIENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlcyBhIHVuaXF1ZSBwaHlzaWNhbCBJRCBhbmQgdXNlcyB0aGF0IElEIGZvciB0aGUgYnVja2V0IG5hbWUuXG4gKi9cbkJ1Y2tldE5hbWU/OiBzdHJpbmdcbkJ1Y2tldEVuY3J5cHRpb24/OiB1bmtub3duXG4vKipcbiAqIFJldHVybnMgdGhlIGNvZGUgZm9yIHRoZSBBdmFpbGFiaWxpdHkgWm9uZSB3aGVyZSB0aGUgZGlyZWN0b3J5IGJ1Y2tldCB3YXMgY3JlYXRlZC5cbiAqL1xuQXZhaWxhYmlsaXR5Wm9uZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgQXZhaWxhYmlsaXR5IFpvbmUgdGhhdCdzIHVzZWQgZm9yIHJlZHVuZGFuY3kgZm9yIHRoZSBidWNrZXQuXG4gKi9cbkRhdGFSZWR1bmRhbmN5OiBcIlNpbmdsZUF2YWlsYWJpbGl0eVpvbmVcIlxuLyoqXG4gKiBSZXR1cm5zIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc3BlY2lmaWVkIGJ1Y2tldC5cbiAqL1xuQXJuPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgQVogSUQgb2YgdGhlIEF2YWlsYWJpbGl0eSBab25lIHdoZXJlIHRoZSBkaXJlY3RvcnkgYnVja2V0IHdpbGwgYmUgY3JlYXRlZC4gQW4gZXhhbXBsZSBBWiBJRCB2YWx1ZSBpcyAndXNlMS1hejUnLlxuICovXG5Mb2NhdGlvbk5hbWU6IHN0cmluZ1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXMzZXhwcmVzcy1kaXJlY3RvcnlidWNrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtczNleHByZXNzLWRpcmVjdG9yeWJ1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZSBUeXBlIGRlZmluaXRpb24gZm9yIEFXUzo6UzNFeHByZXNzOjpEaXJlY3RvcnlCdWNrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19TM0VYUFJFU1NfRElSRUNUT1JZQlVDS0VUIHtcbi8qKlxuICogU3BlY2lmaWVzIGEgbmFtZSBmb3IgdGhlIGJ1Y2tldC4gVGhlIGJ1Y2tldCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVucyAoLSkuIEEgZGlyZWN0b3J5IGJ1Y2tldCBuYW1lIG11c3QgYmUgdW5pcXVlIGluIHRoZSBjaG9zZW4gQXZhaWxhYmlsaXR5IFpvbmUuIFRoZSBidWNrZXQgbmFtZSBtdXN0IGFsc28gZm9sbG93IHRoZSBmb3JtYXQgJ2J1Y2tldF9iYXNlX25hbWUtLWF6X2lkLS14LXMzJyAoZm9yIGV4YW1wbGUsICdET0MtRVhBTVBMRS1CVUNLRVQtLXVzdzItYXoxLS14LXMzJykuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgbmFtZSwgQVdTIENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlcyBhIHVuaXF1ZSBwaHlzaWNhbCBJRCBhbmQgdXNlcyB0aGF0IElEIGZvciB0aGUgYnVja2V0IG5hbWUuXG4gKi9cbkJ1Y2tldE5hbWU/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBBWiBJRCBvZiB0aGUgQXZhaWxhYmlsaXR5IFpvbmUgd2hlcmUgdGhlIGRpcmVjdG9yeSBidWNrZXQgd2lsbCBiZSBjcmVhdGVkLiBBbiBleGFtcGxlIEFaIElEIHZhbHVlIGlzICd1c2UxLWF6NScuXG4gKi9cbkxvY2F0aW9uTmFtZTogc3RyaW5nXG4vKipcbiAqIFJldHVybnMgdGhlIGNvZGUgZm9yIHRoZSBBdmFpbGFiaWxpdHkgWm9uZSB3aGVyZSB0aGUgZGlyZWN0b3J5IGJ1Y2tldCB3YXMgY3JlYXRlZC5cbiAqL1xuQXZhaWxhYmlsaXR5Wm9uZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgQXZhaWxhYmlsaXR5IFpvbmUgdGhhdCdzIHVzZWQgZm9yIHJlZHVuZGFuY3kgZm9yIHRoZSBidWNrZXQuXG4gKi9cbkRhdGFSZWR1bmRhbmN5OiBcIlNpbmdsZUF2YWlsYWJpbGl0eVpvbmVcIlxuLyoqXG4gKiBSZXR1cm5zIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc3BlY2lmaWVkIGJ1Y2tldC5cbiAqL1xuQXJuPzogc3RyaW5nXG5CdWNrZXRFbmNyeXB0aW9uPzogQnVja2V0RW5jcnlwdGlvblxufVxuLyoqXG4gKiBTcGVjaWZpZXMgZGVmYXVsdCBlbmNyeXB0aW9uIGZvciBhIGJ1Y2tldCB1c2luZyBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHdpdGggQW1hem9uIFMzIG1hbmFnZWQga2V5cyAoU1NFLVMzKSBvciBBV1MgS01TIGtleXMgKFNTRS1LTVMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldEVuY3J5cHRpb24ge1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgc2VydmVyLXNpZGUtZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uLlxuICovXG5TZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IFNlcnZlclNpZGVFbmNyeXB0aW9uUnVsZVtdXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgZGVmYXVsdCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyU2lkZUVuY3J5cHRpb25SdWxlIHtcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHNob3VsZCB1c2UgYW4gUzMgQnVja2V0IEtleSB3aXRoIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdXNpbmcgS01TIChTU0UtS01TKSBmb3IgbmV3IG9iamVjdHMgaW4gdGhlIGJ1Y2tldC4gRXhpc3Rpbmcgb2JqZWN0cyBhcmUgbm90IGFmZmVjdGVkLiBBbWF6b24gUzMgRXhwcmVzcyBPbmUgWm9uZSB1c2VzIGFuIFMzIEJ1Y2tldCBLZXkgd2l0aCBTU0UtS01TIGFuZCBTMyBCdWNrZXQgS2V5IGNhbm5vdCBiZSBkaXNhYmxlZC4gSXQncyBvbmx5IGFsbG93ZWQgdG8gc2V0IHRoZSBCdWNrZXRLZXlFbmFibGVkIGVsZW1lbnQgdG8gdHJ1ZS5cbiAqL1xuQnVja2V0S2V5RW5hYmxlZD86IGJvb2xlYW5cblNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0PzogU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHRcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdG8gYXBwbHkgdG8gbmV3IG9iamVjdHMgaW4gdGhlIGJ1Y2tldC4gSWYgYSBQVVQgT2JqZWN0IHJlcXVlc3QgZG9lc24ndCBzcGVjaWZ5IGFueSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uLCB0aGlzIGRlZmF1bHQgZW5jcnlwdGlvbiB3aWxsIGJlIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQge1xuLyoqXG4gKiBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBjdXN0b21lciBtYW5hZ2VkIGtleSBJRCB0byB1c2UgZm9yIHRoZSBkZWZhdWx0IGVuY3J5cHRpb24uIFRoaXMgcGFyYW1ldGVyIGlzIGFsbG93ZWQgb25seSBpZiBTU0VBbGdvcml0aG0gaXMgc2V0IHRvIGF3czprbXMuIFlvdSBjYW4gc3BlY2lmeSB0aGlzIHBhcmFtZXRlciB3aXRoIHRoZSBrZXkgSUQgb3IgdGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBLTVMga2V5XG4gKi9cbktNU01hc3RlcktleUlEPzogKHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59ICYgc3RyaW5nKVxuU1NFQWxnb3JpdGhtOiAoXCJhd3M6a21zXCIgfCBcIkFFUzI1NlwiKVxufVxuIl19
@@ -93,6 +93,10 @@ export interface _AWS_SAGEMAKER_DOMAIN {
93
93
  * The ID of the security group that authorizes traffic between the RSessionGateway apps and the RStudioServerPro app.
94
94
  */
95
95
  SecurityGroupIdForDomainBoundary?: string;
96
+ /**
97
+ * Indicates whether the tags added to Domain, User Profile and Space entity is propagated to all SageMaker resources.
98
+ */
99
+ TagPropagation?: ("ENABLED" | "DISABLED");
96
100
  }
97
101
  /**
98
102
  * The default user settings.
@@ -535,6 +539,10 @@ export interface DomainSettings {
535
539
  SecurityGroupIds?: string[];
536
540
  RStudioServerProDomainSettings?: RStudioServerProDomainSettings;
537
541
  DockerSettings?: DockerSettings;
542
+ /**
543
+ * The configuration for attaching a SageMaker user profile name to the execution role as a sts:SourceIdentity key.
544
+ */
545
+ ExecutionRoleIdentityConfig?: ("USER_PROFILE_NAME" | "DISABLED");
538
546
  }
539
547
  /**
540
548
  * A collection of settings that update the current configuration for the RStudioServerPro Domain-level app.