@horietakehiro/aws-cdk-utul 0.35.2 → 0.35.4

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 (35) hide show
  1. package/lib/types/cfn-resource-types/aws-athena-workgroup.d.ts +15 -0
  2. package/lib/types/cfn-resource-types/aws-athena-workgroup.js +1 -1
  3. package/lib/types/cfn-resource-types/aws-customerprofiles-calculatedattributedefinition.d.ts +45 -1
  4. package/lib/types/cfn-resource-types/aws-customerprofiles-calculatedattributedefinition.js +1 -1
  5. package/lib/types/cfn-resource-types/aws-customerprofiles-objecttype.d.ts +8 -0
  6. package/lib/types/cfn-resource-types/aws-customerprofiles-objecttype.js +1 -1
  7. package/lib/types/cfn-resource-types/aws-customerprofiles-segmentdefinition.d.ts +2 -2
  8. package/lib/types/cfn-resource-types/aws-customerprofiles-segmentdefinition.js +1 -1
  9. package/lib/types/cfn-resource-types/aws-ec2-egressonlyinternetgateway.d.ts +8 -0
  10. package/lib/types/cfn-resource-types/aws-ec2-egressonlyinternetgateway.js +1 -1
  11. package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +1 -1
  12. package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
  13. package/lib/types/cfn-resource-types/aws-efs-mounttarget.d.ts +7 -5
  14. package/lib/types/cfn-resource-types/aws-efs-mounttarget.js +1 -1
  15. package/lib/types/cfn-resource-types/aws-eks-podidentityassociation.d.ts +24 -12
  16. package/lib/types/cfn-resource-types/aws-eks-podidentityassociation.js +1 -1
  17. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.d.ts +1 -1
  18. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.js +1 -1
  19. package/lib/types/cfn-resource-types/aws-kms-key.d.ts +1 -1
  20. package/lib/types/cfn-resource-types/aws-kms-key.js +1 -1
  21. package/lib/types/cfn-resource-types/aws-mwaa-environment.d.ts +5 -0
  22. package/lib/types/cfn-resource-types/aws-mwaa-environment.js +1 -1
  23. package/lib/types/cfn-resource-types/aws-networkfirewall-loggingconfiguration.d.ts +1 -0
  24. package/lib/types/cfn-resource-types/aws-networkfirewall-loggingconfiguration.js +1 -1
  25. package/lib/types/cfn-resource-types/aws-opsworkscm-server.d.ts +37 -0
  26. package/lib/types/cfn-resource-types/aws-opsworkscm-server.js +3 -0
  27. package/lib/types/cfn-resource-types/aws-sagemaker-domain.d.ts +40 -0
  28. package/lib/types/cfn-resource-types/aws-sagemaker-domain.js +1 -1
  29. package/lib/types/cfn-resource-types/aws-wafv2-rulegroup.d.ts +12 -0
  30. package/lib/types/cfn-resource-types/aws-wafv2-rulegroup.js +1 -1
  31. package/lib/types/cfn-resource-types/aws-wafv2-webacl.d.ts +483 -432
  32. package/lib/types/cfn-resource-types/aws-wafv2-webacl.js +1 -1
  33. package/lib/types/cfn-resource-types.d.ts +2 -0
  34. package/lib/types/cfn-resource-types.js +13 -10
  35. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAgbXVzdCBoYXZlIGEgbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgbmFtZXNwYWNlLlxuICogICAgU3RhcnRpbmcgQXByaWwgMTUsIDIwMjMsIEFXUzsgd2lsbCBub3Qgb25ib2FyZCBuZXcgY3VzdG9tZXJzIHRvIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSAoRUkpLCBhbmQgd2lsbCBoZWxwIGN1cnJlbnQgY3VzdG9tZXJzIG1pZ3JhdGUgdGhlaXIgd29ya2xvYWRzIHRvIG9wdGlvbnMgdGhhdCBvZmZlciBiZXR0ZXIgcHJpY2UgYW5kIHBlcmZvcm1hbmNlLiBBZnRlciBBcHJpbCAxNSwgMjAyMywgbmV3IGN1c3RvbWVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGxhdW5jaCBpbnN0YW5jZXMgd2l0aCBBbWF6b24gRUkgYWNjZWxlcmF0b3JzIGluIEFtYXpvbiBTYWdlTWFrZXIsIEVDUywgb3IgRUMyLiBIb3dldmVyLCBjdXN0b21lcnMgd2hvIGhhdmUgdXNlZCBBbWF6b24gRUkgYXQgbGVhc3Qgb25jZSBkdXJpbmcgdGhlIHBhc3QgMzAtZGF5IHBlcmlvZCBhcmUgY29uc2lkZXJlZCBjdXJyZW50IGN1c3RvbWVycyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfRUNTX1NFUlZJQ0Uge1xuLyoqXG4gKiBUaGUgcGxhdGZvcm0gdmVyc2lvbiB0aGF0IHlvdXIgdGFza3MgaW4gdGhlIHNlcnZpY2UgYXJlIHJ1bm5pbmcgb24uIEEgcGxhdGZvcm0gdmVyc2lvbiBpcyBzcGVjaWZpZWQgb25seSBmb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuIElmIG9uZSBpc24ndCBzcGVjaWZpZWQsIHRoZSBgYExBVEVTVGBgIHBsYXRmb3JtIHZlcnNpb24gaXMgdXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbcGxhdGZvcm0gdmVyc2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3BsYXRmb3JtX3ZlcnNpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUGxhdGZvcm1WZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgdGFncyBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gdG8gdGhlIHRhc2suIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIHRhZ3MgYXJlbid0IHByb3BhZ2F0ZWQuIFRhZ3MgY2FuIG9ubHkgYmUgcHJvcGFnYXRlZCB0byB0aGUgdGFzayBkdXJpbmcgdGFzayBjcmVhdGlvbi4gVG8gYWRkIHRhZ3MgdG8gYSB0YXNrIGFmdGVyIHRhc2sgY3JlYXRpb24sIHVzZSB0aGUgW1RhZ1Jlc291cmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1RhZ1Jlc291cmNlLmh0bWwpIEFQSSBhY3Rpb24uXG4gKiAgWW91IG11c3Qgc2V0IHRoaXMgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBgTk9ORWBgIHdoZW4geW91IHVzZSBDb3N0IEV4cGxvcmVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIHVzYWdlIHJlcG9ydHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzYWdlLXJlcG9ydHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBkZWZhdWx0IGlzIGBgTk9ORWBgLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcblNlcnZpY2VBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBsYWNlbWVudCBzdHJhdGVneSBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MgaW4geW91ciBzZXJ2aWNlLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDUgc3RyYXRlZ3kgcnVsZXMgZm9yIGVhY2ggc2VydmljZS5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBQbGFjZW1lbnRTdHJhdGVneWBgIGFycmF5LlxuICovXG5QbGFjZW1lbnRTdHJhdGVnaWVzPzogUGxhY2VtZW50U3RyYXRlZ3lbXVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiB0aGUgc2VydmljZSBkaXNjb3ZlcnkgcmVnaXN0cnkgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIGRpc2NvdmVyeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1kaXNjb3ZlcnkuaHRtbCkuXG4gKiAgIEVhY2ggc2VydmljZSBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIG9uZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBNdWx0aXBsZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgZm9yIGVhY2ggc2VydmljZSBpc24ndCBzdXBwb3J0ZWQuXG4gKiAgICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFNlcnZpY2VSZWdpc3RyeWBgIGFycmF5LlxuICovXG5TZXJ2aWNlUmVnaXN0cmllcz86IFNlcnZpY2VSZWdpc3RyeVtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uYGAgYXJyYXkuXG4gKi9cblZvbHVtZUNvbmZpZ3VyYXRpb25zPzogU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25bXVxuLyoqXG4gKiBUaGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS5cbiAqICBJZiBhIGBgY2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgaXMgc3BlY2lmaWVkLCB0aGUgYGBsYXVuY2hUeXBlYGAgcGFyYW1ldGVyIG11c3QgYmUgb21pdHRlZC4gSWYgbm8gYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBvciBgYGxhdW5jaFR5cGVgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGRlZmF1bHRDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBmb3IgdGhlIGNsdXN0ZXIgaXMgdXNlZC5cbiAqICBBIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBjb250YWluIGEgbWF4aW11bSBvZiAyMCBjYXBhY2l0eSBwcm92aWRlcnMuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbWBgIGFycmF5LlxuICovXG5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbi8qKlxuICogVGhlIGxhdW5jaCB0eXBlIG9uIHdoaWNoIHRvIHJ1biB5b3VyIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgTGF1bmNoIFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIiB8IFwiRVhURVJOQUxcIilcbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIEF2YWlsYWJpbGl0eSBab25lIHJlYmFsYW5jaW5nIGZvciB0aGUgc2VydmljZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCYWxhbmNpbmcgYW4gQW1hem9uIEVDUyBzZXJ2aWNlIGFjcm9zcyBBdmFpbGFiaWxpdHkgWm9uZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtcmViYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5BdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmc/OiAoXCJFTkFCTEVEXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIFRoZSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgVGhlcmUgYXJlIHR3byBzZXJ2aWNlIHNjaGVkdWxlciBzdHJhdGVnaWVzIGF2YWlsYWJsZTpcbiAqICAgKyAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgIGBgREFFTU9OYGAtVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRlcGxveXMgZXhhY3RseSBvbmUgdGFzayBvbiBlYWNoIGFjdGl2ZSBjb250YWluZXIgaW5zdGFuY2UgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIHRoYXQgeW91IHNwZWNpZnkgaW4geW91ciBjbHVzdGVyLiBUaGUgc2VydmljZSBzY2hlZHVsZXIgYWxzbyBldmFsdWF0ZXMgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGZvciBydW5uaW5nIHRhc2tzIGFuZCB3aWxsIHN0b3AgdGFza3MgdGhhdCBkb24ndCBtZWV0IHRoZSBwbGFjZW1lbnQgY29uc3RyYWludHMuIFdoZW4geW91J3JlIHVzaW5nIHRoaXMgc3RyYXRlZ3ksIHlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcywgYSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSwgb3IgdXNlIFNlcnZpY2UgQXV0byBTY2FsaW5nIHBvbGljaWVzLlxuICogICBUYXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSBvciB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMgZG9uJ3Qgc3VwcG9ydCB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LlxuICovXG5TY2hlZHVsaW5nU3RyYXRlZ3k/OiAoXCJEQUVNT05cIiB8IFwiUkVQTElDQVwiKVxuTmV0d29ya0NvbmZpZ3VyYXRpb24/OiBOZXR3b3JrQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gdGhlIHNlcnZpY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuIFdoZW4gYSBzZXJ2aWNlIGlzIGRlbGV0ZWQsIHRoZSB0YWdzIGFyZSBkZWxldGVkIGFzIHdlbGwuXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIFRoZSBwZXJpb2Qgb2YgdGltZSwgaW4gc2Vjb25kcywgdGhhdCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIHVuaGVhbHRoeSBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBWUEMgTGF0dGljZSwgYW5kIGNvbnRhaW5lciBoZWFsdGggY2hlY2tzIGFmdGVyIGEgdGFzayBoYXMgZmlyc3Qgc3RhcnRlZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLiBJZiB5b3UgZG9uJ3QgdXNlIGFueSBvZiB0aGUgaGVhbHRoIGNoZWNrcywgdGhlbiBgYGhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzYGAgaXMgdW51c2VkLlxuICogIElmIHlvdXIgc2VydmljZSdzIHRhc2tzIHRha2UgYSB3aGlsZSB0byBzdGFydCBhbmQgcmVzcG9uZCB0byBoZWFsdGggY2hlY2tzLCB5b3UgY2FuIHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIG9mIHVwIHRvIDIsMTQ3LDQ4Myw2NDcgc2Vjb25kcyAoYWJvdXQgNjkgeWVhcnMpLiBEdXJpbmcgdGhhdCB0aW1lLCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIGhlYWx0aCBjaGVjayBzdGF0dXMuIFRoaXMgZ3JhY2UgcGVyaW9kIGNhbiBwcmV2ZW50IHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBmcm9tIG1hcmtpbmcgdGFza3MgYXMgdW5oZWFsdGh5IGFuZCBzdG9wcGluZyB0aGVtIGJlZm9yZSB0aGV5IGhhdmUgdGltZSB0byBjb21lIHVwLlxuICovXG5IZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB0dXJuIG9uIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzIGZvciB0aGUgdGFza3Mgd2l0aGluIHRoZSBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYWdnaW5nIHlvdXIgQW1hem9uIEVDUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy11c2luZy10YWdzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBXaGVuIHlvdSB1c2UgQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MsIHlvdSBuZWVkIHRvIHNldCB0aGUgYGBwcm9wYWdhdGVUYWdzYGAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKi9cbkVuYWJsZUVDU01hbmFnZWRUYWdzPzogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgdGhlIHNlcnZpY2UuIElmIGBgdHJ1ZWBgLCB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciBhbGwgY29udGFpbmVycyBpbiB0YXNrcyBhcyBwYXJ0IG9mIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGVFeGVjdXRlQ29tbWFuZD86IGJvb2xlYW5cbi8qKlxuICogQW4gYXJyYXkgb2YgcGxhY2VtZW50IGNvbnN0cmFpbnQgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiAxMCBjb25zdHJhaW50cyBmb3IgZWFjaCB0YXNrLiBUaGlzIGxpbWl0IGluY2x1ZGVzIGNvbnN0cmFpbnRzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYW5kIHRob3NlIHNwZWNpZmllZCBhdCBydW50aW1lLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFBsYWNlbWVudENvbnN0cmFpbnRgYCBhcnJheS5cbiAqL1xuUGxhY2VtZW50Q29uc3RyYWludHM/OiBQbGFjZW1lbnRDb25zdHJhaW50W11cbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgY2x1c3RlciB0aGF0IHlvdSBydW4geW91ciBzZXJ2aWNlIG9uLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBjbHVzdGVyLCB0aGUgZGVmYXVsdCBjbHVzdGVyIGlzIGFzc3VtZWQuXG4gKi9cbkNsdXN0ZXI/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIGxvYWQgYmFsYW5jZXIgb2JqZWN0cyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgUm9sZWBgIHByb3BlcnR5LCBgYExvYWRCYWxhbmNlcnNgYCBtdXN0IGJlIHNwZWNpZmllZCBhcyB3ZWxsLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBsb2FkIGJhbGFuY2VycyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgc2VydmljZSwgc2VlIFtTZXJ2aWNlIExvYWQgQmFsYW5jaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWxvYWQtYmFsYW5jaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBMb2FkQmFsYW5jZXJgYCBhcnJheS5cbiAqL1xuTG9hZEJhbGFuY2Vycz86IExvYWRCYWxhbmNlcltdXG5TZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24/OiBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG51bWJlciBvZiBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgZGVmaW5pdGlvbiB0byBwbGFjZSBhbmQga2VlcCBydW5uaW5nIGluIHlvdXIgc2VydmljZS5cbiAqICBGb3IgbmV3IHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHZhbHVlIG9mIGBgMWBgIGlzIHVzZWQuIFdoZW4gdXNpbmcgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneSwgdGhlIGRlc2lyZWQgY291bnQgaXMgbm90IHJlcXVpcmVkLlxuICogIEZvciBleGlzdGluZyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIG9taXR0ZWQgZnJvbSB0aGUgb3BlcmF0aW9uLlxuICovXG5EZXNpcmVkQ291bnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlIGJlaW5nIGNyZWF0ZWQuXG4gKi9cblZwY0xhdHRpY2VDb25maWd1cmF0aW9ucz86IFZwY0xhdHRpY2VDb25maWd1cmF0aW9uW11cbkRlcGxveW1lbnRDb250cm9sbGVyPzogRGVwbG95bWVudENvbnRyb2xsZXJcbi8qKlxuICogVGhlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEVDUyB0byBtYWtlIGNhbGxzIHRvIHlvdXIgbG9hZCBiYWxhbmNlciBvbiB5b3VyIGJlaGFsZi4gVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBwZXJtaXR0ZWQgaWYgeW91IGFyZSB1c2luZyBhIGxvYWQgYmFsYW5jZXIgd2l0aCB5b3VyIHNlcnZpY2UgYW5kIHlvdXIgdGFzayBkZWZpbml0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgcm9sZWBgIHBhcmFtZXRlciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgbG9hZCBiYWxhbmNlciBvYmplY3Qgd2l0aCB0aGUgYGBsb2FkQmFsYW5jZXJzYGAgcGFyYW1ldGVyLlxuICogICBJZiB5b3VyIGFjY291bnQgaGFzIGFscmVhZHkgY3JlYXRlZCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlLCB0aGF0IHJvbGUgaXMgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIHVubGVzcyB5b3Ugc3BlY2lmeSBhIHJvbGUgaGVyZS4gVGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgaXMgcmVxdWlyZWQgaWYgeW91ciB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgb3IgaWYgdGhlIHNlcnZpY2UgaXMgY29uZmlndXJlZCB0byB1c2Ugc2VydmljZSBkaXNjb3ZlcnksIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciwgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcywgb3IgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIGluIHdoaWNoIGNhc2UgeW91IGRvbid0IHNwZWNpZnkgYSByb2xlIGhlcmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIHNlcnZpY2UtbGlua2VkIHJvbGVzIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZy1zZXJ2aWNlLWxpbmtlZC1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc3BlY2lmaWVkIHJvbGUgaGFzIGEgcGF0aCBvdGhlciB0aGFuIGBgL2BgLCB0aGVuIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IHRoZSBmdWxsIHJvbGUgQVJOICh0aGlzIGlzIHJlY29tbWVuZGVkKSBvciBwcmVmaXggdGhlIHJvbGUgbmFtZSB3aXRoIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgYSByb2xlIHdpdGggdGhlIG5hbWUgYGBiYXJgYCBoYXMgYSBwYXRoIG9mIGBgL2Zvby9gYCB0aGVuIHlvdSB3b3VsZCBzcGVjaWZ5IGBgL2Zvby9iYXJgYCBhcyB0aGUgcm9sZSBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGcmllbmRseSBuYW1lcyBhbmQgcGF0aHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1mcmllbmRseS1uYW1lcykgaW4gdGhlICpJQU0gVXNlciBHdWlkZSouXG4gKi9cblJvbGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgZmFtaWx5YGAgYW5kIGBgcmV2aXNpb25gYCAoYGBmYW1pbHk6cmV2aXNpb25gYCkgb3IgZnVsbCBBUk4gb2YgdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBydW4gaW4geW91ciBzZXJ2aWNlLiBJZiBhIGBgcmV2aXNpb25gYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgYGBBQ1RJVkVgYCByZXZpc2lvbiBpcyB1c2VkLlxuICogIEEgdGFzayBkZWZpbml0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBgYEVDU2BgIG9yIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlcGxveW1lbnQgdHlwZXMsIHNlZSBbQW1hem9uIEVDUyBkZXBsb3ltZW50IHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGVzLmh0bWwpLlxuICovXG5UYXNrRGVmaW5pdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gU2VydmljZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBjbHVzdGVyLCBidXQgeW91IGNhbiBoYXZlIHNpbWlsYXJseSBuYW1lZCBzZXJ2aWNlcyBpbiBtdWx0aXBsZSBjbHVzdGVycyB3aXRoaW4gYSBSZWdpb24gb3IgYWNyb3NzIG11bHRpcGxlIFJlZ2lvbnMuXG4gKiAgIFRoZSBzdGFjayB1cGRhdGUgZmFpbHMgaWYgeW91IGNoYW5nZSBhbnkgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgcmVwbGFjZW1lbnQgYW5kIHRoZSBgYFNlcnZpY2VOYW1lYGAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VOYW1lYGAgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNsdXN0ZXIuXG4gKi9cblNlcnZpY2VOYW1lPzogc3RyaW5nXG5EZXBsb3ltZW50Q29uZmlndXJhdGlvbj86IERlcGxveW1lbnRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSBmb3IgYSB0YXNrIG9yIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IHN0cmF0ZWdpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LXN0cmF0ZWdpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudFN0cmF0ZWd5IHtcbi8qKlxuICogVGhlIGZpZWxkIHRvIGFwcGx5IHRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgYWdhaW5zdC4gRm9yIHRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGluc3RhbmNlSWRgYCAob3IgYGBob3N0YGAsIHdoaWNoIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBhbnkgcGxhdGZvcm0gb3IgY3VzdG9tIGF0dHJpYnV0ZSB0aGF0J3MgYXBwbGllZCB0byBhIGNvbnRhaW5lciBpbnN0YW5jZSwgc3VjaCBhcyBgYGF0dHJpYnV0ZTplY3MuYXZhaWxhYmlsaXR5LXpvbmVgYC4gRm9yIHRoZSBgYGJpbnBhY2tgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBjcHVgYCBhbmQgYGBtZW1vcnlgYC4gRm9yIHRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSwgdGhpcyBmaWVsZCBpcyBub3QgdXNlZC5cbiAqL1xuRmllbGQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgcGxhY2VtZW50IHN0cmF0ZWd5LiBUaGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3kgcmFuZG9tbHkgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzLiBUaGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3kgc3ByZWFkcyBwbGFjZW1lbnQgYWNyb3NzIGF2YWlsYWJsZSBjYW5kaWRhdGVzIGV2ZW5seSBiYXNlZCBvbiB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gVGhlIGBgYmlucGFja2BgIHN0cmF0ZWd5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcyB0aGF0IGhhdmUgdGhlIGxlYXN0IGF2YWlsYWJsZSBhbW91bnQgb2YgdGhlIHJlc291cmNlIHRoYXQncyBzcGVjaWZpZWQgd2l0aCB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsIGlmIHlvdSBiaW5wYWNrIG9uIG1lbW9yeSwgYSB0YXNrIGlzIHBsYWNlZCBvbiB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHJlbWFpbmluZyBtZW1vcnkgYnV0IHN0aWxsIGVub3VnaCB0byBydW4gdGhlIHRhc2suXG4gKi9cblR5cGU6IChcImJpbnBhY2tcIiB8IFwicmFuZG9tXCIgfCBcInNwcmVhZFwiKVxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBmb3IgdGhlIHNlcnZpY2UgcmVnaXN0cnkuXG4gKiAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogIFdoZW4geW91IGFkZCwgdXBkYXRlLCBvciByZW1vdmUgdGhlIHNlcnZpY2UgcmVnaXN0cmllcyBjb25maWd1cmF0aW9uLCBBbWF6b24gRUNTIHN0YXJ0cyBhIG5ldyBkZXBsb3ltZW50LiBOZXcgdGFza3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGRlcmVnaXN0ZXJlZCB0byB0aGUgdXBkYXRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVJlZ2lzdHJ5IHtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBuYW1lIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdXNlZCBpZiB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2Ugc3BlY2lmaWVkIGFuIFNSViByZWNvcmQuIFRoaXMgZmllbGQgbWlnaHQgYmUgdXNlZCBpZiBib3RoIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgU1JWIHJlY29yZHMgYXJlIHVzZWQuXG4gKi9cblBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSByZWdpc3RyeS4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgc2VydmljZSByZWdpc3RyeSBpcyBDTUFQLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGVTZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbCkuXG4gKi9cblJlZ2lzdHJ5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uIHtcbk1hbmFnZWRFQlNWb2x1bWU/OiBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVGhpcyB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgbmFtZSBmcm9tIHRoZSBgYFZvbHVtZWBgIG9iamVjdCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBbWF6b24gRUJTIHZvbHVtZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBhbmQgbWFuYWdlcyBvbiB5b3VyIGJlaGFsZi4gVGhlc2Ugc2V0dGluZ3MgYXJlIHVzZWQgdG8gY3JlYXRlIGVhY2ggQW1hem9uIEVCUyB2b2x1bWUsIHdpdGggb25lIHZvbHVtZSBjcmVhdGVkIGZvciBlYWNoIHRhc2sgaW4gdGhlIHNlcnZpY2UuIFRoZSBBbWF6b24gRUJTIHZvbHVtZXMgYXJlIHZpc2libGUgaW4geW91ciBhY2NvdW50IGluIHRoZSBBbWF6b24gRUMyIGNvbnNvbGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzbmFwc2hvdCB0aGF0IEFtYXpvbiBFQ1MgdXNlcyB0byBjcmVhdGUgdm9sdW1lcyBmb3IgYXR0YWNobWVudCB0byB0YXNrcyBtYWludGFpbmVkIGJ5IHRoZSBzZXJ2aWNlLiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBgYHNuYXBzaG90SWRgYCBvciBgYHNpemVJbkdpQmBgIGluIHlvdXIgdm9sdW1lIGNvbmZpZ3VyYXRpb24uIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU25hcHNob3RJZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuU25hcHNob3RJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdm9sdW1lIHR5cGUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVm9sdW1lVHlwZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVCUyB2b2x1bWUgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSB0eXBlcy5cbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIFNTRDogYGBncDJgYHxgYGdwM2BgXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgU1NEOiBgYGlvMWBgfGBgaW8yYGBcbiAqICAgKyAgVGhyb3VnaHB1dCBPcHRpbWl6ZWQgSEREOiBgYHN0MWBgXG4gKiAgICsgIENvbGQgSEREOiBgYHNjMWBgXG4gKiAgICsgIE1hZ25ldGljOiBgYHN0YW5kYXJkYGBcbiAqICAgVGhlIG1hZ25ldGljIHZvbHVtZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgb24gRmFyZ2F0ZS5cbiAqL1xuVm9sdW1lVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgaWRlbnRpZmllciBvZiB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IHRvIHVzZSBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uLiBXaGVuIGEga2V5IGlzIHNwZWNpZmllZCB1c2luZyB0aGlzIHBhcmFtZXRlciwgaXQgb3ZlcnJpZGVzIEFtYXpvbiBFQlMgZGVmYXVsdCBlbmNyeXB0aW9uIG9yIGFueSBLTVMga2V5IHRoYXQgeW91IHNwZWNpZmllZCBmb3IgY2x1c3Rlci1sZXZlbCBtYW5hZ2VkIHN0b3JhZ2UgZW5jcnlwdGlvbi4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBLbXNLZXlJZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZW5jcnlwdGluZyBBbWF6b24gRUJTIHZvbHVtZXMgYXR0YWNoZWQgdG8gdGFza3MsIHNlZSBbRW5jcnlwdCBkYXRhIHN0b3JlZCBpbiBBbWF6b24gRUJTIHZvbHVtZXMgYXR0YWNoZWQgdG8gQW1hem9uIEVDUyB0YXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWJzLWttcy1lbmNyeXB0aW9uLmh0bWwpLlxuICogICBBV1MgYXV0aGVudGljYXRlcyB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IGFzeW5jaHJvbm91c2x5LiBUaGVyZWZvcmUsIGlmIHlvdSBzcGVjaWZ5IGFuIElELCBhbGlhcywgb3IgQVJOIHRoYXQgaXMgaW52YWxpZCwgdGhlIGFjdGlvbiBjYW4gYXBwZWFyIHRvIGNvbXBsZXRlLCBidXQgZXZlbnR1YWxseSBmYWlscy5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIHZvbHVtZS4gQW1hem9uIEVDUyBhcHBsaWVzIHNlcnZpY2UtbWFuYWdlZCB0YWdzIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVGFnU3BlY2lmaWNhdGlvbnMuTmBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuVGFnU3BlY2lmaWNhdGlvbnM/OiBFQlNUYWdTcGVjaWZpY2F0aW9uW11cbi8qKlxuICogVGhlIGZpbGVzeXN0ZW0gdHlwZSBmb3IgdGhlIHZvbHVtZS4gRm9yIHZvbHVtZXMgY3JlYXRlZCBmcm9tIGEgc25hcHNob3QsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHNhbWUgZmlsZXN5c3RlbSB0eXBlIHRoYXQgdGhlIHZvbHVtZSB3YXMgdXNpbmcgd2hlbiB0aGUgc25hcHNob3Qgd2FzIGNyZWF0ZWQuIElmIHRoZXJlIGlzIGEgZmlsZXN5c3RlbSB0eXBlIG1pc21hdGNoLCB0aGUgdGFza3Mgd2lsbCBmYWlsIHRvIHN0YXJ0LlxuICogIFRoZSBhdmFpbGFibGUgTGludXggZmlsZXN5c3RlbSB0eXBlcyBhcmXigKggYGBleHQzYGAsIGBgZXh0NGBgLCBhbmQgYGB4ZnNgYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgYGB4ZnNgYCBmaWxlc3lzdGVtIHR5cGUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogIFRoZSBhdmFpbGFibGUgV2luZG93cyBmaWxlc3lzdGVtIHR5cGVzIGFyZSBgYE5URlNgYC5cbiAqL1xuRmlsZXN5c3RlbVR5cGU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZvbHVtZSBzaG91bGQgYmUgZW5jcnlwdGVkLiBJZiB5b3UgdHVybiBvbiBSZWdpb24tbGV2ZWwgQW1hem9uIEVCUyBlbmNyeXB0aW9uIGJ5IGRlZmF1bHQgYnV0IHNldCB0aGlzIHZhbHVlIGFzIGBgZmFsc2VgYCwgdGhlIHNldHRpbmcgaXMgb3ZlcnJpZGRlbiBhbmQgdGhlIHZvbHVtZSBpcyBlbmNyeXB0ZWQgd2l0aCB0aGUgS01TIGtleSBzcGVjaWZpZWQgZm9yIEFtYXpvbiBFQlMgZW5jcnlwdGlvbiBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEVuY3J5cHRlZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuRW5jcnlwdGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgdGhyb3VnaHB1dCB0byBwcm92aXNpb24gZm9yIGEgdm9sdW1lLCBpbiBNaUIvcywgd2l0aCBhIG1heGltdW0gb2YgMSwwMDAgTWlCL3MuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVGhyb3VnaHB1dGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSBgYGdwM2BgIHZvbHVtZSB0eXBlLlxuICovXG5UaHJvdWdocHV0PzogbnVtYmVyXG4vKipcbiAqIFRoZSByYXRlLCBpbiBNaUIvcywgYXQgd2hpY2ggZGF0YSBpcyBmZXRjaGVkIGZyb20gYSBzbmFwc2hvdCBvZiBhbiBleGlzdGluZyBFQlMgdm9sdW1lIHRvIGNyZWF0ZSBuZXcgdm9sdW1lcyBmb3IgYXR0YWNobWVudCB0byB0aGUgdGFza3MgbWFpbnRhaW5lZCBieSB0aGUgc2VydmljZS4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc3BlY2lmaWVkIG9ubHkgaWYgeW91IHNwZWNpZnkgYSBgYHNuYXBzaG90SWRgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSW5pdGlhbGl6ZSBBbWF6b24gRUJTIHZvbHVtZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9pbml0YWxpemUtdm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVCUyBVc2VyIEd1aWRlKi5cbiAqL1xuVm9sdW1lSW5pdGlhbGl6YXRpb25SYXRlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgSS9PIG9wZXJhdGlvbnMgcGVyIHNlY29uZCAoSU9QUykuIEZvciBgYGdwM2BgLCBgYGlvMWBgLCBhbmQgYGBpbzJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBJT1BTIHRoYXQgYXJlIHByb3Zpc2lvbmVkIGZvciB0aGUgdm9sdW1lLiBGb3IgYGBncDJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIGJhc2VsaW5lIHBlcmZvcm1hbmNlIG9mIHRoZSB2b2x1bWUgYW5kIHRoZSByYXRlIGF0IHdoaWNoIHRoZSB2b2x1bWUgYWNjdW11bGF0ZXMgSS9PIGNyZWRpdHMgZm9yIGJ1cnN0aW5nLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICBgYGdwM2BgOiAzLDAwMCAtIDE2LDAwMCBJT1BTXG4gKiAgICsgIGBgaW8xYGA6IDEwMCAtIDY0LDAwMCBJT1BTXG4gKiAgICsgIGBgaW8yYGA6IDEwMCAtIDI1NiwwMDAgSU9QU1xuICogICBcbiAqICBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgYGBpbzFgYCBhbmQgYGBpbzJgYCB2b2x1bWUgdHlwZXMuIFRoZSBkZWZhdWx0IGZvciBgYGdwM2BgIHZvbHVtZXMgaXMgYGAzLDAwMCBJT1BTYGAuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGBgc3QxYGAsIGBgc2MxYGAsIG9yIGBgc3RhbmRhcmRgYCB2b2x1bWUgdHlwZXMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5Jb3BzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBzaXplIG9mIHRoZSB2b2x1bWUgaW4gR2lCLiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIHZvbHVtZSBzaXplIG9yIGEgc25hcHNob3QgSUQuIElmIHlvdSBzcGVjaWZ5IGEgc25hcHNob3QgSUQsIHRoZSBzbmFwc2hvdCBzaXplIGlzIHVzZWQgZm9yIHRoZSB2b2x1bWUgc2l6ZSBieSBkZWZhdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIHZvbHVtZSBzaXplIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc25hcHNob3Qgc2l6ZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTaXplYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHNpemUgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICBgYGdwMmBgIGFuZCBgYGdwM2BgOiAxLTE2LDM4NFxuICogICArICBgYGlvMWBgIGFuZCBgYGlvMmBgOiA0LTE2LDM4NFxuICogICArICBgYHN0MWBgIGFuZCBgYHNjMWBgOiAxMjUtMTYsMzg0XG4gKiAgICsgIGBgc3RhbmRhcmRgYDogMS0xLDAyNFxuICovXG5TaXplSW5HaUI/OiBudW1iZXJcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyB2b2x1bWUuIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1MgaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIEFXUyBpbmZyYXN0cnVjdHVyZS4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBBbWF6b24gRUNTLW1hbmFnZWQgYGBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWb2x1bWVzYGAgSUFNIHBvbGljeSB3aXRoIHRoaXMgcm9sZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaW5mcmFzdHJ1Y3R1cmVfSUFNX3JvbGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUNTIERldmVsb3BlciBHdWlkZSouXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgdGFnIHNwZWNpZmljYXRpb25zIG9mIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVCU1RhZ1NwZWNpZmljYXRpb24ge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSB0YWdzIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byDigKh0aGUgQW1hem9uIEVCUyB2b2x1bWUuIFRhZ3MgY2FuIG9ubHkgcHJvcGFnYXRlIHRvIGEgYGBTRVJWSUNFYGAgc3BlY2lmaWVkIGluIOKAqGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgdGFncyBhcmVuJ3Qg4oCocHJvcGFnYXRlZC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG4vKipcbiAqIFRoZSB0eXBlIG9mIHZvbHVtZSByZXNvdXJjZS5cbiAqL1xuUmVzb3VyY2VUeXBlOiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZ3MgYXBwbGllZCB0byB0aGlzIEFtYXpvbiBFQlMgdm9sdW1lLiBgYEFtYXpvbkVDU0NyZWF0ZWRgYCBhbmQgYGBBbWF6b25FQ1NNYW5hZ2VkYGAgYXJlIHJlc2VydmVkIHRhZ3MgdGhhdCBjYW4ndCBiZSB1c2VkLlxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogVGhlIG1ldGFkYXRhIHRoYXQgeW91IGFwcGx5IHRvIGEgcmVzb3VyY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLiBZb3UgZGVmaW5lIHRoZW0uXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqICAgXG4gKiAgSW4gb3JkZXIgdG8gdGFnIGEgc2VydmljZSB0aGF0IGhhcyB0aGUgZm9sbG93aW5nIEFSTiBmb3JtYXQsIHlvdSBuZWVkIHRvIG1pZ3JhdGUgdGhlIHNlcnZpY2UgdG8gdGhlIGxvbmcgQVJOLiBZb3UgbXVzdCB1c2UgdGhlIEFQSSwgQ0xJIG9yIGNvbnNvbGUgdG8gbWlncmF0ZSB0aGUgc2VydmljZSBBUk4uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01pZ3JhdGUgYW4gc2hvcnQgc2VydmljZSBBUk4gdG8gYSBsb25nIEFSTl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1hcm4tbWlncmF0aW9uLmh0bWwpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgYGBhcm46YXdzOmVjczpyZWdpb246YXdzX2FjY291bnRfaWQ6c2VydmljZS9zZXJ2aWNlLW5hbWVgYCBcbiAqICBBZnRlciB0aGUgbWlncmF0aW9uIGlzIGNvbXBsZXRlLCB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOlxuICogICArICAgVGhlIHNlcnZpY2UgQVJOIGlzOiBgYGFybjphd3M6ZWNzOnJlZ2lvbjphd3NfYWNjb3VudF9pZDpzZXJ2aWNlL2NsdXN0ZXItbmFtZS9zZXJ2aWNlLW5hbWVgYFxuICogICArICBZb3UgY2FuIHVzZSBDRk4gdG8gdGFnIHRoZSBzZXJ2aWNlIGFzIHlvdSB3b3VsZCBhIHNlcnZpY2Ugd2l0aCBhIGxvbmcgQVJOIGZvcm1hdC5cbiAqICAgKyAgV2hlbiB0aGUgYGBQaHlzaWNhbFJlc291cmNlSWRgYCBpbiB0aGUgQ0ZOIHN0YWNrIHJlcHJlc2VudHMgYSBzZXJ2aWNlLCB0aGUgdmFsdWUgZG9lcyBub3QgY2hhbmdlIGFuZCB3aWxsIGJlIHRoZSBzaG9ydCBzZXJ2aWNlIEFSTi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUgb3B0aW9uYWwgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYHZhbHVlYGAgYWN0cyBhcyBhIGRlc2NyaXB0b3Igd2l0aGluIGEgdGFnIGNhdGVnb3J5IChrZXkpLlxuICovXG5WYWx1ZT86IHN0cmluZ1xuLyoqXG4gKiBPbmUgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYGtleWBgIGlzIGEgZ2VuZXJhbCBsYWJlbCB0aGF0IGFjdHMgbGlrZSBhIGNhdGVnb3J5IGZvciBtb3JlIHNwZWNpZmljIHRhZyB2YWx1ZXMuXG4gKi9cbktleT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LiBBIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBiZSBzZXQgd2hlbiB1c2luZyB0aGUgYGBSdW5UYXNrYGAgb3IgYGBDcmVhdGVTZXJ2aWNlYGAgQVBJcyBvciBhcyB0aGUgZGVmYXVsdCBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBmb3IgYSBjbHVzdGVyIHdpdGggdGhlIGBgQ3JlYXRlQ2x1c3RlcmBgIEFQSS5cbiAqICBPbmx5IGNhcGFjaXR5IHByb3ZpZGVycyB0aGF0IGFyZSBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgYW5kIGhhdmUgYW4gYGBBQ1RJVkVgYCBvciBgYFVQREFUSU5HYGAgc3RhdHVzIGNhbiBiZSB1c2VkIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIFRoZSBgYFB1dENsdXN0ZXJDYXBhY2l0eVByb3ZpZGVyc2BgIEFQSSBpcyB1c2VkIHRvIGFzc29jaWF0ZSBhIGNhcGFjaXR5IHByb3ZpZGVyIHdpdGggYSBjbHVzdGVyLlxuICogIElmIHNwZWNpZnlpbmcgYSBjYXBhY2l0eSBwcm92aWRlciB0aGF0IHVzZXMgYW4gQXV0byBTY2FsaW5nIGdyb3VwLCB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgbXVzdCBhbHJlYWR5IGJlIGNyZWF0ZWQuIE5ldyBBdXRvIFNjYWxpbmcgZ3JvdXAgY2FwYWNpdHkgcHJvdmlkZXJzIGNhbiBiZSBjcmVhdGVkIHdpdGggdGhlIGBgQ3JlYXRlQ2FwYWNpdHlQcm92aWRlcmBgIEFQSSBvcGVyYXRpb24uXG4gKiAgVG8gdXNlIGFuIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVyLCBzcGVjaWZ5IGVpdGhlciB0aGUgYGBGQVJHQVRFYGAgb3IgYGBGQVJHQVRFX1NQT1RgYCBjYXBhY2l0eSBwcm92aWRlcnMuIFRoZSBGQVJHQVRFbG9uZyBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSB0byBhbGwgYWNjb3VudHMgYW5kIG9ubHkgbmVlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBjbHVzdGVyIHRvIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtIHtcbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb2YgdGhlIGNhcGFjaXR5IHByb3ZpZGVyLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSAqYmFzZSogdmFsdWUgZGVzaWduYXRlcyBob3cgbWFueSB0YXNrcywgYXQgYSBtaW5pbXVtLCB0byBydW4gb24gdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBwcm92aWRlci4gT25seSBvbmUgY2FwYWNpdHkgcHJvdmlkZXIgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gaGF2ZSBhICpiYXNlKiBkZWZpbmVkLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuXG4gKi9cbkJhc2U/OiBudW1iZXJcbi8qKlxuICogVGhlICp3ZWlnaHQqIHZhbHVlIGRlc2lnbmF0ZXMgdGhlIHJlbGF0aXZlIHBlcmNlbnRhZ2Ugb2YgdGhlIHRvdGFsIG51bWJlciBvZiB0YXNrcyBsYXVuY2hlZCB0aGF0IHNob3VsZCB1c2UgdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBwcm92aWRlci4gVGhlIGBgd2VpZ2h0YGAgdmFsdWUgaXMgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGFmdGVyIHRoZSBgYGJhc2VgYCB2YWx1ZSwgaWYgZGVmaW5lZCwgaXMgc2F0aXNmaWVkLlxuICogIElmIG5vIGBgd2VpZ2h0YGAgdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLiBXaGVuIG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgc3BlY2lmaWVkIHdpdGhpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LCBhdCBsZWFzdCBvbmUgb2YgdGhlIGNhcGFjaXR5IHByb3ZpZGVycyBtdXN0IGhhdmUgYSB3ZWlnaHQgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGFueSBjYXBhY2l0eSBwcm92aWRlcnMgd2l0aCBhIHdlaWdodCBvZiBgYDBgYCBjYW4ndCBiZSB1c2VkIHRvIHBsYWNlIHRhc2tzLiBJZiB5b3Ugc3BlY2lmeSBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgaW4gYSBzdHJhdGVneSB0aGF0IGFsbCBoYXZlIGEgd2VpZ2h0IG9mIGBgMGBgLCBhbnkgYGBSdW5UYXNrYGAgb3IgYGBDcmVhdGVTZXJ2aWNlYGAgYWN0aW9ucyB1c2luZyB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgd2lsbCBmYWlsLlxuICogIEFuIGV4YW1wbGUgc2NlbmFyaW8gZm9yIHVzaW5nIHdlaWdodHMgaXMgZGVmaW5pbmcgYSBzdHJhdGVneSB0aGF0IGNvbnRhaW5zIHR3byBjYXBhY2l0eSBwcm92aWRlcnMgYW5kIGJvdGggaGF2ZSBhIHdlaWdodCBvZiBgYDFgYCwgdGhlbiB3aGVuIHRoZSBgYGJhc2VgYCBpcyBzYXRpc2ZpZWQsIHRoZSB0YXNrcyB3aWxsIGJlIHNwbGl0IGV2ZW5seSBhY3Jvc3MgdGhlIHR3byBjYXBhY2l0eSBwcm92aWRlcnMuIFVzaW5nIHRoYXQgc2FtZSBsb2dpYywgaWYgeW91IHNwZWNpZnkgYSB3ZWlnaHQgb2YgYGAxYGAgZm9yICpjYXBhY2l0eVByb3ZpZGVyQSogYW5kIGEgd2VpZ2h0IG9mIGBgNGBgIGZvciAqY2FwYWNpdHlQcm92aWRlckIqLCB0aGVuIGZvciBldmVyeSBvbmUgdGFzayB0aGF0J3MgcnVuIHVzaW5nICpjYXBhY2l0eVByb3ZpZGVyQSosIGZvdXIgdGFza3Mgd291bGQgdXNlICpjYXBhY2l0eVByb3ZpZGVyQiouXG4gKi9cbldlaWdodD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZS4gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIHRhc2sgZGVmaW5pdGlvbnMgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIHRvIHJlY2VpdmUgdGhlaXIgb3duIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBpdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBvdGhlciBuZXR3b3JrIG1vZGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIE5ldHdvcmtpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stbmV0d29ya2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0NvbmZpZ3VyYXRpb24ge1xuQXdzdnBjQ29uZmlndXJhdGlvbj86IEF3c1ZwY0NvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIFZQQyBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgdGFzay5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NWcGNDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIElEcyBvZiB0aGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNlY3VyaXR5IGdyb3VwLCB0aGUgZGVmYXVsdCBzZWN1cml0eSBncm91cCBmb3IgdGhlIFZQQyBpcyB1c2VkLiBUaGVyZSdzIGEgbGltaXQgb2YgNSBzZWN1cml0eSBncm91cHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkLlxuICogICBBbGwgc3BlY2lmaWVkIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHN1Ym5ldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIFRoZXJlJ3MgYSBsaW1pdCBvZiAxNiBzdWJuZXRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZC5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblN1Ym5ldHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHRoZSB0YXNrJ3MgZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSByZWNlaXZlcyBhIHB1YmxpYyBJUCBhZGRyZXNzLiBcbiAqICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHdoZW4geW91IHNldCB0aGlzIHZhbHVlOlxuICogICArICBXaGVuIHlvdSB1c2UgYGBjcmVhdGUtc2VydmljZWBgIG9yIGBgdXBkYXRlLXNlcnZpY2VgYCwgdGhlIGRlZmF1bHQgaXMgYGBESVNBQkxFRGBgLiBcbiAqICAgKyAgV2hlbiB0aGUgc2VydmljZSBgYGRlcGxveW1lbnRDb250cm9sbGVyYGAgaXMgYGBFQ1NgYCwgdGhlIHZhbHVlIG11c3QgYmUgYGBESVNBQkxFRGBgLlxuICovXG5Bc3NpZ25QdWJsaWNJcD86IChcIkRJU0FCTEVEXCIgfCBcIkVOQUJMRURcIilcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbnN0cmFpbnQgb24gdGFzayBwbGFjZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLXBsYWNlbWVudC1jb25zdHJhaW50cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdSdyZSB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgYXJlbid0IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRDb25zdHJhaW50IHtcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uc3RyYWludC4gVXNlIGBgZGlzdGluY3RJbnN0YW5jZWBgIHRvIGVuc3VyZSB0aGF0IGVhY2ggdGFzayBpbiBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgcnVubmluZyBvbiBhIGRpZmZlcmVudCBjb250YWluZXIgaW5zdGFuY2UuIFVzZSBgYG1lbWJlck9mYGAgdG8gcmVzdHJpY3QgdGhlIHNlbGVjdGlvbiB0byBhIGdyb3VwIG9mIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblR5cGU6IChcImRpc3RpbmN0SW5zdGFuY2VcIiB8IFwibWVtYmVyT2ZcIilcbi8qKlxuICogQSBjbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlIGV4cHJlc3Npb24gdG8gYXBwbHkgdG8gdGhlIGNvbnN0cmFpbnQuIFRoZSBleHByZXNzaW9uIGNhbiBoYXZlIGEgbWF4aW11bSBsZW5ndGggb2YgMjAwMCBjaGFyYWN0ZXJzLiBZb3UgY2FuJ3Qgc3BlY2lmeSBhbiBleHByZXNzaW9uIGlmIHRoZSBjb25zdHJhaW50IHR5cGUgaXMgYGBkaXN0aW5jdEluc3RhbmNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NsdXN0ZXItcXVlcnktbGFuZ3VhZ2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5FeHByZXNzaW9uPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYExvYWRCYWxhbmNlcmBgIHByb3BlcnR5IHNwZWNpZmllcyBkZXRhaWxzIG9uIGEgbG9hZCBiYWxhbmNlciB0aGF0IGlzIHVzZWQgd2l0aCBhIHNlcnZpY2UuXG4gKiAgSWYgdGhlIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHRoZSBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRvIHVzZSBlaXRoZXIgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFdoZW4geW91IGFyZSBjcmVhdGluZyBhbiBBQ0Rsb25nIGRlcGxveW1lbnQgZ3JvdXAsIHlvdSBzcGVjaWZ5IHR3byB0YXJnZXQgZ3JvdXBzIChyZWZlcnJlZCB0byBhcyBhIGBgdGFyZ2V0R3JvdXBQYWlyYGApLiBFYWNoIHRhcmdldCBncm91cCBiaW5kcyB0byBhIHNlcGFyYXRlIHRhc2sgc2V0IGluIHRoZSBkZXBsb3ltZW50LiBUaGUgbG9hZCBiYWxhbmNlciBjYW4gYWxzbyBoYXZlIHVwIHRvIHR3byBsaXN0ZW5lcnMsIGEgcmVxdWlyZWQgbGlzdGVuZXIgZm9yIHByb2R1Y3Rpb24gdHJhZmZpYyBhbmQgYW4gb3B0aW9uYWwgbGlzdGVuZXIgdGhhdCBhbGxvd3MgeW91IHRvIHRlc3QgbmV3IHJldmlzaW9ucyBvZiB0aGUgc2VydmljZSBiZWZvcmUgcm91dGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuXG4gKiAgU2VydmljZXMgd2l0aCB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgKGZvciBleGFtcGxlLCB0aG9zZSB3aXRoIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlKSBvbmx5IHN1cHBvcnQgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMgYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnMuIENsYXNzaWMgTG9hZCBCYWxhbmNlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIEFsc28sIHdoZW4geW91IGNyZWF0ZSBhbnkgdGFyZ2V0IGdyb3VwcyBmb3IgdGhlc2Ugc2VydmljZXMsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBUYXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXIge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgQSB0YXJnZXQgZ3JvdXAgQVJOIGlzIG9ubHkgc3BlY2lmaWVkIHdoZW4gdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBFQ1NgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb3IgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVnaXN0ZXJpbmcgbXVsdGlwbGUgdGFyZ2V0IGdyb3VwcyB3aXRoIGEgc2VydmljZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcmVnaXN0ZXItbXVsdGlwbGUtdGFyZ2V0Z3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSdyZSByZXF1aXJlZCB0byBkZWZpbmUgdHdvIHRhcmdldCBncm91cHMgZm9yIHRoZSBsb2FkIGJhbGFuY2VyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCbHVlL2dyZWVuIGRlcGxveW1lbnQgd2l0aCBDb2RlRGVwbG95XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtYmx1ZWdyZWVuLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gRG8gdGhpcyB3aGVuIGNyZWF0aW5nIHlvdXIgdGFyZ2V0IGdyb3VwcyBiZWNhdXNlIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLiBUaGlzIG5ldHdvcmsgbW9kZSBpcyByZXF1aXJlZCBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuXG4gKi9cblRhcmdldEdyb3VwQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgSWYgeW91IGFyZSB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIGEgTmV0d29yayBMb2FkIEJhbGFuY2VyIHRoZSBsb2FkIGJhbGFuY2VyIG5hbWUgcGFyYW1ldGVyIHNob3VsZCBiZSBvbWl0dGVkLlxuICovXG5Mb2FkQmFsYW5jZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgKGFzIGl0IGFwcGVhcnMgaW4gYSBjb250YWluZXIgZGVmaW5pdGlvbikgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gKiAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udGFpbmVyIG5hbWUgd2hlbiBjb25maWd1cmluZyB0aGUgdGFyZ2V0IGdyb3VwIGZvciBhbiBBbWF6b24gRUNTIGxvYWQgYmFsYW5jZXIuXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgb24gdGhlIGNvbnRhaW5lciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci4gVGhpcyBwb3J0IG11c3QgY29ycmVzcG9uZCB0byBhIGBgY29udGFpbmVyUG9ydGBgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSB1c2luZy4gRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdGhleSdyZSBsYXVuY2hlZCBvbiBtdXN0IGFsbG93IGluZ3Jlc3MgdHJhZmZpYyBvbiB0aGUgYGBob3N0UG9ydGBgIG9mIHRoZSBwb3J0IG1hcHBpbmcuXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc2VydmljZSB0byBkaXNjb3ZlciBhbmQgY29ubmVjdCB0byBzZXJ2aWNlcywgYW5kIGJlIGRpc2NvdmVyZWQgYnksIGFuZCBjb25uZWN0ZWQgZnJvbSwgb3RoZXIgc2VydmljZXMgd2l0aGluIGEgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgbGlzdCBvZiBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3RzLiBUaGVzZSBhcmUgbmFtZXMgYW5kIGFsaWFzZXMgKGFsc28ga25vd24gYXMgZW5kcG9pbnRzKSB0aGF0IGFyZSB1c2VkIGJ5IG90aGVyIEFtYXpvbiBFQ1Mgc2VydmljZXMgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFxuICogIFRoaXMgZmllbGQgaXMgbm90IHJlcXVpcmVkIGZvciBhIFwiY2xpZW50XCIgQW1hem9uIEVDUyBzZXJ2aWNlIHRoYXQncyBhIG1lbWJlciBvZiBhIG5hbWVzcGFjZSBvbmx5IHRvIGNvbm5lY3QgdG8gb3RoZXIgc2VydmljZXMgd2l0aGluIHRoZSBuYW1lc3BhY2UuIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSBhIGZyb250ZW5kIGFwcGxpY2F0aW9uIHRoYXQgYWNjZXB0cyBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIGVpdGhlciBhIGxvYWQgYmFsYW5jZXIgdGhhdCdzIGF0dGFjaGVkIHRvIHRoZSBzZXJ2aWNlIG9yIGJ5IG90aGVyIG1lYW5zLlxuICogIEFuIG9iamVjdCBzZWxlY3RzIGEgcG9ydCBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24sIGFzc2lnbnMgYSBuYW1lIGZvciB0aGUgQ01BUGxvbmcgc2VydmljZSwgYW5kIGEgbGlzdCBvZiBhbGlhc2VzIChlbmRwb2ludHMpIGFuZCBwb3J0cyBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byByZWZlciB0byB0aGlzIHNlcnZpY2UuXG4gKi9cblNlcnZpY2VzPzogU2VydmljZUNvbm5lY3RTZXJ2aWNlW11cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIFNlcnZpY2UgQ29ubmVjdCB3aXRoIHRoaXMgc2VydmljZS5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuTG9nQ29uZmlndXJhdGlvbj86IExvZ0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWVzcGFjZSBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIENNQVBsb25nIG5hbWVzcGFjZSBmb3IgdXNlIHdpdGggU2VydmljZSBDb25uZWN0LiBUaGUgbmFtZXNwYWNlIG11c3QgYmUgaW4gdGhlIHNhbWUgQVdTIFJlZ2lvbiBhcyB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIGFuZCBjbHVzdGVyLiBUaGUgdHlwZSBvZiBuYW1lc3BhY2UgZG9lc24ndCBhZmZlY3QgU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDTUFQbG9uZywgc2VlIFtXb3JraW5nIHdpdGggU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2RnL3dvcmtpbmctd2l0aC1zZXJ2aWNlcy5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKi9cbk5hbWVzcGFjZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0IGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFNlcnZpY2Uge1xuVGltZW91dD86IFRpbWVvdXRDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eSB0byBsaXN0ZW4gb24uXG4gKiAgVXNlIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIHRvIGJ5cGFzcyB0aGUgcHJveHkgZm9yIHRyYWZmaWMgb24gdGhlIHBvcnQgbnVtYmVyIHNwZWNpZmllZCBpbiB0aGUgbmFtZWQgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBhcHBsaWNhdGlvbiwgYW5kIHRoZW4gdXNlIGl0IGluIHlvdXIgVlBDIHNlY3VyaXR5IGdyb3VwcyB0byBhbGxvdyB0cmFmZmljIGludG8gdGhlIHByb3h5IGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqICBJbiBgYGF3c3ZwY2BgIG1vZGUgYW5kIEZhcmdhdGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBjb250YWluZXIgcG9ydCBudW1iZXIuIFRoZSBjb250YWluZXIgcG9ydCBudW1iZXIgaXMgaW4gdGhlIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJbiBicmlkZ2UgbW9kZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGVwaGVtZXJhbCBwb3J0IG9mIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuXG4gKi9cbkluZ3Jlc3NQb3J0T3ZlcnJpZGU/OiBudW1iZXJcbi8qKlxuICogVGhlIGxpc3Qgb2YgY2xpZW50IGFsaWFzZXMgZm9yIHRoaXMgU2VydmljZSBDb25uZWN0IHNlcnZpY2UuIFlvdSB1c2UgdGhlc2UgdG8gYXNzaWduIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucy4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNsaWVudCBhbGlhc2VzIHRoYXQgeW91IGNhbiBoYXZlIGluIHRoaXMgbGlzdCBpcyAxLlxuICogIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciBBbWF6b24gRUNTIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBGb3IgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgLCB5b3UgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBgYGNsaWVudEFsaWFzYGAgd2l0aCBvbmUgYGBwb3J0YGAuXG4gKi9cbkNsaWVudEFsaWFzZXM/OiBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzW11cblRscz86IFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG5ldyBDTUFQIHNlcnZpY2UgdGhhdCBBbWF6b24gRUNTIGNyZWF0ZXMgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLiBUaGlzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ01BUCBuYW1lc3BhY2UuIFRoZSBuYW1lIGNhbiBjb250YWluIHVwIHRvIDY0IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGFuZCBoeXBoZW5zICgtKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqL1xuRGlzY292ZXJ5TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBwb3J0TmFtZWBgIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBgYHBvcnRNYXBwaW5nc2BgIGZyb20gYWxsIHRoZSBjb250YWluZXJzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgY29uZmlndXJlZCB0aW1lb3V0cyBmb3IgU2VydmljZSBDb25uZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIHdhaXRpbmcgZm9yIHRoZSB1cHN0cmVhbSB0byByZXNwb25kIHdpdGggYSBjb21wbGV0ZSByZXNwb25zZSBwZXIgcmVxdWVzdC4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBwZXJSZXF1ZXN0VGltZW91dGBgLiBgYHBlclJlcXVlc3RUaW1lb3V0YGAgY2FuIG9ubHkgYmUgc2V0IGlmIFNlcnZpY2UgQ29ubmVjdCBgYGFwcFByb3RvY29sYGAgaXNuJ3QgYGBUQ1BgYC4gT25seSBgYGlkbGVUaW1lb3V0YGAgaXMgYWxsb3dlZCBmb3IgYGBUQ1BgYGBgYXBwUHJvdG9jb2xgYC5cbiAqL1xuUGVyUmVxdWVzdFRpbWVvdXRTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIGEgY29ubmVjdGlvbiB3aWxsIHN0YXkgYWN0aXZlIHdoaWxlIGlkbGUuIEEgdmFsdWUgb2YgYGAwYGAgY2FuIGJlIHNldCB0byBkaXNhYmxlIGBgaWRsZVRpbWVvdXRgYC5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgSFRUUGBgL2BgSFRUUDJgYC9gYEdSUENgYCBpcyA1IG1pbnV0ZXMuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYFRDUGBgIGlzIDEgaG91ci5cbiAqL1xuSWRsZVRpbWVvdXRTZWNvbmRzPzogbnVtYmVyXG59XG4vKipcbiAqIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciB0YXNrcyAoXCJjbGllbnRzXCIpIGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuXG4gKiAgRWFjaCBuYW1lIGFuZCBwb3J0IG1hcHBpbmcgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2UuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0Q2xpZW50QWxpYXMge1xuLyoqXG4gKiBUaGUgYGBkbnNOYW1lYGAgaXMgdGhlIG5hbWUgdGhhdCB5b3UgdXNlIGluIHRoZSBhcHBsaWNhdGlvbnMgb2YgY2xpZW50IHRhc2tzIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLiBUaGUgbmFtZSBtdXN0IGJlIGEgdmFsaWQgRE5TIG5hbWUgYnV0IGRvZXNuJ3QgbmVlZCB0byBiZSBmdWxseS1xdWFsaWZpZWQuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIHVwIHRvIDEyNyBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBoeXBoZW5zICgtKSwgYW5kIHBlcmlvZHMgKC4pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICogIElmIHRoaXMgcGFyYW1ldGVyIGlzbid0IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBkaXNjb3ZlcnlOYW1lLm5hbWVzcGFjZWBgIGlzIHVzZWQuIElmIHRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBwb3J0IG1hcHBpbmcgbmFtZSBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBgYHBvcnROYW1lLm5hbWVzcGFjZWBgLlxuICogIFRvIGF2b2lkIGNoYW5naW5nIHlvdXIgYXBwbGljYXRpb25zIGluIGNsaWVudCBBbWF6b24gRUNTIHNlcnZpY2VzLCBzZXQgdGhpcyB0byB0aGUgc2FtZSBuYW1lIHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB1c2VzIGJ5IGRlZmF1bHQuIEZvciBleGFtcGxlLCBhIGZldyBjb21tb24gbmFtZXMgYXJlIGBgZGF0YWJhc2VgYCwgYGBkYmBgLCBvciB0aGUgbG93ZXJjYXNlIG5hbWUgb2YgYSBkYXRhYmFzZSwgc3VjaCBhcyBgYG15c3FsYGAgb3IgYGByZWRpc2BgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRuc05hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGxpc3RlbmluZyBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS4gVGhpcyBwb3J0IGlzIGF2YWlsYWJsZSBpbnNpZGUgb2YgYWxsIG9mIHRoZSB0YXNrcyB3aXRoaW4gdGhlIHNhbWUgbmFtZXNwYWNlLlxuICogIFRvIGF2b2lkIGNoYW5naW5nIHlvdXIgYXBwbGljYXRpb25zIGluIGNsaWVudCBBbWF6b24gRUNTIHNlcnZpY2VzLCBzZXQgdGhpcyB0byB0aGUgc2FtZSBwb3J0IHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB1c2VzIGJ5IGRlZmF1bHQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUG9ydDogbnVtYmVyXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb24ge1xuSXNzdWVyQ2VydGlmaWNhdGVBdXRob3JpdHk6IFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHlcbi8qKlxuICogVGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleS5cbiAqL1xuS21zS2V5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU2VydmljZSBDb25uZWN0IFRMUy5cbiAqL1xuUm9sZUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2lnbmVyIGNlcnRpZmljYXRlIGF1dGhvcml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5IHtcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmljYXRlLlxuICovXG5Bd3NQY2FBdXRob3JpdHlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTG9nQ29uZmlnYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tbG9nLWRyaXZlcmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogIEJ5IGRlZmF1bHQsIGNvbnRhaW5lcnMgdXNlIHRoZSBzYW1lIGxvZ2dpbmcgZHJpdmVyIHRoYXQgdGhlIERvY2tlciBkYWVtb24gdXNlcy4gSG93ZXZlciwgdGhlIGNvbnRhaW5lciBtaWdodCB1c2UgYSBkaWZmZXJlbnQgbG9nZ2luZyBkcml2ZXIgdGhhbiB0aGUgRG9ja2VyIGRhZW1vbiBieSBzcGVjaWZ5aW5nIGEgbG9nIGRyaXZlciBjb25maWd1cmF0aW9uIGluIHRoZSBjb250YWluZXIgZGVmaW5pdGlvbi5cbiAqICBVbmRlcnN0YW5kIHRoZSBmb2xsb3dpbmcgd2hlbiBzcGVjaWZ5aW5nIGEgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY29udGFpbmVycy5cbiAqICAgKyAgQW1hem9uIEVDUyBjdXJyZW50bHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdGhlIGxvZ2dpbmcgZHJpdmVycyBhdmFpbGFibGUgdG8gdGhlIERvY2tlciBkYWVtb24uIEFkZGl0aW9uYWwgbG9nIGRyaXZlcnMgbWF5IGJlIGF2YWlsYWJsZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50LlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgICsgIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IG11c3QgcmVnaXN0ZXIgdGhlIGF2YWlsYWJsZSBsb2dnaW5nIGRyaXZlcnMgd2l0aCB0aGUgYGBFQ1NfQVZBSUxBQkxFX0xPR0dJTkdfRFJJVkVSU2BgIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBjb250YWluZXJzIHBsYWNlZCBvbiB0aGF0IGluc3RhbmNlIGNhbiB1c2UgdGhlc2UgbG9nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWFnZW50LWNvbmZpZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBvbiBGQVJHQVRFbG9uZywgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgeW91ciB0YXNrcyBhcmUgaG9zdGVkIG9uLCBhbnkgYWRkaXRpb25hbCBzb2Z0d2FyZSBuZWVkZWQgbXVzdCBiZSBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgdGFzay4gRm9yIGV4YW1wbGUsIHRoZSBGbHVlbnRkIG91dHB1dCBhZ2dyZWdhdG9ycyBvciBhIHJlbW90ZSBob3N0IHJ1bm5pbmcgTG9nc3Rhc2ggdG8gc2VuZCBHZWxmIGxvZ3MgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzZWNyZXRzIHRvIHBhc3MgdG8gdGhlIGxvZyBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuU2VjcmV0T3B0aW9ucz86IFNlY3JldFtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VuZCB0byB0aGUgbG9nIGRyaXZlci5cbiAqICBUaGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgZGVwZW5kIG9uIHRoZSBsb2cgZHJpdmVyLiBTb21lIG9mIHRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHlvdSB1c2UgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIgdG8gcm91dGUgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgYXdzbG9ncy1jcmVhdGUtZ3JvdXAgUmVxdWlyZWQ6IE5vIFNwZWNpZnkgd2hldGhlciB5b3Ugd2FudCB0aGUgbG9nIGdyb3VwIHRvIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4gSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBmYWxzZS4gWW91ciBJQU0gcG9saWN5IG11c3QgaW5jbHVkZSB0aGUgbG9nczpDcmVhdGVMb2dHcm91cCBwZXJtaXNzaW9uIGJlZm9yZSB5b3UgYXR0ZW1wdCB0byB1c2UgYXdzbG9ncy1jcmVhdGUtZ3JvdXAuICsgYXdzbG9ncy1yZWdpb24gUmVxdWlyZWQ6IFllcyBTcGVjaWZ5IHRoZSBSZWdpb24gdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIGlzIHRvIHNlbmQgeW91ciBEb2NrZXIgbG9ncyB0by4gWW91IGNhbiBjaG9vc2UgdG8gc2VuZCBhbGwgb2YgeW91ciBsb2dzIGZyb20gY2x1c3RlcnMgaW4gZGlmZmVyZW50IFJlZ2lvbnMgdG8gYSBzaW5nbGUgcmVnaW9uIGluIENsb3VkV2F0Y2ggTG9ncy4gVGhpcyBpcyBzbyB0aGF0IHRoZXkncmUgYWxsIHZpc2libGUgaW4gb25lIGxvY2F0aW9uLiBPdGhlcndpc2UsIHlvdSBjYW4gc2VwYXJhdGUgdGhlbSBieSBSZWdpb24gZm9yIG1vcmUgZ3JhbnVsYXJpdHkuIE1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgbG9nIGdyb3VwIGV4aXN0cyBpbiB0aGUgUmVnaW9uIHRoYXQgeW91IHNwZWNpZnkgd2l0aCB0aGlzIG9wdGlvbi4gKyBhd3Nsb2dzLWdyb3VwIFJlcXVpcmVkOiBZZXMgTWFrZSBzdXJlIHRvIHNwZWNpZnkgYSBsb2cgZ3JvdXAgdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIHNlbmRzIGl0cyBsb2cgc3RyZWFtcyB0by4gKyBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggUmVxdWlyZWQ6IFllcywgd2hlbiB1c2luZyBGYXJnYXRlLk9wdGlvbmFsIHdoZW4gdXNpbmcgRUMyLiBVc2UgdGhlIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBvcHRpb24gdG8gYXNzb2NpYXRlIGEgbG9nIHN0cmVhbSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCB0aGUgY29udGFpbmVyIG5hbWUsIGFuZCB0aGUgSUQgb2YgdGhlIEFtYXpvbiBFQ1MgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gSWYgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSB0YWtlcyB0aGUgZm9ybWF0IHByZWZpeC1uYW1lL2NvbnRhaW5lci1uYW1lL2Vjcy10YXNrLWlkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIGlzIG5hbWVkIGFmdGVyIHRoZSBjb250YWluZXIgSUQgdGhhdCdzIGFzc2lnbmVkIGJ5IHRoZSBEb2NrZXIgZGFlbW9uIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UuIEJlY2F1c2UgaXQncyBkaWZmaWN1bHQgdG8gdHJhY2UgbG9ncyBiYWNrIHRvIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0gd2l0aCBqdXN0IHRoZSBEb2NrZXIgY29udGFpbmVyIElEICh3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlKSwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbi4gRm9yIEFtYXpvbiBFQ1Mgc2VydmljZXMsIHlvdSBjYW4gdXNlIHRoZSBzZXJ2aWNlIG5hbWUgYXMgdGhlIHByZWZpeC4gRG9pbmcgc28sIHlvdSBjYW4gdHJhY2UgbG9nIHN0cmVhbXMgdG8gdGhlIHNlcnZpY2UgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8sIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0sIGFuZCB0aGUgSUQgb2YgdGhlIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIFlvdSBtdXN0IHNwZWNpZnkgYSBzdHJlYW0tcHJlZml4IGZvciB5b3VyIGxvZ3MgdG8gaGF2ZSB5b3VyIGxvZ3MgYXBwZWFyIGluIHRoZSBMb2cgcGFuZSB3aGVuIHVzaW5nIHRoZSBBbWF6b24gRUNTIGNvbnNvbGUuICsgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiBpbiBQeXRob24gc3RyZnRpbWUgZm9ybWF0LiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIE9uZSBleGFtcGxlIG9mIGEgdXNlIGNhc2UgZm9yIHVzaW5nIHRoaXMgZm9ybWF0IGlzIGZvciBwYXJzaW5nIG91dHB1dCBzdWNoIGFzIGEgc3RhY2sgZHVtcCwgd2hpY2ggbWlnaHQgb3RoZXJ3aXNlIGJlIGxvZ2dlZCBpbiBtdWx0aXBsZSBlbnRyaWVzLiBUaGUgY29ycmVjdCBwYXR0ZXJuIGFsbG93cyBpdCB0byBiZSBjYXB0dXJlZCBpbiBhIHNpbmdsZSBlbnRyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiArIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiB0aGF0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24uIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGlzIGFsc28gY29uZmlndXJlZC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiBcbiAqICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXBwbHkgdG8gYWxsIHN1cHBvcnRlZCBsb2cgZHJpdmVycy5cbiAqICAgKyBtb2RlIFJlcXVpcmVkOiBObyBWYWxpZCB2YWx1ZXM6IG5vbi1ibG9ja2luZyB8IGJsb2NraW5nIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIGRlbGl2ZXJ5IG1vZGUgb2YgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgbG9nIGRyaXZlciBzcGVjaWZpZWQgdXNpbmcgbG9nRHJpdmVyLiBUaGUgZGVsaXZlcnkgbW9kZSB5b3UgY2hvb3NlIGFmZmVjdHMgYXBwbGljYXRpb24gYXZhaWxhYmlsaXR5IHdoZW4gdGhlIGZsb3cgb2YgbG9ncyBmcm9tIGNvbnRhaW5lciBpcyBpbnRlcnJ1cHRlZC4gSWYgeW91IHVzZSB0aGUgYmxvY2tpbmcgbW9kZSBhbmQgdGhlIGZsb3cgb2YgbG9ncyBpcyBpbnRlcnJ1cHRlZCwgY2FsbHMgZnJvbSBjb250YWluZXIgY29kZSB0byB3cml0ZSB0byB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyB3aWxsIGJsb2NrLiBUaGUgbG9nZ2luZyB0aHJlYWQgb2YgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmxvY2sgYXMgYSByZXN1bHQuIFRoaXMgbWF5IGNhdXNlIHRoZSBhcHBsaWNhdGlvbiB0byBiZWNvbWUgdW5yZXNwb25zaXZlIGFuZCBsZWFkIHRvIGNvbnRhaW5lciBoZWFsdGhjaGVjayBmYWlsdXJlLiBJZiB5b3UgdXNlIHRoZSBub24tYmxvY2tpbmcgbW9kZSwgdGhlIGNvbnRhaW5lcidzIGxvZ3MgYXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGluLW1lbW9yeSBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWF4LWJ1ZmZlci1zaXplIG9wdGlvbi4gVGhpcyBwcmV2ZW50cyB0aGUgYXBwbGljYXRpb24gZnJvbSBiZWNvbWluZyB1bnJlc3BvbnNpdmUgd2hlbiBsb2dzIGNhbm5vdCBiZSBzZW50LiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBtb2RlIGlmIHlvdSB3YW50IHRvIGVuc3VyZSBzZXJ2aWNlIGF2YWlsYWJpbGl0eSBhbmQgYXJlIG9rYXkgd2l0aCBzb21lIGxvZyBsb3NzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFByZXZlbnRpbmcgbG9nIGxvc3Mgd2l0aCBub24tYmxvY2tpbmcgbW9kZSBpbiB0aGUgYXdzbG9ncyBjb250YWluZXIgbG9nIGRyaXZlci4gWW91IGNhbiBzZXQgYSBkZWZhdWx0IG1vZGUgZm9yIGFsbCBjb250YWluZXJzIGluIGEgc3BlY2lmaWMgUmVnaW9uIGJ5IHVzaW5nIHRoZSBkZWZhdWx0TG9nRHJpdmVyTW9kZSBhY2NvdW50IHNldHRpbmcuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBtb2RlIG9wdGlvbiBvciBjb25maWd1cmUgdGhlIGFjY291bnQgc2V0dGluZywgQW1hem9uIEVDUyB3aWxsIGRlZmF1bHQgdG8gdGhlIGJsb2NraW5nIG1vZGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY2NvdW50IHNldHRpbmcsIHNlZSBEZWZhdWx0IGxvZyBkcml2ZXIgbW9kZSBpbiB0aGUgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlLiArIG1heC1idWZmZXItc2l6ZSBSZXF1aXJlZDogTm8gRGVmYXVsdCB2YWx1ZTogMW0gV2hlbiBub24tYmxvY2tpbmcgbW9kZSBpcyB1c2VkLCB0aGUgbWF4LWJ1ZmZlci1zaXplIGxvZyBvcHRpb24gY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0J3MgdXNlZCBmb3IgaW50ZXJtZWRpYXRlIG1lc3NhZ2Ugc3RvcmFnZS4gTWFrZSBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgYnVmZmVyIHNpemUgYmFzZWQgb24geW91ciBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwLCBmdXJ0aGVyIGxvZ3MgY2Fubm90IGJlIHN0b3JlZC4gTG9ncyB0aGF0IGNhbm5vdCBiZSBzdG9yZWQgYXJlIGxvc3QuIFxuICogIFRvIHJvdXRlIGxvZ3MgdXNpbmcgdGhlIGBgc3BsdW5rYGAgbG9nIHJvdXRlciwgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGBgc3BsdW5rLXRva2VuYGAgYW5kIGEgYGBzcGx1bmstdXJsYGAuXG4gKiAgV2hlbiB5b3UgdXNlIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIHJvdXRlciB0byByb3V0ZSBsb2dzIHRvIGFuIEFXUyBTZXJ2aWNlIG9yIEFXUyBQYXJ0bmVyIE5ldHdvcmsgZGVzdGluYXRpb24gZm9yIGxvZyBzdG9yYWdlIGFuZCBhbmFseXRpY3MsIHlvdSBjYW4gc2V0IHRoZSBgYGxvZy1kcml2ZXItYnVmZmVyLWxpbWl0YGAgb3B0aW9uIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgYXJlIGJ1ZmZlcmVkIGluIG1lbW9yeSwgYmVmb3JlIGJlaW5nIHNlbnQgdG8gdGhlIGxvZyByb3V0ZXIgY29udGFpbmVyLiBJdCBjYW4gaGVscCB0byByZXNvbHZlIHBvdGVudGlhbCBsb2cgbG9zcyBpc3N1ZSBiZWNhdXNlIGhpZ2ggdGhyb3VnaHB1dCBtaWdodCByZXN1bHQgaW4gbWVtb3J5IHJ1bm5pbmcgb3V0IGZvciB0aGUgYnVmZmVyIGluc2lkZSBvZiBEb2NrZXIuXG4gKiAgT3RoZXIgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB1c2luZyBgYGF3c2ZpcmVsZW5zYGAgdG8gcm91dGUgbG9ncyBkZXBlbmQgb24gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gRGF0YSBGaXJlaG9zZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBuYW1lIGZvciB0aGUgbG9nIHN0cmVhbSB3aXRoIGBgZGVsaXZlcnlfc3RyZWFtYGAuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBTdHJlYW1zLCB5b3UgY2FuIHNwZWNpZnkgYW4gQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgZGF0YSBzdHJlYW0gbmFtZSB3aXRoIGBgc3RyZWFtYGAuXG4gKiAgIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UsIHlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGxpa2UgYGBOYW1lYGAsIGBgSG9zdGBgIChPcGVuU2VhcmNoIFNlcnZpY2UgZW5kcG9pbnQgd2l0aG91dCBwcm90b2NvbCksIGBgUG9ydGBgLCBgYEluZGV4YGAsIGBgVHlwZWBgLCBgYEF3c19hdXRoYGAsIGBgQXdzX3JlZ2lvbmBgLCBgYFN1cHByZXNzX1R5cGVfTmFtZWBgLCBhbmQgYGB0bHNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5kZXIgdGhlIGhvb2Q6IEZpcmVMZW5zIGZvciBBbWF6b24gRUNTIFRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29udGFpbmVycy91bmRlci10aGUtaG9vZC1maXJlbGVucy1mb3ItYW1hem9uLWVjcy10YXNrcy8pLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBTMywgeW91IGNhbiBzcGVjaWZ5IHRoZSBidWNrZXQgdXNpbmcgdGhlIGBgYnVja2V0YGAgb3B0aW9uLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBgYHJlZ2lvbmBgLCBgYHRvdGFsX2ZpbGVfc2l6ZWBgLCBgYHVwbG9hZF90aW1lb3V0YGAsIGFuZCBgYHVzZV9wdXRfb2JqZWN0YGAgYXMgb3B0aW9ucy5cbiAqICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTkgb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuIFRvIGNoZWNrIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSB2ZXJzaW9uIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLCBsb2cgaW4gdG8geW91ciBjb250YWluZXIgaW5zdGFuY2UgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IGBgc3VkbyBkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCAne3suU2VydmVyLkFQSVZlcnNpb259fSdgYFxuICovXG5PcHRpb25zPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgZHJpdmVyIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCwgYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBDbG91ZFdhdGNoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19hd3Nsb2dzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gYW4gc2VydmljZSBvciBQYXJ0bmVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19maXJlbGVucy5odG1sKS5cbiAqICAgSWYgeW91IGhhdmUgYSBjdXN0b20gZHJpdmVyIHRoYXQgaXNuJ3QgbGlzdGVkLCB5b3UgY2FuIGZvcmsgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHByb2plY3QgdGhhdCdzIFthdmFpbGFibGUgb24gR2l0SHViXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hbWF6b24tZWNzLWFnZW50KSBhbmQgY3VzdG9taXplIGl0IHRvIHdvcmsgd2l0aCB0aGF0IGRyaXZlci4gV2UgZW5jb3VyYWdlIHlvdSB0byBzdWJtaXQgcHVsbCByZXF1ZXN0cyBmb3IgY2hhbmdlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgaW5jbHVkZWQuIEhvd2V2ZXIsIHdlIGRvbid0IGN1cnJlbnRseSBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgbW9kaWZpZWQgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuXG4gKi9cbkxvZ0RyaXZlcj86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHlvdXIgY29udGFpbmVyLiBTZWNyZXRzIGNhbiBiZSBleHBvc2VkIHRvIGEgY29udGFpbmVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqICAgKyAgVG8gaW5qZWN0IHNlbnNpdGl2ZSBkYXRhIGludG8geW91ciBjb250YWluZXJzIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcywgdXNlIHRoZSBgYHNlY3JldHNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgICsgIFRvIHJlZmVyZW5jZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGxvZyBjb25maWd1cmF0aW9uIG9mIGEgY29udGFpbmVyLCB1c2UgdGhlIGBgc2VjcmV0T3B0aW9uc2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0IHtcbi8qKlxuICogVGhlIHNlY3JldCB0byBleHBvc2UgdG8gdGhlIGNvbnRhaW5lci4gVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGVpdGhlciB0aGUgZnVsbCBBUk4gb2YgdGhlIEFTTWxvbmcgc2VjcmV0IG9yIHRoZSBmdWxsIEFSTiBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWlyZSBJQU1sb25nIHBlcm1pc3Npb25zLCBzZWUgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXNlY3JldHMuaHRtbCNzZWNyZXRzLWlhbSkgKGZvciBTZWNyZXRzIE1hbmFnZXIpIG9yIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1wYXJhbWV0ZXJzLmh0bWwpIChmb3IgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBzdG9yZSkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXIgZXhpc3RzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgdGFzayB5b3UncmUgbGF1bmNoaW5nLCB0aGVuIHlvdSBjYW4gdXNlIGVpdGhlciB0aGUgZnVsbCBBUk4gb3IgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLiBJZiB0aGUgcGFyYW1ldGVyIGV4aXN0cyBpbiBhIGRpZmZlcmVudCBSZWdpb24sIHRoZW4gdGhlIGZ1bGwgQVJOIG11c3QgYmUgc3BlY2lmaWVkLlxuICovXG5WYWx1ZUZyb206IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0LlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgc2VydmljZSB0aGF0IGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRhcmdldCBncm91cChzKSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNMYXR0aWNlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuVGFyZ2V0R3JvdXBBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcG9ydCBtYXBwaW5nIHRvIHJlZ2lzdGVyIGluIHRoZSBWUEMgTGF0dGljZSB0YXJnZXQgZ3JvdXAuIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGBgcG9ydE1hcHBpbmdgYCB5b3UgZGVmaW5lZCBpbiB5b3VyIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1PigKggaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIFZQQyBMYXR0aWNlIGluZnJhc3RydWN0dXJlLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLiBJZiBubyBkZXBsb3ltZW50IGNvbnRyb2xsZXIgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYEVDU2BgIGlzIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbnRyb2xsZXIge1xuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGUgdG8gdXNlLiBUaGVyZSBhcmUgdGhyZWUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzIGF2YWlsYWJsZTpcbiAqICAgKyBFQ1MgVGhlIHJvbGxpbmcgdXBkYXRlIChFQ1MpIGRlcGxveW1lbnQgdHlwZSBpbnZvbHZlcyByZXBsYWNpbmcgdGhlIGN1cnJlbnQgcnVubmluZyB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24uIFRoZSBudW1iZXIgb2YgY29udGFpbmVycyBBbWF6b24gRUNTIGFkZHMgb3IgcmVtb3ZlcyBmcm9tIHRoZSBzZXJ2aWNlIGR1cmluZyBhIHJvbGxpbmcgdXBkYXRlIGlzIGNvbnRyb2xsZWQgYnkgYWRqdXN0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGFsbG93ZWQgZHVyaW5nIGEgc2VydmljZSBkZXBsb3ltZW50LCBhcyBzcGVjaWZpZWQgaW4gdGhlIERlcGxveW1lbnRDb25maWd1cmF0aW9uLiArIENPREVfREVQTE9ZIFRoZSBibHVlL2dyZWVuIChDT0RFX0RFUExPWSkgZGVwbG95bWVudCB0eXBlIHVzZXMgdGhlIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBtb2RlbCBwb3dlcmVkIGJ5ICwgd2hpY2ggYWxsb3dzIHlvdSB0byB2ZXJpZnkgYSBuZXcgZGVwbG95bWVudCBvZiBhIHNlcnZpY2UgYmVmb3JlIHNlbmRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LiArIEVYVEVSTkFMIFRoZSBleHRlcm5hbCAoRVhURVJOQUwpIGRlcGxveW1lbnQgdHlwZSBlbmFibGVzIHlvdSB0byB1c2UgYW55IHRoaXJkLXBhcnR5IGRlcGxveW1lbnQgY29udHJvbGxlciBmb3IgZnVsbCBjb250cm9sIG92ZXIgdGhlIGRlcGxveW1lbnQgcHJvY2VzcyBmb3IgYW4gQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5UeXBlPzogKFwiQ09ERV9ERVBMT1lcIiB8IFwiRUNTXCIgfCBcIkVYVEVSTkFMXCIpXG59XG4vKipcbiAqIE9wdGlvbmFsIGRlcGxveW1lbnQgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgaG93IG1hbnkgdGFza3MgcnVuIGR1cmluZyB0aGUgZGVwbG95bWVudCBhbmQgdGhlIG9yZGVyaW5nIG9mIHN0b3BwaW5nIGFuZCBzdGFydGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbiB7XG5BbGFybXM/OiBEZXBsb3ltZW50QWxhcm1zXG5EZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXI/OiBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtYXhpbXVtUGVyY2VudGBgIHBhcmFtZXRlciByZXByZXNlbnRzIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBhcmUgYWxsb3dlZCBpbiB0aGUgYGBSVU5OSU5HYGAgb3IgYGBQRU5ESU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlZmluZSB0aGUgZGVwbG95bWVudCBiYXRjaCBzaXplLiBGb3IgZXhhbXBsZSwgaWYgeW91ciBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBhbmQgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBvZiAyMDAlLCB0aGUgc2NoZWR1bGVyIG1heSBzdGFydCBmb3VyIG5ldyB0YXNrcyBiZWZvcmUgc3RvcHBpbmcgdGhlIGZvdXIgb2xkZXIgdGFza3MgKHByb3ZpZGVkIHRoYXQgdGhlIGNsdXN0ZXIgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIGRvIHRoaXMgYXJlIGF2YWlsYWJsZSkuIFRoZSBkZWZhdWx0IGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBpcyAyMDAlLlxuICogIFRoZSBBbWF6b24gRUNTIHNjaGVkdWxlciB1c2VzIHRoaXMgcGFyYW1ldGVyIHRvIHJlcGxhY2UgdW5oZWFsdGh5IHRhc2tzIGJ5IHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGZpcnN0IGFuZCB0aGVuIHN0b3BwaW5nIHRoZSB1bmhlYWx0aHkgdGFza3MsIGFzIGxvbmcgYXMgY2x1c3RlciByZXNvdXJjZXMgZm9yIHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGFyZSBhdmFpbGFibGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgc2NoZWR1bGVyIHJlcGxhY2VzIHVuaGVhbHRoeSB0YXNrcywgc2VlIFtBbWF6b24gRUNTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1heGltdW0gcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZC4gVGhlIHZhbHVlIGlzIHN0aWxsIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1heGltdW1QZXJjZW50PzogbnVtYmVyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgcmVwcmVzZW50cyBhIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZXBsb3kgd2l0aG91dCB1c2luZyBhZGRpdGlvbmFsIGNsdXN0ZXIgY2FwYWNpdHkuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgb2YgNTAlLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgbWF5IHN0b3AgdHdvIGV4aXN0aW5nIHRhc2tzIHRvIGZyZWUgdXAgY2x1c3RlciBjYXBhY2l0eSBiZWZvcmUgc3RhcnRpbmcgdHdvIG5ldyB0YXNrcy4gXG4gKiAgIElmIGFueSB0YXNrcyBhcmUgdW5oZWFsdGh5IGFuZCBpZiBgYG1heGltdW1QZXJjZW50YGAgZG9lc24ndCBhbGxvdyB0aGUgQW1hem9uIEVDUyBzY2hlZHVsZXIgdG8gc3RhcnQgcmVwbGFjZW1lbnQgdGFza3MsIHRoZSBzY2hlZHVsZXIgc3RvcHMgdGhlIHVuaGVhbHRoeSB0YXNrcyBvbmUtYnktb25lIOKAlCB1c2luZyB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBhcyBhIGNvbnN0cmFpbnQg4oCUIHRvIGNsZWFyIHVwIGNhcGFjaXR5IHRvIGxhdW5jaCByZXBsYWNlbWVudCB0YXNrcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBzY2hlZHVsZXIgcmVwbGFjZXMgdW5oZWFsdGh5IHRhc2tzLCBzZWUgW0FtYXpvbiBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKSAuIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyBub3QqIHVzZSBhIGxvYWQgYmFsYW5jZXIsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIG5vdGVkOlxuICogICArICBBIHNlcnZpY2UgaXMgY29uc2lkZXJlZCBoZWFsdGh5IGlmIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHBhc3MgdGhlaXIgaGVhbHRoIGNoZWNrcy5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIDQwIHNlY29uZHMgYWZ0ZXIgYSB0YXNrIHJlYWNoZXMgYSBgYFJVTk5JTkdgYCBzdGF0ZSBiZWZvcmUgdGhlIHRhc2sgaXMgY291bnRlZCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBvbmUgb3IgbW9yZSBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIGl0IHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLiBBIHRhc2sgaXMgY29uc2lkZXJlZCBoZWFsdGh5IHdoZW4gYWxsIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFzayBoYXZlIHBhc3NlZCB0aGVpciBoZWFsdGggY2hlY2tzLiBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGNhbiB3YWl0IGZvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb250YWluZXIgaGVhbHRoIGNoZWNrIHNldHRpbmdzLiBcbiAqICAgXG4gKiAgRm9yIHNlcnZpY2VzIHRoYXQgKmRvKiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICArICBJZiBhIHRhc2sgaGFzIGFuIGVzc2VudGlhbCBjb250YWluZXIgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciBib3RoIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYW5kIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICBcbiAqICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXBsaWNhIHNlcnZpY2UgZm9yIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgaXMgMTAwJS4gVGhlIGRlZmF1bHQgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYERBRU1PTmBgIHNlcnZpY2Ugc2NoZWR1bGUgaXMgMCUgZm9yIHRoZSBDTEksIHRoZSBBV1MgU0RLcywgYW5kIHRoZSBBUElzIGFuZCA1MCUgZm9yIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLlxuICogIFRoZSBtaW5pbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGR1cmluZyBhIGRlcGxveW1lbnQgaXMgdGhlIGBgZGVzaXJlZENvdW50YGAgbXVsdGlwbGllZCBieSB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYC8xMDAsIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciB2YWx1ZS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptaW5pbXVtIGhlYWx0aHkgcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQsIGFsdGhvdWdoIGl0IGlzIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1pbmltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlclxufVxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgQ2xvdWRXYXRjaCBhbGFybXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudEFsYXJtcyB7XG4vKipcbiAqIE9uZSBvciBtb3JlIENsb3VkV2F0Y2ggYWxhcm0gbmFtZXMuIFVzZSBhIFwiLFwiIHRvIHNlcGFyYXRlIHRoZSBhbGFybXMuXG4gKi9cbkFsYXJtTmFtZXM6IHN0cmluZ1tdXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIENsb3VkV2F0Y2ggYWxhcm0gb3B0aW9uIGluIHRoZSBzZXJ2aWNlIGRlcGxveW1lbnQgcHJvY2Vzcy5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIHVzZWQsIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgY2FuIG9ubHkgYmUgdXNlZCBmb3Igc2VydmljZXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUuXG4gKiAgIFRoZSAqZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIqIGRldGVybWluZXMgd2hldGhlciBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIGZhaWwgaWYgdGhlIHNlcnZpY2UgY2FuJ3QgcmVhY2ggYSBzdGVhZHkgc3RhdGUuIElmIHlvdSB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyLCBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIHRyYW5zaXRpb24gdG8gYSBmYWlsZWQgc3RhdGUgYW5kIHN0b3AgbGF1bmNoaW5nIG5ldyB0YXNrcy4gSWYgeW91IHVzZSB0aGUgcm9sbGJhY2sgb3B0aW9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUm9sbGluZyB1cGRhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZS1lY3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENpcmN1aXRCcmVha2VyIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgbG9naWMgZm9yIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAgbXVzdCBoYXZlIGEgbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgbmFtZXNwYWNlLlxuICogICAgU3RhcnRpbmcgQXByaWwgMTUsIDIwMjMsIEFXUzsgd2lsbCBub3Qgb25ib2FyZCBuZXcgY3VzdG9tZXJzIHRvIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSAoRUkpLCBhbmQgd2lsbCBoZWxwIGN1cnJlbnQgY3VzdG9tZXJzIG1pZ3JhdGUgdGhlaXIgd29ya2xvYWRzIHRvIG9wdGlvbnMgdGhhdCBvZmZlciBiZXR0ZXIgcHJpY2UgYW5kIHBlcmZvcm1hbmNlLiBBZnRlciBBcHJpbCAxNSwgMjAyMywgbmV3IGN1c3RvbWVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGxhdW5jaCBpbnN0YW5jZXMgd2l0aCBBbWF6b24gRUkgYWNjZWxlcmF0b3JzIGluIEFtYXpvbiBTYWdlTWFrZXIsIEVDUywgb3IgRUMyLiBIb3dldmVyLCBjdXN0b21lcnMgd2hvIGhhdmUgdXNlZCBBbWF6b24gRUkgYXQgbGVhc3Qgb25jZSBkdXJpbmcgdGhlIHBhc3QgMzAtZGF5IHBlcmlvZCBhcmUgY29uc2lkZXJlZCBjdXJyZW50IGN1c3RvbWVycyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfRUNTX1NFUlZJQ0Uge1xuLyoqXG4gKiBUaGUgcGxhdGZvcm0gdmVyc2lvbiB0aGF0IHlvdXIgdGFza3MgaW4gdGhlIHNlcnZpY2UgYXJlIHJ1bm5pbmcgb24uIEEgcGxhdGZvcm0gdmVyc2lvbiBpcyBzcGVjaWZpZWQgb25seSBmb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuIElmIG9uZSBpc24ndCBzcGVjaWZpZWQsIHRoZSBgYExBVEVTVGBgIHBsYXRmb3JtIHZlcnNpb24gaXMgdXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbcGxhdGZvcm0gdmVyc2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3BsYXRmb3JtX3ZlcnNpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUGxhdGZvcm1WZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgdGFncyBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gdG8gdGhlIHRhc2suIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIHRhZ3MgYXJlbid0IHByb3BhZ2F0ZWQuIFRhZ3MgY2FuIG9ubHkgYmUgcHJvcGFnYXRlZCB0byB0aGUgdGFzayBkdXJpbmcgdGFzayBjcmVhdGlvbi4gVG8gYWRkIHRhZ3MgdG8gYSB0YXNrIGFmdGVyIHRhc2sgY3JlYXRpb24sIHVzZSB0aGUgW1RhZ1Jlc291cmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1RhZ1Jlc291cmNlLmh0bWwpIEFQSSBhY3Rpb24uXG4gKiAgWW91IG11c3Qgc2V0IHRoaXMgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBgTk9ORWBgIHdoZW4geW91IHVzZSBDb3N0IEV4cGxvcmVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIHVzYWdlIHJlcG9ydHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzYWdlLXJlcG9ydHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBkZWZhdWx0IGlzIGBgTk9ORWBgLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcblNlcnZpY2VBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBsYWNlbWVudCBzdHJhdGVneSBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MgaW4geW91ciBzZXJ2aWNlLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDUgc3RyYXRlZ3kgcnVsZXMgZm9yIGVhY2ggc2VydmljZS5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBQbGFjZW1lbnRTdHJhdGVneWBgIGFycmF5LlxuICovXG5QbGFjZW1lbnRTdHJhdGVnaWVzPzogUGxhY2VtZW50U3RyYXRlZ3lbXVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiB0aGUgc2VydmljZSBkaXNjb3ZlcnkgcmVnaXN0cnkgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIGRpc2NvdmVyeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1kaXNjb3ZlcnkuaHRtbCkuXG4gKiAgIEVhY2ggc2VydmljZSBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIG9uZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBNdWx0aXBsZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgZm9yIGVhY2ggc2VydmljZSBpc24ndCBzdXBwb3J0ZWQuXG4gKiAgICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFNlcnZpY2VSZWdpc3RyeWBgIGFycmF5LlxuICovXG5TZXJ2aWNlUmVnaXN0cmllcz86IFNlcnZpY2VSZWdpc3RyeVtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uYGAgYXJyYXkuXG4gKi9cblZvbHVtZUNvbmZpZ3VyYXRpb25zPzogU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25bXVxuLyoqXG4gKiBUaGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS5cbiAqICBJZiBhIGBgY2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgaXMgc3BlY2lmaWVkLCB0aGUgYGBsYXVuY2hUeXBlYGAgcGFyYW1ldGVyIG11c3QgYmUgb21pdHRlZC4gSWYgbm8gYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBvciBgYGxhdW5jaFR5cGVgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGRlZmF1bHRDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBmb3IgdGhlIGNsdXN0ZXIgaXMgdXNlZC5cbiAqICBBIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBjb250YWluIGEgbWF4aW11bSBvZiAyMCBjYXBhY2l0eSBwcm92aWRlcnMuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbWBgIGFycmF5LlxuICovXG5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbi8qKlxuICogVGhlIGxhdW5jaCB0eXBlIG9uIHdoaWNoIHRvIHJ1biB5b3VyIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgTGF1bmNoIFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIiB8IFwiRVhURVJOQUxcIilcbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIEF2YWlsYWJpbGl0eSBab25lIHJlYmFsYW5jaW5nIGZvciB0aGUgc2VydmljZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCYWxhbmNpbmcgYW4gQW1hem9uIEVDUyBzZXJ2aWNlIGFjcm9zcyBBdmFpbGFiaWxpdHkgWm9uZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtcmViYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5BdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmc/OiAoXCJFTkFCTEVEXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIFRoZSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgVGhlcmUgYXJlIHR3byBzZXJ2aWNlIHNjaGVkdWxlciBzdHJhdGVnaWVzIGF2YWlsYWJsZTpcbiAqICAgKyAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgIGBgREFFTU9OYGAtVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRlcGxveXMgZXhhY3RseSBvbmUgdGFzayBvbiBlYWNoIGFjdGl2ZSBjb250YWluZXIgaW5zdGFuY2UgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIHRoYXQgeW91IHNwZWNpZnkgaW4geW91ciBjbHVzdGVyLiBUaGUgc2VydmljZSBzY2hlZHVsZXIgYWxzbyBldmFsdWF0ZXMgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGZvciBydW5uaW5nIHRhc2tzIGFuZCB3aWxsIHN0b3AgdGFza3MgdGhhdCBkb24ndCBtZWV0IHRoZSBwbGFjZW1lbnQgY29uc3RyYWludHMuIFdoZW4geW91J3JlIHVzaW5nIHRoaXMgc3RyYXRlZ3ksIHlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcywgYSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSwgb3IgdXNlIFNlcnZpY2UgQXV0byBTY2FsaW5nIHBvbGljaWVzLlxuICogICBUYXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSBvciB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMgZG9uJ3Qgc3VwcG9ydCB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LlxuICovXG5TY2hlZHVsaW5nU3RyYXRlZ3k/OiAoXCJEQUVNT05cIiB8IFwiUkVQTElDQVwiKVxuTmV0d29ya0NvbmZpZ3VyYXRpb24/OiBOZXR3b3JrQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gdGhlIHNlcnZpY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuIFdoZW4gYSBzZXJ2aWNlIGlzIGRlbGV0ZWQsIHRoZSB0YWdzIGFyZSBkZWxldGVkIGFzIHdlbGwuXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIFRoZSBwZXJpb2Qgb2YgdGltZSwgaW4gc2Vjb25kcywgdGhhdCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIHVuaGVhbHRoeSBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBWUEMgTGF0dGljZSwgYW5kIGNvbnRhaW5lciBoZWFsdGggY2hlY2tzIGFmdGVyIGEgdGFzayBoYXMgZmlyc3Qgc3RhcnRlZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLiBJZiB5b3UgZG9uJ3QgdXNlIGFueSBvZiB0aGUgaGVhbHRoIGNoZWNrcywgdGhlbiBgYGhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzYGAgaXMgdW51c2VkLlxuICogIElmIHlvdXIgc2VydmljZSdzIHRhc2tzIHRha2UgYSB3aGlsZSB0byBzdGFydCBhbmQgcmVzcG9uZCB0byBoZWFsdGggY2hlY2tzLCB5b3UgY2FuIHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIG9mIHVwIHRvIDIsMTQ3LDQ4Myw2NDcgc2Vjb25kcyAoYWJvdXQgNjkgeWVhcnMpLiBEdXJpbmcgdGhhdCB0aW1lLCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIGhlYWx0aCBjaGVjayBzdGF0dXMuIFRoaXMgZ3JhY2UgcGVyaW9kIGNhbiBwcmV2ZW50IHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBmcm9tIG1hcmtpbmcgdGFza3MgYXMgdW5oZWFsdGh5IGFuZCBzdG9wcGluZyB0aGVtIGJlZm9yZSB0aGV5IGhhdmUgdGltZSB0byBjb21lIHVwLlxuICovXG5IZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB0dXJuIG9uIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzIGZvciB0aGUgdGFza3Mgd2l0aGluIHRoZSBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYWdnaW5nIHlvdXIgQW1hem9uIEVDUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy11c2luZy10YWdzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBXaGVuIHlvdSB1c2UgQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MsIHlvdSBuZWVkIHRvIHNldCB0aGUgYGBwcm9wYWdhdGVUYWdzYGAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKi9cbkVuYWJsZUVDU01hbmFnZWRUYWdzPzogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgdGhlIHNlcnZpY2UuIElmIGBgdHJ1ZWBgLCB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciBhbGwgY29udGFpbmVycyBpbiB0YXNrcyBhcyBwYXJ0IG9mIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGVFeGVjdXRlQ29tbWFuZD86IGJvb2xlYW5cbi8qKlxuICogQW4gYXJyYXkgb2YgcGxhY2VtZW50IGNvbnN0cmFpbnQgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiAxMCBjb25zdHJhaW50cyBmb3IgZWFjaCB0YXNrLiBUaGlzIGxpbWl0IGluY2x1ZGVzIGNvbnN0cmFpbnRzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYW5kIHRob3NlIHNwZWNpZmllZCBhdCBydW50aW1lLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFBsYWNlbWVudENvbnN0cmFpbnRgYCBhcnJheS5cbiAqL1xuUGxhY2VtZW50Q29uc3RyYWludHM/OiBQbGFjZW1lbnRDb25zdHJhaW50W11cbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgY2x1c3RlciB0aGF0IHlvdSBydW4geW91ciBzZXJ2aWNlIG9uLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBjbHVzdGVyLCB0aGUgZGVmYXVsdCBjbHVzdGVyIGlzIGFzc3VtZWQuXG4gKi9cbkNsdXN0ZXI/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIGxvYWQgYmFsYW5jZXIgb2JqZWN0cyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgUm9sZWBgIHByb3BlcnR5LCBgYExvYWRCYWxhbmNlcnNgYCBtdXN0IGJlIHNwZWNpZmllZCBhcyB3ZWxsLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBsb2FkIGJhbGFuY2VycyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgc2VydmljZSwgc2VlIFtTZXJ2aWNlIExvYWQgQmFsYW5jaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWxvYWQtYmFsYW5jaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBMb2FkQmFsYW5jZXJgYCBhcnJheS5cbiAqL1xuTG9hZEJhbGFuY2Vycz86IExvYWRCYWxhbmNlcltdXG5TZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24/OiBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG51bWJlciBvZiBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgZGVmaW5pdGlvbiB0byBwbGFjZSBhbmQga2VlcCBydW5uaW5nIGluIHlvdXIgc2VydmljZS5cbiAqICBGb3IgbmV3IHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHZhbHVlIG9mIGBgMWBgIGlzIHVzZWQuIFdoZW4gdXNpbmcgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneSwgdGhlIGRlc2lyZWQgY291bnQgaXMgbm90IHJlcXVpcmVkLlxuICogIEZvciBleGlzdGluZyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIG9taXR0ZWQgZnJvbSB0aGUgb3BlcmF0aW9uLlxuICovXG5EZXNpcmVkQ291bnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlIGJlaW5nIGNyZWF0ZWQuXG4gKi9cblZwY0xhdHRpY2VDb25maWd1cmF0aW9ucz86IFZwY0xhdHRpY2VDb25maWd1cmF0aW9uW11cbkRlcGxveW1lbnRDb250cm9sbGVyPzogRGVwbG95bWVudENvbnRyb2xsZXJcbi8qKlxuICogVGhlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEVDUyB0byBtYWtlIGNhbGxzIHRvIHlvdXIgbG9hZCBiYWxhbmNlciBvbiB5b3VyIGJlaGFsZi4gVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBwZXJtaXR0ZWQgaWYgeW91IGFyZSB1c2luZyBhIGxvYWQgYmFsYW5jZXIgd2l0aCB5b3VyIHNlcnZpY2UgYW5kIHlvdXIgdGFzayBkZWZpbml0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgcm9sZWBgIHBhcmFtZXRlciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgbG9hZCBiYWxhbmNlciBvYmplY3Qgd2l0aCB0aGUgYGBsb2FkQmFsYW5jZXJzYGAgcGFyYW1ldGVyLlxuICogICBJZiB5b3VyIGFjY291bnQgaGFzIGFscmVhZHkgY3JlYXRlZCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlLCB0aGF0IHJvbGUgaXMgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIHVubGVzcyB5b3Ugc3BlY2lmeSBhIHJvbGUgaGVyZS4gVGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgaXMgcmVxdWlyZWQgaWYgeW91ciB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgb3IgaWYgdGhlIHNlcnZpY2UgaXMgY29uZmlndXJlZCB0byB1c2Ugc2VydmljZSBkaXNjb3ZlcnksIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciwgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcywgb3IgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIGluIHdoaWNoIGNhc2UgeW91IGRvbid0IHNwZWNpZnkgYSByb2xlIGhlcmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIHNlcnZpY2UtbGlua2VkIHJvbGVzIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZy1zZXJ2aWNlLWxpbmtlZC1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc3BlY2lmaWVkIHJvbGUgaGFzIGEgcGF0aCBvdGhlciB0aGFuIGBgL2BgLCB0aGVuIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IHRoZSBmdWxsIHJvbGUgQVJOICh0aGlzIGlzIHJlY29tbWVuZGVkKSBvciBwcmVmaXggdGhlIHJvbGUgbmFtZSB3aXRoIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgYSByb2xlIHdpdGggdGhlIG5hbWUgYGBiYXJgYCBoYXMgYSBwYXRoIG9mIGBgL2Zvby9gYCB0aGVuIHlvdSB3b3VsZCBzcGVjaWZ5IGBgL2Zvby9iYXJgYCBhcyB0aGUgcm9sZSBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGcmllbmRseSBuYW1lcyBhbmQgcGF0aHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1mcmllbmRseS1uYW1lcykgaW4gdGhlICpJQU0gVXNlciBHdWlkZSouXG4gKi9cblJvbGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgZmFtaWx5YGAgYW5kIGBgcmV2aXNpb25gYCAoYGBmYW1pbHk6cmV2aXNpb25gYCkgb3IgZnVsbCBBUk4gb2YgdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBydW4gaW4geW91ciBzZXJ2aWNlLiBJZiBhIGBgcmV2aXNpb25gYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgYGBBQ1RJVkVgYCByZXZpc2lvbiBpcyB1c2VkLlxuICogIEEgdGFzayBkZWZpbml0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBgYEVDU2BgIG9yIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlcGxveW1lbnQgdHlwZXMsIHNlZSBbQW1hem9uIEVDUyBkZXBsb3ltZW50IHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGVzLmh0bWwpLlxuICovXG5UYXNrRGVmaW5pdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gU2VydmljZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBjbHVzdGVyLCBidXQgeW91IGNhbiBoYXZlIHNpbWlsYXJseSBuYW1lZCBzZXJ2aWNlcyBpbiBtdWx0aXBsZSBjbHVzdGVycyB3aXRoaW4gYSBSZWdpb24gb3IgYWNyb3NzIG11bHRpcGxlIFJlZ2lvbnMuXG4gKiAgIFRoZSBzdGFjayB1cGRhdGUgZmFpbHMgaWYgeW91IGNoYW5nZSBhbnkgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgcmVwbGFjZW1lbnQgYW5kIHRoZSBgYFNlcnZpY2VOYW1lYGAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VOYW1lYGAgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNsdXN0ZXIuXG4gKi9cblNlcnZpY2VOYW1lPzogc3RyaW5nXG5EZXBsb3ltZW50Q29uZmlndXJhdGlvbj86IERlcGxveW1lbnRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSBmb3IgYSB0YXNrIG9yIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IHN0cmF0ZWdpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LXN0cmF0ZWdpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudFN0cmF0ZWd5IHtcbi8qKlxuICogVGhlIGZpZWxkIHRvIGFwcGx5IHRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgYWdhaW5zdC4gRm9yIHRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGluc3RhbmNlSWRgYCAob3IgYGBob3N0YGAsIHdoaWNoIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBhbnkgcGxhdGZvcm0gb3IgY3VzdG9tIGF0dHJpYnV0ZSB0aGF0J3MgYXBwbGllZCB0byBhIGNvbnRhaW5lciBpbnN0YW5jZSwgc3VjaCBhcyBgYGF0dHJpYnV0ZTplY3MuYXZhaWxhYmlsaXR5LXpvbmVgYC4gRm9yIHRoZSBgYGJpbnBhY2tgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBjcHVgYCBhbmQgYGBtZW1vcnlgYC4gRm9yIHRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSwgdGhpcyBmaWVsZCBpcyBub3QgdXNlZC5cbiAqL1xuRmllbGQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgcGxhY2VtZW50IHN0cmF0ZWd5LiBUaGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3kgcmFuZG9tbHkgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzLiBUaGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3kgc3ByZWFkcyBwbGFjZW1lbnQgYWNyb3NzIGF2YWlsYWJsZSBjYW5kaWRhdGVzIGV2ZW5seSBiYXNlZCBvbiB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gVGhlIGBgYmlucGFja2BgIHN0cmF0ZWd5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcyB0aGF0IGhhdmUgdGhlIGxlYXN0IGF2YWlsYWJsZSBhbW91bnQgb2YgdGhlIHJlc291cmNlIHRoYXQncyBzcGVjaWZpZWQgd2l0aCB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsIGlmIHlvdSBiaW5wYWNrIG9uIG1lbW9yeSwgYSB0YXNrIGlzIHBsYWNlZCBvbiB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHJlbWFpbmluZyBtZW1vcnkgYnV0IHN0aWxsIGVub3VnaCB0byBydW4gdGhlIHRhc2suXG4gKi9cblR5cGU6IChcImJpbnBhY2tcIiB8IFwicmFuZG9tXCIgfCBcInNwcmVhZFwiKVxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBmb3IgdGhlIHNlcnZpY2UgcmVnaXN0cnkuXG4gKiAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogIFdoZW4geW91IGFkZCwgdXBkYXRlLCBvciByZW1vdmUgdGhlIHNlcnZpY2UgcmVnaXN0cmllcyBjb25maWd1cmF0aW9uLCBBbWF6b24gRUNTIHN0YXJ0cyBhIG5ldyBkZXBsb3ltZW50LiBOZXcgdGFza3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGRlcmVnaXN0ZXJlZCB0byB0aGUgdXBkYXRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVJlZ2lzdHJ5IHtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBuYW1lIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdXNlZCBpZiB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2Ugc3BlY2lmaWVkIGFuIFNSViByZWNvcmQuIFRoaXMgZmllbGQgbWlnaHQgYmUgdXNlZCBpZiBib3RoIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgU1JWIHJlY29yZHMgYXJlIHVzZWQuXG4gKi9cblBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSByZWdpc3RyeS4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgc2VydmljZSByZWdpc3RyeSBpcyBDTUFQLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGVTZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbCkuXG4gKi9cblJlZ2lzdHJ5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uIHtcbk1hbmFnZWRFQlNWb2x1bWU/OiBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVGhpcyB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgbmFtZSBmcm9tIHRoZSBgYFZvbHVtZWBgIG9iamVjdCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBbWF6b24gRUJTIHZvbHVtZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBhbmQgbWFuYWdlcyBvbiB5b3VyIGJlaGFsZi4gVGhlc2Ugc2V0dGluZ3MgYXJlIHVzZWQgdG8gY3JlYXRlIGVhY2ggQW1hem9uIEVCUyB2b2x1bWUsIHdpdGggb25lIHZvbHVtZSBjcmVhdGVkIGZvciBlYWNoIHRhc2sgaW4gdGhlIHNlcnZpY2UuIFRoZSBBbWF6b24gRUJTIHZvbHVtZXMgYXJlIHZpc2libGUgaW4geW91ciBhY2NvdW50IGluIHRoZSBBbWF6b24gRUMyIGNvbnNvbGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzbmFwc2hvdCB0aGF0IEFtYXpvbiBFQ1MgdXNlcyB0byBjcmVhdGUgdm9sdW1lcyBmb3IgYXR0YWNobWVudCB0byB0YXNrcyBtYWludGFpbmVkIGJ5IHRoZSBzZXJ2aWNlLiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBgYHNuYXBzaG90SWRgYCBvciBgYHNpemVJbkdpQmBgIGluIHlvdXIgdm9sdW1lIGNvbmZpZ3VyYXRpb24uIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU25hcHNob3RJZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuU25hcHNob3RJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdm9sdW1lIHR5cGUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVm9sdW1lVHlwZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVCUyB2b2x1bWUgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSB0eXBlcy5cbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIFNTRDogYGBncDJgYHxgYGdwM2BgXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgU1NEOiBgYGlvMWBgfGBgaW8yYGBcbiAqICAgKyAgVGhyb3VnaHB1dCBPcHRpbWl6ZWQgSEREOiBgYHN0MWBgXG4gKiAgICsgIENvbGQgSEREOiBgYHNjMWBgXG4gKiAgICsgIE1hZ25ldGljOiBgYHN0YW5kYXJkYGBcbiAqICAgVGhlIG1hZ25ldGljIHZvbHVtZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgb24gRmFyZ2F0ZS5cbiAqL1xuVm9sdW1lVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgaWRlbnRpZmllciBvZiB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IHRvIHVzZSBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uLiBXaGVuIGEga2V5IGlzIHNwZWNpZmllZCB1c2luZyB0aGlzIHBhcmFtZXRlciwgaXQgb3ZlcnJpZGVzIEFtYXpvbiBFQlMgZGVmYXVsdCBlbmNyeXB0aW9uIG9yIGFueSBLTVMga2V5IHRoYXQgeW91IHNwZWNpZmllZCBmb3IgY2x1c3Rlci1sZXZlbCBtYW5hZ2VkIHN0b3JhZ2UgZW5jcnlwdGlvbi4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBLbXNLZXlJZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZW5jcnlwdGluZyBBbWF6b24gRUJTIHZvbHVtZXMgYXR0YWNoZWQgdG8gdGFza3MsIHNlZSBbRW5jcnlwdCBkYXRhIHN0b3JlZCBpbiBBbWF6b24gRUJTIHZvbHVtZXMgYXR0YWNoZWQgdG8gQW1hem9uIEVDUyB0YXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWJzLWttcy1lbmNyeXB0aW9uLmh0bWwpLlxuICogICBBV1MgYXV0aGVudGljYXRlcyB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IGFzeW5jaHJvbm91c2x5LiBUaGVyZWZvcmUsIGlmIHlvdSBzcGVjaWZ5IGFuIElELCBhbGlhcywgb3IgQVJOIHRoYXQgaXMgaW52YWxpZCwgdGhlIGFjdGlvbiBjYW4gYXBwZWFyIHRvIGNvbXBsZXRlLCBidXQgZXZlbnR1YWxseSBmYWlscy5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIHZvbHVtZS4gQW1hem9uIEVDUyBhcHBsaWVzIHNlcnZpY2UtbWFuYWdlZCB0YWdzIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVGFnU3BlY2lmaWNhdGlvbnMuTmBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuVGFnU3BlY2lmaWNhdGlvbnM/OiBFQlNUYWdTcGVjaWZpY2F0aW9uW11cbi8qKlxuICogVGhlIGZpbGVzeXN0ZW0gdHlwZSBmb3IgdGhlIHZvbHVtZS4gRm9yIHZvbHVtZXMgY3JlYXRlZCBmcm9tIGEgc25hcHNob3QsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHNhbWUgZmlsZXN5c3RlbSB0eXBlIHRoYXQgdGhlIHZvbHVtZSB3YXMgdXNpbmcgd2hlbiB0aGUgc25hcHNob3Qgd2FzIGNyZWF0ZWQuIElmIHRoZXJlIGlzIGEgZmlsZXN5c3RlbSB0eXBlIG1pc21hdGNoLCB0aGUgdGFza3Mgd2lsbCBmYWlsIHRvIHN0YXJ0LlxuICogIFRoZSBhdmFpbGFibGUgTGludXggZmlsZXN5c3RlbSB0eXBlcyBhcmXigKggYGBleHQzYGAsIGBgZXh0NGBgLCBhbmQgYGB4ZnNgYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgYGB4ZnNgYCBmaWxlc3lzdGVtIHR5cGUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogIFRoZSBhdmFpbGFibGUgV2luZG93cyBmaWxlc3lzdGVtIHR5cGVzIGFyZSBgYE5URlNgYC5cbiAqL1xuRmlsZXN5c3RlbVR5cGU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZvbHVtZSBzaG91bGQgYmUgZW5jcnlwdGVkLiBJZiB5b3UgdHVybiBvbiBSZWdpb24tbGV2ZWwgQW1hem9uIEVCUyBlbmNyeXB0aW9uIGJ5IGRlZmF1bHQgYnV0IHNldCB0aGlzIHZhbHVlIGFzIGBgZmFsc2VgYCwgdGhlIHNldHRpbmcgaXMgb3ZlcnJpZGRlbiBhbmQgdGhlIHZvbHVtZSBpcyBlbmNyeXB0ZWQgd2l0aCB0aGUgS01TIGtleSBzcGVjaWZpZWQgZm9yIEFtYXpvbiBFQlMgZW5jcnlwdGlvbiBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEVuY3J5cHRlZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuRW5jcnlwdGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgdGhyb3VnaHB1dCB0byBwcm92aXNpb24gZm9yIGEgdm9sdW1lLCBpbiBNaUIvcywgd2l0aCBhIG1heGltdW0gb2YgMSwwMDAgTWlCL3MuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVGhyb3VnaHB1dGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSBgYGdwM2BgIHZvbHVtZSB0eXBlLlxuICovXG5UaHJvdWdocHV0PzogbnVtYmVyXG4vKipcbiAqIFRoZSByYXRlLCBpbiBNaUIvcywgYXQgd2hpY2ggZGF0YSBpcyBmZXRjaGVkIGZyb20gYSBzbmFwc2hvdCBvZiBhbiBleGlzdGluZyBFQlMgdm9sdW1lIHRvIGNyZWF0ZSBuZXcgdm9sdW1lcyBmb3IgYXR0YWNobWVudCB0byB0aGUgdGFza3MgbWFpbnRhaW5lZCBieSB0aGUgc2VydmljZS4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc3BlY2lmaWVkIG9ubHkgaWYgeW91IHNwZWNpZnkgYSBgYHNuYXBzaG90SWRgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSW5pdGlhbGl6ZSBBbWF6b24gRUJTIHZvbHVtZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9pbml0YWxpemUtdm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVCUyBVc2VyIEd1aWRlKi5cbiAqL1xuVm9sdW1lSW5pdGlhbGl6YXRpb25SYXRlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgSS9PIG9wZXJhdGlvbnMgcGVyIHNlY29uZCAoSU9QUykuIEZvciBgYGdwM2BgLCBgYGlvMWBgLCBhbmQgYGBpbzJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBJT1BTIHRoYXQgYXJlIHByb3Zpc2lvbmVkIGZvciB0aGUgdm9sdW1lLiBGb3IgYGBncDJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIGJhc2VsaW5lIHBlcmZvcm1hbmNlIG9mIHRoZSB2b2x1bWUgYW5kIHRoZSByYXRlIGF0IHdoaWNoIHRoZSB2b2x1bWUgYWNjdW11bGF0ZXMgSS9PIGNyZWRpdHMgZm9yIGJ1cnN0aW5nLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICBgYGdwM2BgOiAzLDAwMCAtIDE2LDAwMCBJT1BTXG4gKiAgICsgIGBgaW8xYGA6IDEwMCAtIDY0LDAwMCBJT1BTXG4gKiAgICsgIGBgaW8yYGA6IDEwMCAtIDI1NiwwMDAgSU9QU1xuICogICBcbiAqICBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgYGBpbzFgYCBhbmQgYGBpbzJgYCB2b2x1bWUgdHlwZXMuIFRoZSBkZWZhdWx0IGZvciBgYGdwM2BgIHZvbHVtZXMgaXMgYGAzLDAwMCBJT1BTYGAuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGBgc3QxYGAsIGBgc2MxYGAsIG9yIGBgc3RhbmRhcmRgYCB2b2x1bWUgdHlwZXMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5Jb3BzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBzaXplIG9mIHRoZSB2b2x1bWUgaW4gR2lCLiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIHZvbHVtZSBzaXplIG9yIGEgc25hcHNob3QgSUQuIElmIHlvdSBzcGVjaWZ5IGEgc25hcHNob3QgSUQsIHRoZSBzbmFwc2hvdCBzaXplIGlzIHVzZWQgZm9yIHRoZSB2b2x1bWUgc2l6ZSBieSBkZWZhdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIHZvbHVtZSBzaXplIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc25hcHNob3Qgc2l6ZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTaXplYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHNpemUgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICBgYGdwMmBgIGFuZCBgYGdwM2BgOiAxLTE2LDM4NFxuICogICArICBgYGlvMWBgIGFuZCBgYGlvMmBgOiA0LTE2LDM4NFxuICogICArICBgYHN0MWBgIGFuZCBgYHNjMWBgOiAxMjUtMTYsMzg0XG4gKiAgICsgIGBgc3RhbmRhcmRgYDogMS0xLDAyNFxuICovXG5TaXplSW5HaUI/OiBudW1iZXJcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyB2b2x1bWUuIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1MgaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIEFXUyBpbmZyYXN0cnVjdHVyZS4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBBbWF6b24gRUNTLW1hbmFnZWQgYGBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWb2x1bWVzYGAgSUFNIHBvbGljeSB3aXRoIHRoaXMgcm9sZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaW5mcmFzdHJ1Y3R1cmVfSUFNX3JvbGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUNTIERldmVsb3BlciBHdWlkZSouXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgdGFnIHNwZWNpZmljYXRpb25zIG9mIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVCU1RhZ1NwZWNpZmljYXRpb24ge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSB0YWdzIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byDigKh0aGUgQW1hem9uIEVCUyB2b2x1bWUuIFRhZ3MgY2FuIG9ubHkgcHJvcGFnYXRlIHRvIGEgYGBTRVJWSUNFYGAgc3BlY2lmaWVkIGluIOKAqGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgdGFncyBhcmVuJ3Qg4oCocHJvcGFnYXRlZC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG4vKipcbiAqIFRoZSB0eXBlIG9mIHZvbHVtZSByZXNvdXJjZS5cbiAqL1xuUmVzb3VyY2VUeXBlOiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZ3MgYXBwbGllZCB0byB0aGlzIEFtYXpvbiBFQlMgdm9sdW1lLiBgYEFtYXpvbkVDU0NyZWF0ZWRgYCBhbmQgYGBBbWF6b25FQ1NNYW5hZ2VkYGAgYXJlIHJlc2VydmVkIHRhZ3MgdGhhdCBjYW4ndCBiZSB1c2VkLlxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogVGhlIG1ldGFkYXRhIHRoYXQgeW91IGFwcGx5IHRvIGEgcmVzb3VyY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLiBZb3UgZGVmaW5lIHRoZW0uXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqICAgXG4gKiAgSW4gb3JkZXIgdG8gdGFnIGEgc2VydmljZSB0aGF0IGhhcyB0aGUgZm9sbG93aW5nIEFSTiBmb3JtYXQsIHlvdSBuZWVkIHRvIG1pZ3JhdGUgdGhlIHNlcnZpY2UgdG8gdGhlIGxvbmcgQVJOLiBZb3UgbXVzdCB1c2UgdGhlIEFQSSwgQ0xJIG9yIGNvbnNvbGUgdG8gbWlncmF0ZSB0aGUgc2VydmljZSBBUk4uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01pZ3JhdGUgYW4gc2hvcnQgc2VydmljZSBBUk4gdG8gYSBsb25nIEFSTl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1hcm4tbWlncmF0aW9uLmh0bWwpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgYGBhcm46YXdzOmVjczpyZWdpb246YXdzX2FjY291bnRfaWQ6c2VydmljZS9zZXJ2aWNlLW5hbWVgYCBcbiAqICBBZnRlciB0aGUgbWlncmF0aW9uIGlzIGNvbXBsZXRlLCB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOlxuICogICArICAgVGhlIHNlcnZpY2UgQVJOIGlzOiBgYGFybjphd3M6ZWNzOnJlZ2lvbjphd3NfYWNjb3VudF9pZDpzZXJ2aWNlL2NsdXN0ZXItbmFtZS9zZXJ2aWNlLW5hbWVgYFxuICogICArICBZb3UgY2FuIHVzZSBDRk4gdG8gdGFnIHRoZSBzZXJ2aWNlIGFzIHlvdSB3b3VsZCBhIHNlcnZpY2Ugd2l0aCBhIGxvbmcgQVJOIGZvcm1hdC5cbiAqICAgKyAgV2hlbiB0aGUgYGBQaHlzaWNhbFJlc291cmNlSWRgYCBpbiB0aGUgQ0ZOIHN0YWNrIHJlcHJlc2VudHMgYSBzZXJ2aWNlLCB0aGUgdmFsdWUgZG9lcyBub3QgY2hhbmdlIGFuZCB3aWxsIGJlIHRoZSBzaG9ydCBzZXJ2aWNlIEFSTi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUgb3B0aW9uYWwgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYHZhbHVlYGAgYWN0cyBhcyBhIGRlc2NyaXB0b3Igd2l0aGluIGEgdGFnIGNhdGVnb3J5IChrZXkpLlxuICovXG5WYWx1ZT86IHN0cmluZ1xuLyoqXG4gKiBPbmUgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYGtleWBgIGlzIGEgZ2VuZXJhbCBsYWJlbCB0aGF0IGFjdHMgbGlrZSBhIGNhdGVnb3J5IGZvciBtb3JlIHNwZWNpZmljIHRhZyB2YWx1ZXMuXG4gKi9cbktleT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LiBBIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBiZSBzZXQgd2hlbiB1c2luZyB0aGUgYGBSdW5UYXNrYGAgb3IgYGBDcmVhdGVTZXJ2aWNlYGAgQVBJcyBvciBhcyB0aGUgZGVmYXVsdCBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBmb3IgYSBjbHVzdGVyIHdpdGggdGhlIGBgQ3JlYXRlQ2x1c3RlcmBgIEFQSS5cbiAqICBPbmx5IGNhcGFjaXR5IHByb3ZpZGVycyB0aGF0IGFyZSBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgYW5kIGhhdmUgYW4gYGBBQ1RJVkVgYCBvciBgYFVQREFUSU5HYGAgc3RhdHVzIGNhbiBiZSB1c2VkIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIFRoZSBgYFB1dENsdXN0ZXJDYXBhY2l0eVByb3ZpZGVyc2BgIEFQSSBpcyB1c2VkIHRvIGFzc29jaWF0ZSBhIGNhcGFjaXR5IHByb3ZpZGVyIHdpdGggYSBjbHVzdGVyLlxuICogIElmIHNwZWNpZnlpbmcgYSBjYXBhY2l0eSBwcm92aWRlciB0aGF0IHVzZXMgYW4gQXV0byBTY2FsaW5nIGdyb3VwLCB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgbXVzdCBhbHJlYWR5IGJlIGNyZWF0ZWQuIE5ldyBBdXRvIFNjYWxpbmcgZ3JvdXAgY2FwYWNpdHkgcHJvdmlkZXJzIGNhbiBiZSBjcmVhdGVkIHdpdGggdGhlIGBgQ3JlYXRlQ2FwYWNpdHlQcm92aWRlcmBgIEFQSSBvcGVyYXRpb24uXG4gKiAgVG8gdXNlIGFuIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVyLCBzcGVjaWZ5IGVpdGhlciB0aGUgYGBGQVJHQVRFYGAgb3IgYGBGQVJHQVRFX1NQT1RgYCBjYXBhY2l0eSBwcm92aWRlcnMuIFRoZSBGQVJHQVRFbG9uZyBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSB0byBhbGwgYWNjb3VudHMgYW5kIG9ubHkgbmVlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBjbHVzdGVyIHRvIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtIHtcbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb2YgdGhlIGNhcGFjaXR5IHByb3ZpZGVyLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSAqYmFzZSogdmFsdWUgZGVzaWduYXRlcyBob3cgbWFueSB0YXNrcywgYXQgYSBtaW5pbXVtLCB0byBydW4gb24gdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBwcm92aWRlci4gT25seSBvbmUgY2FwYWNpdHkgcHJvdmlkZXIgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gaGF2ZSBhICpiYXNlKiBkZWZpbmVkLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuXG4gKi9cbkJhc2U/OiBudW1iZXJcbi8qKlxuICogVGhlICp3ZWlnaHQqIHZhbHVlIGRlc2lnbmF0ZXMgdGhlIHJlbGF0aXZlIHBlcmNlbnRhZ2Ugb2YgdGhlIHRvdGFsIG51bWJlciBvZiB0YXNrcyBsYXVuY2hlZCB0aGF0IHNob3VsZCB1c2UgdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBwcm92aWRlci4gVGhlIGBgd2VpZ2h0YGAgdmFsdWUgaXMgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGFmdGVyIHRoZSBgYGJhc2VgYCB2YWx1ZSwgaWYgZGVmaW5lZCwgaXMgc2F0aXNmaWVkLlxuICogIElmIG5vIGBgd2VpZ2h0YGAgdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLiBXaGVuIG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgc3BlY2lmaWVkIHdpdGhpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LCBhdCBsZWFzdCBvbmUgb2YgdGhlIGNhcGFjaXR5IHByb3ZpZGVycyBtdXN0IGhhdmUgYSB3ZWlnaHQgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGFueSBjYXBhY2l0eSBwcm92aWRlcnMgd2l0aCBhIHdlaWdodCBvZiBgYDBgYCBjYW4ndCBiZSB1c2VkIHRvIHBsYWNlIHRhc2tzLiBJZiB5b3Ugc3BlY2lmeSBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgaW4gYSBzdHJhdGVneSB0aGF0IGFsbCBoYXZlIGEgd2VpZ2h0IG9mIGBgMGBgLCBhbnkgYGBSdW5UYXNrYGAgb3IgYGBDcmVhdGVTZXJ2aWNlYGAgYWN0aW9ucyB1c2luZyB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgd2lsbCBmYWlsLlxuICogIEFuIGV4YW1wbGUgc2NlbmFyaW8gZm9yIHVzaW5nIHdlaWdodHMgaXMgZGVmaW5pbmcgYSBzdHJhdGVneSB0aGF0IGNvbnRhaW5zIHR3byBjYXBhY2l0eSBwcm92aWRlcnMgYW5kIGJvdGggaGF2ZSBhIHdlaWdodCBvZiBgYDFgYCwgdGhlbiB3aGVuIHRoZSBgYGJhc2VgYCBpcyBzYXRpc2ZpZWQsIHRoZSB0YXNrcyB3aWxsIGJlIHNwbGl0IGV2ZW5seSBhY3Jvc3MgdGhlIHR3byBjYXBhY2l0eSBwcm92aWRlcnMuIFVzaW5nIHRoYXQgc2FtZSBsb2dpYywgaWYgeW91IHNwZWNpZnkgYSB3ZWlnaHQgb2YgYGAxYGAgZm9yICpjYXBhY2l0eVByb3ZpZGVyQSogYW5kIGEgd2VpZ2h0IG9mIGBgNGBgIGZvciAqY2FwYWNpdHlQcm92aWRlckIqLCB0aGVuIGZvciBldmVyeSBvbmUgdGFzayB0aGF0J3MgcnVuIHVzaW5nICpjYXBhY2l0eVByb3ZpZGVyQSosIGZvdXIgdGFza3Mgd291bGQgdXNlICpjYXBhY2l0eVByb3ZpZGVyQiouXG4gKi9cbldlaWdodD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZS4gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIHRhc2sgZGVmaW5pdGlvbnMgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIHRvIHJlY2VpdmUgdGhlaXIgb3duIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBpdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBvdGhlciBuZXR3b3JrIG1vZGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIE5ldHdvcmtpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stbmV0d29ya2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0NvbmZpZ3VyYXRpb24ge1xuQXdzdnBjQ29uZmlndXJhdGlvbj86IEF3c1ZwY0NvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIFZQQyBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgdGFzay5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NWcGNDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIElEcyBvZiB0aGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNlY3VyaXR5IGdyb3VwLCB0aGUgZGVmYXVsdCBzZWN1cml0eSBncm91cCBmb3IgdGhlIFZQQyBpcyB1c2VkLiBUaGVyZSdzIGEgbGltaXQgb2YgNSBzZWN1cml0eSBncm91cHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkLlxuICogICBBbGwgc3BlY2lmaWVkIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHN1Ym5ldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIFRoZXJlJ3MgYSBsaW1pdCBvZiAxNiBzdWJuZXRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZC5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblN1Ym5ldHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHRoZSB0YXNrJ3MgZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSByZWNlaXZlcyBhIHB1YmxpYyBJUCBhZGRyZXNzLiBcbiAqICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHdoZW4geW91IHNldCB0aGlzIHZhbHVlOlxuICogICArICBXaGVuIHlvdSB1c2UgYGBjcmVhdGUtc2VydmljZWBgIG9yIGBgdXBkYXRlLXNlcnZpY2VgYCwgdGhlIGRlZmF1bHQgaXMgYGBESVNBQkxFRGBgLiBcbiAqICAgKyAgV2hlbiB0aGUgc2VydmljZSBgYGRlcGxveW1lbnRDb250cm9sbGVyYGAgaXMgYGBFQ1NgYCwgdGhlIHZhbHVlIG11c3QgYmUgYGBESVNBQkxFRGBgLlxuICovXG5Bc3NpZ25QdWJsaWNJcD86IChcIkRJU0FCTEVEXCIgfCBcIkVOQUJMRURcIilcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbnN0cmFpbnQgb24gdGFzayBwbGFjZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLXBsYWNlbWVudC1jb25zdHJhaW50cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdSdyZSB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgYXJlbid0IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRDb25zdHJhaW50IHtcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uc3RyYWludC4gVXNlIGBgZGlzdGluY3RJbnN0YW5jZWBgIHRvIGVuc3VyZSB0aGF0IGVhY2ggdGFzayBpbiBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgcnVubmluZyBvbiBhIGRpZmZlcmVudCBjb250YWluZXIgaW5zdGFuY2UuIFVzZSBgYG1lbWJlck9mYGAgdG8gcmVzdHJpY3QgdGhlIHNlbGVjdGlvbiB0byBhIGdyb3VwIG9mIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblR5cGU6IChcImRpc3RpbmN0SW5zdGFuY2VcIiB8IFwibWVtYmVyT2ZcIilcbi8qKlxuICogQSBjbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlIGV4cHJlc3Npb24gdG8gYXBwbHkgdG8gdGhlIGNvbnN0cmFpbnQuIFRoZSBleHByZXNzaW9uIGNhbiBoYXZlIGEgbWF4aW11bSBsZW5ndGggb2YgMjAwMCBjaGFyYWN0ZXJzLiBZb3UgY2FuJ3Qgc3BlY2lmeSBhbiBleHByZXNzaW9uIGlmIHRoZSBjb25zdHJhaW50IHR5cGUgaXMgYGBkaXN0aW5jdEluc3RhbmNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NsdXN0ZXItcXVlcnktbGFuZ3VhZ2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5FeHByZXNzaW9uPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYExvYWRCYWxhbmNlcmBgIHByb3BlcnR5IHNwZWNpZmllcyBkZXRhaWxzIG9uIGEgbG9hZCBiYWxhbmNlciB0aGF0IGlzIHVzZWQgd2l0aCBhIHNlcnZpY2UuXG4gKiAgSWYgdGhlIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHRoZSBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRvIHVzZSBlaXRoZXIgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFdoZW4geW91IGFyZSBjcmVhdGluZyBhbiBBQ0Rsb25nIGRlcGxveW1lbnQgZ3JvdXAsIHlvdSBzcGVjaWZ5IHR3byB0YXJnZXQgZ3JvdXBzIChyZWZlcnJlZCB0byBhcyBhIGBgdGFyZ2V0R3JvdXBQYWlyYGApLiBFYWNoIHRhcmdldCBncm91cCBiaW5kcyB0byBhIHNlcGFyYXRlIHRhc2sgc2V0IGluIHRoZSBkZXBsb3ltZW50LiBUaGUgbG9hZCBiYWxhbmNlciBjYW4gYWxzbyBoYXZlIHVwIHRvIHR3byBsaXN0ZW5lcnMsIGEgcmVxdWlyZWQgbGlzdGVuZXIgZm9yIHByb2R1Y3Rpb24gdHJhZmZpYyBhbmQgYW4gb3B0aW9uYWwgbGlzdGVuZXIgdGhhdCBhbGxvd3MgeW91IHRvIHRlc3QgbmV3IHJldmlzaW9ucyBvZiB0aGUgc2VydmljZSBiZWZvcmUgcm91dGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuXG4gKiAgU2VydmljZXMgd2l0aCB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgKGZvciBleGFtcGxlLCB0aG9zZSB3aXRoIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlKSBvbmx5IHN1cHBvcnQgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMgYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnMuIENsYXNzaWMgTG9hZCBCYWxhbmNlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIEFsc28sIHdoZW4geW91IGNyZWF0ZSBhbnkgdGFyZ2V0IGdyb3VwcyBmb3IgdGhlc2Ugc2VydmljZXMsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBUYXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXIge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgQSB0YXJnZXQgZ3JvdXAgQVJOIGlzIG9ubHkgc3BlY2lmaWVkIHdoZW4gdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBFQ1NgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb3IgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVnaXN0ZXJpbmcgbXVsdGlwbGUgdGFyZ2V0IGdyb3VwcyB3aXRoIGEgc2VydmljZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcmVnaXN0ZXItbXVsdGlwbGUtdGFyZ2V0Z3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSdyZSByZXF1aXJlZCB0byBkZWZpbmUgdHdvIHRhcmdldCBncm91cHMgZm9yIHRoZSBsb2FkIGJhbGFuY2VyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCbHVlL2dyZWVuIGRlcGxveW1lbnQgd2l0aCBDb2RlRGVwbG95XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtYmx1ZWdyZWVuLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gRG8gdGhpcyB3aGVuIGNyZWF0aW5nIHlvdXIgdGFyZ2V0IGdyb3VwcyBiZWNhdXNlIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLiBUaGlzIG5ldHdvcmsgbW9kZSBpcyByZXF1aXJlZCBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuXG4gKi9cblRhcmdldEdyb3VwQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgSWYgeW91IGFyZSB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIGEgTmV0d29yayBMb2FkIEJhbGFuY2VyIHRoZSBsb2FkIGJhbGFuY2VyIG5hbWUgcGFyYW1ldGVyIHNob3VsZCBiZSBvbWl0dGVkLlxuICovXG5Mb2FkQmFsYW5jZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgKGFzIGl0IGFwcGVhcnMgaW4gYSBjb250YWluZXIgZGVmaW5pdGlvbikgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gKiAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udGFpbmVyIG5hbWUgd2hlbiBjb25maWd1cmluZyB0aGUgdGFyZ2V0IGdyb3VwIGZvciBhbiBBbWF6b24gRUNTIGxvYWQgYmFsYW5jZXIuXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgb24gdGhlIGNvbnRhaW5lciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci4gVGhpcyBwb3J0IG11c3QgY29ycmVzcG9uZCB0byBhIGBgY29udGFpbmVyUG9ydGBgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSB1c2luZy4gRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdGhleSdyZSBsYXVuY2hlZCBvbiBtdXN0IGFsbG93IGluZ3Jlc3MgdHJhZmZpYyBvbiB0aGUgYGBob3N0UG9ydGBgIG9mIHRoZSBwb3J0IG1hcHBpbmcuXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc2VydmljZSB0byBkaXNjb3ZlciBhbmQgY29ubmVjdCB0byBzZXJ2aWNlcywgYW5kIGJlIGRpc2NvdmVyZWQgYnksIGFuZCBjb25uZWN0ZWQgZnJvbSwgb3RoZXIgc2VydmljZXMgd2l0aGluIGEgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgbGlzdCBvZiBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3RzLiBUaGVzZSBhcmUgbmFtZXMgYW5kIGFsaWFzZXMgKGFsc28ga25vd24gYXMgZW5kcG9pbnRzKSB0aGF0IGFyZSB1c2VkIGJ5IG90aGVyIEFtYXpvbiBFQ1Mgc2VydmljZXMgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFxuICogIFRoaXMgZmllbGQgaXMgbm90IHJlcXVpcmVkIGZvciBhIFwiY2xpZW50XCIgQW1hem9uIEVDUyBzZXJ2aWNlIHRoYXQncyBhIG1lbWJlciBvZiBhIG5hbWVzcGFjZSBvbmx5IHRvIGNvbm5lY3QgdG8gb3RoZXIgc2VydmljZXMgd2l0aGluIHRoZSBuYW1lc3BhY2UuIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSBhIGZyb250ZW5kIGFwcGxpY2F0aW9uIHRoYXQgYWNjZXB0cyBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIGVpdGhlciBhIGxvYWQgYmFsYW5jZXIgdGhhdCdzIGF0dGFjaGVkIHRvIHRoZSBzZXJ2aWNlIG9yIGJ5IG90aGVyIG1lYW5zLlxuICogIEFuIG9iamVjdCBzZWxlY3RzIGEgcG9ydCBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24sIGFzc2lnbnMgYSBuYW1lIGZvciB0aGUgQ01BUGxvbmcgc2VydmljZSwgYW5kIGEgbGlzdCBvZiBhbGlhc2VzIChlbmRwb2ludHMpIGFuZCBwb3J0cyBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byByZWZlciB0byB0aGlzIHNlcnZpY2UuXG4gKi9cblNlcnZpY2VzPzogU2VydmljZUNvbm5lY3RTZXJ2aWNlW11cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIFNlcnZpY2UgQ29ubmVjdCB3aXRoIHRoaXMgc2VydmljZS5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuTG9nQ29uZmlndXJhdGlvbj86IExvZ0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWVzcGFjZSBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIENNQVBsb25nIG5hbWVzcGFjZSBmb3IgdXNlIHdpdGggU2VydmljZSBDb25uZWN0LiBUaGUgbmFtZXNwYWNlIG11c3QgYmUgaW4gdGhlIHNhbWUgQVdTIFJlZ2lvbiBhcyB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIGFuZCBjbHVzdGVyLiBUaGUgdHlwZSBvZiBuYW1lc3BhY2UgZG9lc24ndCBhZmZlY3QgU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDTUFQbG9uZywgc2VlIFtXb3JraW5nIHdpdGggU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2RnL3dvcmtpbmctd2l0aC1zZXJ2aWNlcy5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKi9cbk5hbWVzcGFjZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0IGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFNlcnZpY2Uge1xuVGltZW91dD86IFRpbWVvdXRDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eSB0byBsaXN0ZW4gb24uXG4gKiAgVXNlIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIHRvIGJ5cGFzcyB0aGUgcHJveHkgZm9yIHRyYWZmaWMgb24gdGhlIHBvcnQgbnVtYmVyIHNwZWNpZmllZCBpbiB0aGUgbmFtZWQgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBhcHBsaWNhdGlvbiwgYW5kIHRoZW4gdXNlIGl0IGluIHlvdXIgVlBDIHNlY3VyaXR5IGdyb3VwcyB0byBhbGxvdyB0cmFmZmljIGludG8gdGhlIHByb3h5IGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqICBJbiBgYGF3c3ZwY2BgIG1vZGUgYW5kIEZhcmdhdGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBjb250YWluZXIgcG9ydCBudW1iZXIuIFRoZSBjb250YWluZXIgcG9ydCBudW1iZXIgaXMgaW4gdGhlIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJbiBicmlkZ2UgbW9kZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGVwaGVtZXJhbCBwb3J0IG9mIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuXG4gKi9cbkluZ3Jlc3NQb3J0T3ZlcnJpZGU/OiBudW1iZXJcbi8qKlxuICogVGhlIGxpc3Qgb2YgY2xpZW50IGFsaWFzZXMgZm9yIHRoaXMgU2VydmljZSBDb25uZWN0IHNlcnZpY2UuIFlvdSB1c2UgdGhlc2UgdG8gYXNzaWduIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucy4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNsaWVudCBhbGlhc2VzIHRoYXQgeW91IGNhbiBoYXZlIGluIHRoaXMgbGlzdCBpcyAxLlxuICogIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciBBbWF6b24gRUNTIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBGb3IgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgLCB5b3UgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBgYGNsaWVudEFsaWFzYGAgd2l0aCBvbmUgYGBwb3J0YGAuXG4gKi9cbkNsaWVudEFsaWFzZXM/OiBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzW11cblRscz86IFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG5ldyBDTUFQIHNlcnZpY2UgdGhhdCBBbWF6b24gRUNTIGNyZWF0ZXMgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLiBUaGlzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ01BUCBuYW1lc3BhY2UuIFRoZSBuYW1lIGNhbiBjb250YWluIHVwIHRvIDY0IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGFuZCBoeXBoZW5zICgtKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqL1xuRGlzY292ZXJ5TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBwb3J0TmFtZWBgIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBgYHBvcnRNYXBwaW5nc2BgIGZyb20gYWxsIHRoZSBjb250YWluZXJzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgY29uZmlndXJlZCB0aW1lb3V0cyBmb3IgU2VydmljZSBDb25uZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIHdhaXRpbmcgZm9yIHRoZSB1cHN0cmVhbSB0byByZXNwb25kIHdpdGggYSBjb21wbGV0ZSByZXNwb25zZSBwZXIgcmVxdWVzdC4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBwZXJSZXF1ZXN0VGltZW91dGBgLiBgYHBlclJlcXVlc3RUaW1lb3V0YGAgY2FuIG9ubHkgYmUgc2V0IGlmIFNlcnZpY2UgQ29ubmVjdCBgYGFwcFByb3RvY29sYGAgaXNuJ3QgYGBUQ1BgYC4gT25seSBgYGlkbGVUaW1lb3V0YGAgaXMgYWxsb3dlZCBmb3IgYGBUQ1BgYGBgYXBwUHJvdG9jb2xgYC5cbiAqL1xuUGVyUmVxdWVzdFRpbWVvdXRTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIGEgY29ubmVjdGlvbiB3aWxsIHN0YXkgYWN0aXZlIHdoaWxlIGlkbGUuIEEgdmFsdWUgb2YgYGAwYGAgY2FuIGJlIHNldCB0byBkaXNhYmxlIGBgaWRsZVRpbWVvdXRgYC5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgSFRUUGBgL2BgSFRUUDJgYC9gYEdSUENgYCBpcyA1IG1pbnV0ZXMuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYFRDUGBgIGlzIDEgaG91ci5cbiAqL1xuSWRsZVRpbWVvdXRTZWNvbmRzPzogbnVtYmVyXG59XG4vKipcbiAqIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciB0YXNrcyAoXCJjbGllbnRzXCIpIGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuXG4gKiAgRWFjaCBuYW1lIGFuZCBwb3J0IG1hcHBpbmcgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2UuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0Q2xpZW50QWxpYXMge1xuLyoqXG4gKiBUaGUgYGBkbnNOYW1lYGAgaXMgdGhlIG5hbWUgdGhhdCB5b3UgdXNlIGluIHRoZSBhcHBsaWNhdGlvbnMgb2YgY2xpZW50IHRhc2tzIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLiBUaGUgbmFtZSBtdXN0IGJlIGEgdmFsaWQgRE5TIG5hbWUgYnV0IGRvZXNuJ3QgbmVlZCB0byBiZSBmdWxseS1xdWFsaWZpZWQuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIHVwIHRvIDEyNyBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBoeXBoZW5zICgtKSwgYW5kIHBlcmlvZHMgKC4pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICogIElmIHRoaXMgcGFyYW1ldGVyIGlzbid0IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBkaXNjb3ZlcnlOYW1lLm5hbWVzcGFjZWBgIGlzIHVzZWQuIElmIHRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBwb3J0IG1hcHBpbmcgbmFtZSBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBgYHBvcnROYW1lLm5hbWVzcGFjZWBgLlxuICogIFRvIGF2b2lkIGNoYW5naW5nIHlvdXIgYXBwbGljYXRpb25zIGluIGNsaWVudCBBbWF6b24gRUNTIHNlcnZpY2VzLCBzZXQgdGhpcyB0byB0aGUgc2FtZSBuYW1lIHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB1c2VzIGJ5IGRlZmF1bHQuIEZvciBleGFtcGxlLCBhIGZldyBjb21tb24gbmFtZXMgYXJlIGBgZGF0YWJhc2VgYCwgYGBkYmBgLCBvciB0aGUgbG93ZXJjYXNlIG5hbWUgb2YgYSBkYXRhYmFzZSwgc3VjaCBhcyBgYG15c3FsYGAgb3IgYGByZWRpc2BgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRuc05hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGxpc3RlbmluZyBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS4gVGhpcyBwb3J0IGlzIGF2YWlsYWJsZSBpbnNpZGUgb2YgYWxsIG9mIHRoZSB0YXNrcyB3aXRoaW4gdGhlIHNhbWUgbmFtZXNwYWNlLlxuICogIFRvIGF2b2lkIGNoYW5naW5nIHlvdXIgYXBwbGljYXRpb25zIGluIGNsaWVudCBBbWF6b24gRUNTIHNlcnZpY2VzLCBzZXQgdGhpcyB0byB0aGUgc2FtZSBwb3J0IHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB1c2VzIGJ5IGRlZmF1bHQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUG9ydDogbnVtYmVyXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb24ge1xuSXNzdWVyQ2VydGlmaWNhdGVBdXRob3JpdHk6IFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHlcbi8qKlxuICogVGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleS5cbiAqL1xuS21zS2V5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU2VydmljZSBDb25uZWN0IFRMUy5cbiAqL1xuUm9sZUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2lnbmVyIGNlcnRpZmljYXRlIGF1dGhvcml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5IHtcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmljYXRlLlxuICovXG5Bd3NQY2FBdXRob3JpdHlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTG9nQ29uZmlnYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tbG9nLWRyaXZlcmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogIEJ5IGRlZmF1bHQsIGNvbnRhaW5lcnMgdXNlIHRoZSBzYW1lIGxvZ2dpbmcgZHJpdmVyIHRoYXQgdGhlIERvY2tlciBkYWVtb24gdXNlcy4gSG93ZXZlciwgdGhlIGNvbnRhaW5lciBtaWdodCB1c2UgYSBkaWZmZXJlbnQgbG9nZ2luZyBkcml2ZXIgdGhhbiB0aGUgRG9ja2VyIGRhZW1vbiBieSBzcGVjaWZ5aW5nIGEgbG9nIGRyaXZlciBjb25maWd1cmF0aW9uIGluIHRoZSBjb250YWluZXIgZGVmaW5pdGlvbi5cbiAqICBVbmRlcnN0YW5kIHRoZSBmb2xsb3dpbmcgd2hlbiBzcGVjaWZ5aW5nIGEgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY29udGFpbmVycy5cbiAqICAgKyAgQW1hem9uIEVDUyBjdXJyZW50bHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdGhlIGxvZ2dpbmcgZHJpdmVycyBhdmFpbGFibGUgdG8gdGhlIERvY2tlciBkYWVtb24uIEFkZGl0aW9uYWwgbG9nIGRyaXZlcnMgbWF5IGJlIGF2YWlsYWJsZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50LlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgICsgIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IG11c3QgcmVnaXN0ZXIgdGhlIGF2YWlsYWJsZSBsb2dnaW5nIGRyaXZlcnMgd2l0aCB0aGUgYGBFQ1NfQVZBSUxBQkxFX0xPR0dJTkdfRFJJVkVSU2BgIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBjb250YWluZXJzIHBsYWNlZCBvbiB0aGF0IGluc3RhbmNlIGNhbiB1c2UgdGhlc2UgbG9nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWFnZW50LWNvbmZpZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBvbiBGQVJHQVRFbG9uZywgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgeW91ciB0YXNrcyBhcmUgaG9zdGVkIG9uLCBhbnkgYWRkaXRpb25hbCBzb2Z0d2FyZSBuZWVkZWQgbXVzdCBiZSBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgdGFzay4gRm9yIGV4YW1wbGUsIHRoZSBGbHVlbnRkIG91dHB1dCBhZ2dyZWdhdG9ycyBvciBhIHJlbW90ZSBob3N0IHJ1bm5pbmcgTG9nc3Rhc2ggdG8gc2VuZCBHZWxmIGxvZ3MgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzZWNyZXRzIHRvIHBhc3MgdG8gdGhlIGxvZyBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuU2VjcmV0T3B0aW9ucz86IFNlY3JldFtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VuZCB0byB0aGUgbG9nIGRyaXZlci5cbiAqICBUaGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgZGVwZW5kIG9uIHRoZSBsb2cgZHJpdmVyLiBTb21lIG9mIHRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHlvdSB1c2UgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIgdG8gcm91dGUgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgYXdzbG9ncy1jcmVhdGUtZ3JvdXAgUmVxdWlyZWQ6IE5vIFNwZWNpZnkgd2hldGhlciB5b3Ugd2FudCB0aGUgbG9nIGdyb3VwIHRvIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4gSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBmYWxzZS4gWW91ciBJQU0gcG9saWN5IG11c3QgaW5jbHVkZSB0aGUgbG9nczpDcmVhdGVMb2dHcm91cCBwZXJtaXNzaW9uIGJlZm9yZSB5b3UgYXR0ZW1wdCB0byB1c2UgYXdzbG9ncy1jcmVhdGUtZ3JvdXAuICsgYXdzbG9ncy1yZWdpb24gUmVxdWlyZWQ6IFllcyBTcGVjaWZ5IHRoZSBSZWdpb24gdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIGlzIHRvIHNlbmQgeW91ciBEb2NrZXIgbG9ncyB0by4gWW91IGNhbiBjaG9vc2UgdG8gc2VuZCBhbGwgb2YgeW91ciBsb2dzIGZyb20gY2x1c3RlcnMgaW4gZGlmZmVyZW50IFJlZ2lvbnMgdG8gYSBzaW5nbGUgcmVnaW9uIGluIENsb3VkV2F0Y2ggTG9ncy4gVGhpcyBpcyBzbyB0aGF0IHRoZXkncmUgYWxsIHZpc2libGUgaW4gb25lIGxvY2F0aW9uLiBPdGhlcndpc2UsIHlvdSBjYW4gc2VwYXJhdGUgdGhlbSBieSBSZWdpb24gZm9yIG1vcmUgZ3JhbnVsYXJpdHkuIE1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgbG9nIGdyb3VwIGV4aXN0cyBpbiB0aGUgUmVnaW9uIHRoYXQgeW91IHNwZWNpZnkgd2l0aCB0aGlzIG9wdGlvbi4gKyBhd3Nsb2dzLWdyb3VwIFJlcXVpcmVkOiBZZXMgTWFrZSBzdXJlIHRvIHNwZWNpZnkgYSBsb2cgZ3JvdXAgdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIHNlbmRzIGl0cyBsb2cgc3RyZWFtcyB0by4gKyBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggUmVxdWlyZWQ6IFllcywgd2hlbiB1c2luZyBGYXJnYXRlLk9wdGlvbmFsIHdoZW4gdXNpbmcgRUMyLiBVc2UgdGhlIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBvcHRpb24gdG8gYXNzb2NpYXRlIGEgbG9nIHN0cmVhbSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCB0aGUgY29udGFpbmVyIG5hbWUsIGFuZCB0aGUgSUQgb2YgdGhlIEFtYXpvbiBFQ1MgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gSWYgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSB0YWtlcyB0aGUgZm9ybWF0IHByZWZpeC1uYW1lL2NvbnRhaW5lci1uYW1lL2Vjcy10YXNrLWlkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIGlzIG5hbWVkIGFmdGVyIHRoZSBjb250YWluZXIgSUQgdGhhdCdzIGFzc2lnbmVkIGJ5IHRoZSBEb2NrZXIgZGFlbW9uIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UuIEJlY2F1c2UgaXQncyBkaWZmaWN1bHQgdG8gdHJhY2UgbG9ncyBiYWNrIHRvIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0gd2l0aCBqdXN0IHRoZSBEb2NrZXIgY29udGFpbmVyIElEICh3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlKSwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbi4gRm9yIEFtYXpvbiBFQ1Mgc2VydmljZXMsIHlvdSBjYW4gdXNlIHRoZSBzZXJ2aWNlIG5hbWUgYXMgdGhlIHByZWZpeC4gRG9pbmcgc28sIHlvdSBjYW4gdHJhY2UgbG9nIHN0cmVhbXMgdG8gdGhlIHNlcnZpY2UgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8sIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0sIGFuZCB0aGUgSUQgb2YgdGhlIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIFlvdSBtdXN0IHNwZWNpZnkgYSBzdHJlYW0tcHJlZml4IGZvciB5b3VyIGxvZ3MgdG8gaGF2ZSB5b3VyIGxvZ3MgYXBwZWFyIGluIHRoZSBMb2cgcGFuZSB3aGVuIHVzaW5nIHRoZSBBbWF6b24gRUNTIGNvbnNvbGUuICsgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiBpbiBQeXRob24gc3RyZnRpbWUgZm9ybWF0LiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIE9uZSBleGFtcGxlIG9mIGEgdXNlIGNhc2UgZm9yIHVzaW5nIHRoaXMgZm9ybWF0IGlzIGZvciBwYXJzaW5nIG91dHB1dCBzdWNoIGFzIGEgc3RhY2sgZHVtcCwgd2hpY2ggbWlnaHQgb3RoZXJ3aXNlIGJlIGxvZ2dlZCBpbiBtdWx0aXBsZSBlbnRyaWVzLiBUaGUgY29ycmVjdCBwYXR0ZXJuIGFsbG93cyBpdCB0byBiZSBjYXB0dXJlZCBpbiBhIHNpbmdsZSBlbnRyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiArIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiB0aGF0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24uIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGlzIGFsc28gY29uZmlndXJlZC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiBcbiAqICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXBwbHkgdG8gYWxsIHN1cHBvcnRlZCBsb2cgZHJpdmVycy5cbiAqICAgKyBtb2RlIFJlcXVpcmVkOiBObyBWYWxpZCB2YWx1ZXM6IG5vbi1ibG9ja2luZyB8IGJsb2NraW5nIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIGRlbGl2ZXJ5IG1vZGUgb2YgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgbG9nIGRyaXZlciBzcGVjaWZpZWQgdXNpbmcgbG9nRHJpdmVyLiBUaGUgZGVsaXZlcnkgbW9kZSB5b3UgY2hvb3NlIGFmZmVjdHMgYXBwbGljYXRpb24gYXZhaWxhYmlsaXR5IHdoZW4gdGhlIGZsb3cgb2YgbG9ncyBmcm9tIGNvbnRhaW5lciBpcyBpbnRlcnJ1cHRlZC4gSWYgeW91IHVzZSB0aGUgYmxvY2tpbmcgbW9kZSBhbmQgdGhlIGZsb3cgb2YgbG9ncyBpcyBpbnRlcnJ1cHRlZCwgY2FsbHMgZnJvbSBjb250YWluZXIgY29kZSB0byB3cml0ZSB0byB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyB3aWxsIGJsb2NrLiBUaGUgbG9nZ2luZyB0aHJlYWQgb2YgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmxvY2sgYXMgYSByZXN1bHQuIFRoaXMgbWF5IGNhdXNlIHRoZSBhcHBsaWNhdGlvbiB0byBiZWNvbWUgdW5yZXNwb25zaXZlIGFuZCBsZWFkIHRvIGNvbnRhaW5lciBoZWFsdGhjaGVjayBmYWlsdXJlLiBJZiB5b3UgdXNlIHRoZSBub24tYmxvY2tpbmcgbW9kZSwgdGhlIGNvbnRhaW5lcidzIGxvZ3MgYXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGluLW1lbW9yeSBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWF4LWJ1ZmZlci1zaXplIG9wdGlvbi4gVGhpcyBwcmV2ZW50cyB0aGUgYXBwbGljYXRpb24gZnJvbSBiZWNvbWluZyB1bnJlc3BvbnNpdmUgd2hlbiBsb2dzIGNhbm5vdCBiZSBzZW50LiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBtb2RlIGlmIHlvdSB3YW50IHRvIGVuc3VyZSBzZXJ2aWNlIGF2YWlsYWJpbGl0eSBhbmQgYXJlIG9rYXkgd2l0aCBzb21lIGxvZyBsb3NzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFByZXZlbnRpbmcgbG9nIGxvc3Mgd2l0aCBub24tYmxvY2tpbmcgbW9kZSBpbiB0aGUgYXdzbG9ncyBjb250YWluZXIgbG9nIGRyaXZlci4gWW91IGNhbiBzZXQgYSBkZWZhdWx0IG1vZGUgZm9yIGFsbCBjb250YWluZXJzIGluIGEgc3BlY2lmaWMgUmVnaW9uIGJ5IHVzaW5nIHRoZSBkZWZhdWx0TG9nRHJpdmVyTW9kZSBhY2NvdW50IHNldHRpbmcuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBtb2RlIG9wdGlvbiBvciBjb25maWd1cmUgdGhlIGFjY291bnQgc2V0dGluZywgQW1hem9uIEVDUyB3aWxsIGRlZmF1bHQgdG8gdGhlIGJsb2NraW5nIG1vZGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY2NvdW50IHNldHRpbmcsIHNlZSBEZWZhdWx0IGxvZyBkcml2ZXIgbW9kZSBpbiB0aGUgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlLiBPbiBKdW5lIDI1LCAyMDI1LCBBbWF6b24gRUNTIGlzIGNoYW5naW5nIHRoZSBkZWZhdWx0IGxvZyBkcml2ZXIgbW9kZSBmcm9tIGJsb2NraW5nIHRvIG5vbi1ibG9ja2luZyB0byBwcmlvcml0aXplIHRhc2sgYXZhaWxhYmlsaXR5IG92ZXIgbG9nZ2luZy4gVG8gY29udGludWUgdXNpbmcgdGhlIGJsb2NraW5nIG1vZGUgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBTZXQgdGhlIG1vZGUgb3B0aW9uIGluIHlvdXIgY29udGFpbmVyIGRlZmluaXRpb24ncyBsb2dDb25maWd1cmF0aW9uIGFzIGJsb2NraW5nLiBTZXQgdGhlIGRlZmF1bHRMb2dEcml2ZXJNb2RlIGFjY291bnQgc2V0dGluZyB0byBibG9ja2luZy4gKyBtYXgtYnVmZmVyLXNpemUgUmVxdWlyZWQ6IE5vIERlZmF1bHQgdmFsdWU6IDFtIFdoZW4gbm9uLWJsb2NraW5nIG1vZGUgaXMgdXNlZCwgdGhlIG1heC1idWZmZXItc2l6ZSBsb2cgb3B0aW9uIGNvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdGhhdCdzIHVzZWQgZm9yIGludGVybWVkaWF0ZSBtZXNzYWdlIHN0b3JhZ2UuIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGFuIGFkZXF1YXRlIGJ1ZmZlciBzaXplIGJhc2VkIG9uIHlvdXIgYXBwbGljYXRpb24uIFdoZW4gdGhlIGJ1ZmZlciBmaWxscyB1cCwgZnVydGhlciBsb2dzIGNhbm5vdCBiZSBzdG9yZWQuIExvZ3MgdGhhdCBjYW5ub3QgYmUgc3RvcmVkIGFyZSBsb3N0LiBcbiAqICBUbyByb3V0ZSBsb2dzIHVzaW5nIHRoZSBgYHNwbHVua2BgIGxvZyByb3V0ZXIsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBgYHNwbHVuay10b2tlbmBgIGFuZCBhIGBgc3BsdW5rLXVybGBgLlxuICogIFdoZW4geW91IHVzZSB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyByb3V0ZXIgdG8gcm91dGUgbG9ncyB0byBhbiBBV1MgU2VydmljZSBvciBBV1MgUGFydG5lciBOZXR3b3JrIGRlc3RpbmF0aW9uIGZvciBsb2cgc3RvcmFnZSBhbmQgYW5hbHl0aWNzLCB5b3UgY2FuIHNldCB0aGUgYGBsb2ctZHJpdmVyLWJ1ZmZlci1saW1pdGBgIG9wdGlvbiB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGFyZSBidWZmZXJlZCBpbiBtZW1vcnksIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBsb2cgcm91dGVyIGNvbnRhaW5lci4gSXQgY2FuIGhlbHAgdG8gcmVzb2x2ZSBwb3RlbnRpYWwgbG9nIGxvc3MgaXNzdWUgYmVjYXVzZSBoaWdoIHRocm91Z2hwdXQgbWlnaHQgcmVzdWx0IGluIG1lbW9yeSBydW5uaW5nIG91dCBmb3IgdGhlIGJ1ZmZlciBpbnNpZGUgb2YgRG9ja2VyLlxuICogIE90aGVyIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4gdXNpbmcgYGBhd3NmaXJlbGVuc2BgIHRvIHJvdXRlIGxvZ3MgZGVwZW5kIG9uIHRoZSBkZXN0aW5hdGlvbi4gV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIERhdGEgRmlyZWhvc2UsIHlvdSBjYW4gc3BlY2lmeSB0aGUgQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgbmFtZSBmb3IgdGhlIGxvZyBzdHJlYW0gd2l0aCBgYGRlbGl2ZXJ5X3N0cmVhbWBgLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBLaW5lc2lzIERhdGEgU3RyZWFtcywgeW91IGNhbiBzcGVjaWZ5IGFuIEFXUyBSZWdpb24gd2l0aCBgYHJlZ2lvbmBgIGFuZCBhIGRhdGEgc3RyZWFtIG5hbWUgd2l0aCBgYHN0cmVhbWBgLlxuICogICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlLCB5b3UgY2FuIHNwZWNpZnkgb3B0aW9ucyBsaWtlIGBgTmFtZWBgLCBgYEhvc3RgYCAoT3BlblNlYXJjaCBTZXJ2aWNlIGVuZHBvaW50IHdpdGhvdXQgcHJvdG9jb2wpLCBgYFBvcnRgYCwgYGBJbmRleGBgLCBgYFR5cGVgYCwgYGBBd3NfYXV0aGBgLCBgYEF3c19yZWdpb25gYCwgYGBTdXBwcmVzc19UeXBlX05hbWVgYCwgYW5kIGBgdGxzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VuZGVyIHRoZSBob29kOiBGaXJlTGVucyBmb3IgQW1hem9uIEVDUyBUYXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvbnRhaW5lcnMvdW5kZXItdGhlLWhvb2QtZmlyZWxlbnMtZm9yLWFtYXpvbi1lY3MtdGFza3MvKS5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gUzMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgYnVja2V0IHVzaW5nIHRoZSBgYGJ1Y2tldGBgIG9wdGlvbi4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYGByZWdpb25gYCwgYGB0b3RhbF9maWxlX3NpemVgYCwgYGB1cGxvYWRfdGltZW91dGBgLCBhbmQgYGB1c2VfcHV0X29iamVjdGBgIGFzIG9wdGlvbnMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE5IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLiBUbyBjaGVjayB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgdmVyc2lvbiBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSwgbG9nIGluIHRvIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgYHN1ZG8gZG9ja2VyIHZlcnNpb24gLS1mb3JtYXQgJ3t7LlNlcnZlci5BUElWZXJzaW9ufX0nYGBcbiAqL1xuT3B0aW9ucz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGRyaXZlciB0byB1c2UgZm9yIHRoZSBjb250YWluZXIuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsIGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gQ2xvdWRXYXRjaF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfYXdzbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIGFuIHNlcnZpY2Ugb3IgUGFydG5lcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZmlyZWxlbnMuaHRtbCkuXG4gKiAgIElmIHlvdSBoYXZlIGEgY3VzdG9tIGRyaXZlciB0aGF0IGlzbid0IGxpc3RlZCwgeW91IGNhbiBmb3JrIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBwcm9qZWN0IHRoYXQncyBbYXZhaWxhYmxlIG9uIEdpdEh1Yl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLWVjcy1hZ2VudCkgYW5kIGN1c3RvbWl6ZSBpdCB0byB3b3JrIHdpdGggdGhhdCBkcml2ZXIuIFdlIGVuY291cmFnZSB5b3UgdG8gc3VibWl0IHB1bGwgcmVxdWVzdHMgZm9yIGNoYW5nZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBoYXZlIGluY2x1ZGVkLiBIb3dldmVyLCB3ZSBkb24ndCBjdXJyZW50bHkgcHJvdmlkZSBzdXBwb3J0IGZvciBydW5uaW5nIG1vZGlmaWVkIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLlxuICovXG5Mb2dEcml2ZXI/OiBzdHJpbmdcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VjcmV0IHRvIGV4cG9zZSB0byB5b3VyIGNvbnRhaW5lci4gU2VjcmV0cyBjYW4gYmUgZXhwb3NlZCB0byBhIGNvbnRhaW5lciBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAgICsgIFRvIGluamVjdCBzZW5zaXRpdmUgZGF0YSBpbnRvIHlvdXIgY29udGFpbmVycyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHVzZSB0aGUgYGBzZWNyZXRzYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICArICBUbyByZWZlcmVuY2Ugc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBsb2cgY29uZmlndXJhdGlvbiBvZiBhIGNvbnRhaW5lciwgdXNlIHRoZSBgYHNlY3JldE9wdGlvbnNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldCB7XG4vKipcbiAqIFRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHRoZSBjb250YWluZXIuIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9mIHRoZSBBU01sb25nIHNlY3JldCBvciB0aGUgZnVsbCBBUk4gb2YgdGhlIHBhcmFtZXRlciBpbiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVpcmUgSUFNbG9uZyBwZXJtaXNzaW9ucywgc2VlIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1zZWNyZXRzLmh0bWwjc2VjcmV0cy1pYW0pIChmb3IgU2VjcmV0cyBNYW5hZ2VyKSBvciBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtcGFyYW1ldGVycy5odG1sKSAoZm9yIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgc3RvcmUpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyIGV4aXN0cyBpbiB0aGUgc2FtZSBSZWdpb24gYXMgdGhlIHRhc2sgeW91J3JlIGxhdW5jaGluZywgdGhlbiB5b3UgY2FuIHVzZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9yIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gSWYgdGhlIHBhcmFtZXRlciBleGlzdHMgaW4gYSBkaWZmZXJlbnQgUmVnaW9uLCB0aGVuIHRoZSBmdWxsIEFSTiBtdXN0IGJlIHNwZWNpZmllZC5cbiAqL1xuVmFsdWVGcm9tOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHNlY3JldC5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uIGZvciB5b3VyIHNlcnZpY2UgdGhhdCBob2xkcyB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0YXJnZXQgZ3JvdXAocykgQW1hem9uIEVDUyB0YXNrcyB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjTGF0dGljZUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgQW1hem9uIEVDUyB0YXNrcyB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8uXG4gKi9cblRhcmdldEdyb3VwQXJuOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHBvcnQgbWFwcGluZyB0byByZWdpc3RlciBpbiB0aGUgVlBDIExhdHRpY2UgdGFyZ2V0IGdyb3VwLiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBgYHBvcnRNYXBwaW5nYGAgeW91IGRlZmluZWQgaW4geW91ciB0YXNrIGRlZmluaXRpb24uXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHRoZSBBbWF6b24gRUNT4oCoIGluZnJhc3RydWN0dXJlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBtYW5hZ2UgeW91ciBWUEMgTGF0dGljZSBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gSWYgbm8gZGVwbG95bWVudCBjb250cm9sbGVyIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBFQ1NgYCBpcyB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb250cm9sbGVyIHtcbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlIHRvIHVzZS4gVGhlcmUgYXJlIHRocmVlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBhdmFpbGFibGU6XG4gKiAgICsgRUNTIFRoZSByb2xsaW5nIHVwZGF0ZSAoRUNTKSBkZXBsb3ltZW50IHR5cGUgaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBjdXJyZW50IHJ1bm5pbmcgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uLiBUaGUgbnVtYmVyIG9mIGNvbnRhaW5lcnMgQW1hem9uIEVDUyBhZGRzIG9yIHJlbW92ZXMgZnJvbSB0aGUgc2VydmljZSBkdXJpbmcgYSByb2xsaW5nIHVwZGF0ZSBpcyBjb250cm9sbGVkIGJ5IGFkanVzdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBhbGxvd2VkIGR1cmluZyBhIHNlcnZpY2UgZGVwbG95bWVudCwgYXMgc3BlY2lmaWVkIGluIHRoZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbi4gKyBDT0RFX0RFUExPWSBUaGUgYmx1ZS9ncmVlbiAoQ09ERV9ERVBMT1kpIGRlcGxveW1lbnQgdHlwZSB1c2VzIHRoZSBibHVlL2dyZWVuIGRlcGxveW1lbnQgbW9kZWwgcG93ZXJlZCBieSAsIHdoaWNoIGFsbG93cyB5b3UgdG8gdmVyaWZ5IGEgbmV3IGRlcGxveW1lbnQgb2YgYSBzZXJ2aWNlIGJlZm9yZSBzZW5kaW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC4gKyBFWFRFUk5BTCBUaGUgZXh0ZXJuYWwgKEVYVEVSTkFMKSBkZXBsb3ltZW50IHR5cGUgZW5hYmxlcyB5b3UgdG8gdXNlIGFueSB0aGlyZC1wYXJ0eSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgZm9yIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MgZm9yIGFuIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuVHlwZT86IChcIkNPREVfREVQTE9ZXCIgfCBcIkVDU1wiIHwgXCJFWFRFUk5BTFwiKVxufVxuLyoqXG4gKiBPcHRpb25hbCBkZXBsb3ltZW50IHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGhvdyBtYW55IHRhc2tzIHJ1biBkdXJpbmcgdGhlIGRlcGxveW1lbnQgYW5kIHRoZSBvcmRlcmluZyBvZiBzdG9wcGluZyBhbmQgc3RhcnRpbmcgdGFza3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbmZpZ3VyYXRpb24ge1xuQWxhcm1zPzogRGVwbG95bWVudEFsYXJtc1xuRGVwbG95bWVudENpcmN1aXRCcmVha2VyPzogRGVwbG95bWVudENpcmN1aXRCcmVha2VyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWF4aW11bVBlcmNlbnRgYCBwYXJhbWV0ZXIgcmVwcmVzZW50cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGhlIGBgUlVOTklOR2BgIG9yIGBgUEVORElOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZWZpbmUgdGhlIGRlcGxveW1lbnQgYmF0Y2ggc2l6ZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBpcyB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgYW5kIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgb2YgMjAwJSwgdGhlIHNjaGVkdWxlciBtYXkgc3RhcnQgZm91ciBuZXcgdGFza3MgYmVmb3JlIHN0b3BwaW5nIHRoZSBmb3VyIG9sZGVyIHRhc2tzIChwcm92aWRlZCB0aGF0IHRoZSBjbHVzdGVyIHJlc291cmNlcyByZXF1aXJlZCB0byBkbyB0aGlzIGFyZSBhdmFpbGFibGUpLiBUaGUgZGVmYXVsdCBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgaXMgMjAwJS5cbiAqICBUaGUgQW1hem9uIEVDUyBzY2hlZHVsZXIgdXNlcyB0aGlzIHBhcmFtZXRlciB0byByZXBsYWNlIHVuaGVhbHRoeSB0YXNrcyBieSBzdGFydGluZyByZXBsYWNlbWVudCB0YXNrcyBmaXJzdCBhbmQgdGhlbiBzdG9wcGluZyB0aGUgdW5oZWFsdGh5IHRhc2tzLCBhcyBsb25nIGFzIGNsdXN0ZXIgcmVzb3VyY2VzIGZvciBzdGFydGluZyByZXBsYWNlbWVudCB0YXNrcyBhcmUgYXZhaWxhYmxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHNjaGVkdWxlciByZXBsYWNlcyB1bmhlYWx0aHkgdGFza3MsIHNlZSBbQW1hem9uIEVDUyBzZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzX3NlcnZpY2VzLmh0bWwpLlxuICogIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMsIGFuZCB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlICptYXhpbXVtIHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptYXhpbXVtIHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiB0aGUgc2VydmljZSB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBtYXhpbXVtIHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQuIFRoZSB2YWx1ZSBpcyBzdGlsbCByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NYXhpbXVtUGVyY2VudD86IG51bWJlclxuLyoqXG4gKiBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUsIHRoZSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHJlcHJlc2VudHMgYSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKS4gVGhpcyBwYXJhbWV0ZXIgZW5hYmxlcyB5b3UgdG8gZGVwbG95IHdpdGhvdXQgdXNpbmcgYWRkaXRpb25hbCBjbHVzdGVyIGNhcGFjaXR5LiBGb3IgZXhhbXBsZSwgaWYgeW91ciBzZXJ2aWNlIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIG9mIDUwJSwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIG1heSBzdG9wIHR3byBleGlzdGluZyB0YXNrcyB0byBmcmVlIHVwIGNsdXN0ZXIgY2FwYWNpdHkgYmVmb3JlIHN0YXJ0aW5nIHR3byBuZXcgdGFza3MuIFxuICogICBJZiBhbnkgdGFza3MgYXJlIHVuaGVhbHRoeSBhbmQgaWYgYGBtYXhpbXVtUGVyY2VudGBgIGRvZXNuJ3QgYWxsb3cgdGhlIEFtYXpvbiBFQ1Mgc2NoZWR1bGVyIHRvIHN0YXJ0IHJlcGxhY2VtZW50IHRhc2tzLCB0aGUgc2NoZWR1bGVyIHN0b3BzIHRoZSB1bmhlYWx0aHkgdGFza3Mgb25lLWJ5LW9uZSDigJQgdXNpbmcgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgYXMgYSBjb25zdHJhaW50IOKAlCB0byBjbGVhciB1cCBjYXBhY2l0eSB0byBsYXVuY2ggcmVwbGFjZW1lbnQgdGFza3MuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgc2NoZWR1bGVyIHJlcGxhY2VzIHVuaGVhbHRoeSB0YXNrcywgc2VlIFtBbWF6b24gRUNTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkgLiBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8gbm90KiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgQSBzZXJ2aWNlIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSBpZiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBwYXNzIHRoZWlyIGhlYWx0aCBjaGVja3MuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciA0MCBzZWNvbmRzIGFmdGVyIGEgdGFzayByZWFjaGVzIGEgYGBSVU5OSU5HYGAgc3RhdGUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvdW50ZWQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgb25lIG9yIG1vcmUgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyBpdCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC4gQSB0YXNrIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSB3aGVuIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2sgaGF2ZSBwYXNzZWQgdGhlaXIgaGVhbHRoIGNoZWNrcy4gVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBjYW4gd2FpdCBmb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGFpbmVyIGhlYWx0aCBjaGVjayBzZXR0aW5ncy4gXG4gKiAgIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgYm90aCB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGFuZCB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgXG4gKiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgcmVwbGljYSBzZXJ2aWNlIGZvciBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIGlzIDEwMCUuIFRoZSBkZWZhdWx0IGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBEQUVNT05gYCBzZXJ2aWNlIHNjaGVkdWxlIGlzIDAlIGZvciB0aGUgQ0xJLCB0aGUgQVdTIFNES3MsIGFuZCB0aGUgQVBJcyBhbmQgNTAlIGZvciB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS5cbiAqICBUaGUgbWluaW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBkdXJpbmcgYSBkZXBsb3ltZW50IGlzIHRoZSBgYGRlc2lyZWRDb3VudGBgIG11bHRpcGxpZWQgYnkgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAvMTAwLCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHZhbHVlIGlzIG5vdCB1c2VkLCBhbHRob3VnaCBpdCBpcyByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NaW5pbXVtSGVhbHRoeVBlcmNlbnQ/OiBudW1iZXJcbn1cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIENsb3VkV2F0Y2ggYWxhcm1zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRBbGFybXMge1xuLyoqXG4gKiBPbmUgb3IgbW9yZSBDbG91ZFdhdGNoIGFsYXJtIG5hbWVzLiBVc2UgYSBcIixcIiB0byBzZXBhcmF0ZSB0aGUgYWxhcm1zLlxuICovXG5BbGFybU5hbWVzOiBzdHJpbmdbXVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBDbG91ZFdhdGNoIGFsYXJtIG9wdGlvbiBpbiB0aGUgc2VydmljZSBkZXBsb3ltZW50IHByb2Nlc3MuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyB1c2VkLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHNlcnZpY2VzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLlxuICogICBUaGUgKmRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCBmYWlsIGlmIHRoZSBzZXJ2aWNlIGNhbid0IHJlYWNoIGEgc3RlYWR5IHN0YXRlLiBJZiB5b3UgdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciwgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCB0cmFuc2l0aW9uIHRvIGEgZmFpbGVkIHN0YXRlIGFuZCBzdG9wIGxhdW5jaGluZyBuZXcgdGFza3MuIElmIHlvdSB1c2UgdGhlIHJvbGxiYWNrIG9wdGlvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JvbGxpbmcgdXBkYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtZWNzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDaXJjdWl0QnJlYWtlciB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGxvZ2ljIGZvciB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIG9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbiJdfQ==
@@ -2,19 +2,21 @@
2
2
  * The ``AWS::EFS::MountTarget`` resource is an Amazon EFS resource that creates a mount target for an EFS file system. You can then mount the file system on Amazon EC2 instances or other resources by using the mount target.
3
3
  */
4
4
  export interface _AWS_EFS_MOUNTTARGET {
5
+ Id?: string;
5
6
  /**
6
- * VPC security group IDs, of the form ``sg-xxxxxxxx``. These must be for the same VPC as the subnet specified. The maximum number of security groups depends on account quota. For more information, see [Amazon VPC Quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html) in the *Amazon VPC User Guide* (see the *Security Groups* table).
7
+ * Valid IPv4 address within the address range of the specified subnet.
7
8
  */
8
- SecurityGroups: string[];
9
+ IpAddress?: string;
10
+ Ipv6Address?: string;
11
+ IpAddressType?: ("IPV4_ONLY" | "IPV6_ONLY" | "DUAL_STACK");
9
12
  /**
10
13
  * The ID of the file system for which to create the mount target.
11
14
  */
12
15
  FileSystemId: string;
13
16
  /**
14
- * Valid IPv4 address within the address range of the specified subnet.
17
+ * VPC security group IDs, of the form ``sg-xxxxxxxx``. These must be for the same VPC as the subnet specified. The maximum number of security groups depends on account quota. For more information, see [Amazon VPC Quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html) in the *Amazon VPC User Guide* (see the *Security Groups* table).
15
18
  */
16
- IpAddress?: string;
17
- Id?: string;
19
+ SecurityGroups: string[];
18
20
  /**
19
21
  * The ID of the subnet to add the mount target in. For One Zone file systems, use the subnet that is associated with the file system's Availability Zone.
20
22
  */
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVmcy1tb3VudHRhcmdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1lZnMtbW91bnR0YXJnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBgQVdTOjpFRlM6Ok1vdW50VGFyZ2V0YGAgcmVzb3VyY2UgaXMgYW4gQW1hem9uIEVGUyByZXNvdXJjZSB0aGF0IGNyZWF0ZXMgYSBtb3VudCB0YXJnZXQgZm9yIGFuIEVGUyBmaWxlIHN5c3RlbS4gWW91IGNhbiB0aGVuIG1vdW50IHRoZSBmaWxlIHN5c3RlbSBvbiBBbWF6b24gRUMyIGluc3RhbmNlcyBvciBvdGhlciByZXNvdXJjZXMgYnkgdXNpbmcgdGhlIG1vdW50IHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VGU19NT1VOVFRBUkdFVCB7XG4vKipcbiAqIFZQQyBzZWN1cml0eSBncm91cCBJRHMsIG9mIHRoZSBmb3JtIGBgc2cteHh4eHh4eHhgYC4gVGhlc2UgbXVzdCBiZSBmb3IgdGhlIHNhbWUgVlBDIGFzIHRoZSBzdWJuZXQgc3BlY2lmaWVkLiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2VjdXJpdHkgZ3JvdXBzIGRlcGVuZHMgb24gYWNjb3VudCBxdW90YS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIFZQQyBRdW90YXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS9hbWF6b24tdnBjLWxpbWl0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBWUEMgVXNlciBHdWlkZSogKHNlZSB0aGUgKlNlY3VyaXR5IEdyb3VwcyogdGFibGUpLlxuICovXG5TZWN1cml0eUdyb3Vwczogc3RyaW5nW11cbi8qKlxuICogVGhlIElEIG9mIHRoZSBmaWxlIHN5c3RlbSBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBtb3VudCB0YXJnZXQuXG4gKi9cbkZpbGVTeXN0ZW1JZDogc3RyaW5nXG4vKipcbiAqIFZhbGlkIElQdjQgYWRkcmVzcyB3aXRoaW4gdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIHNwZWNpZmllZCBzdWJuZXQuXG4gKi9cbklwQWRkcmVzcz86IHN0cmluZ1xuSWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBzdWJuZXQgdG8gYWRkIHRoZSBtb3VudCB0YXJnZXQgaW4uIEZvciBPbmUgWm9uZSBmaWxlIHN5c3RlbXMsIHVzZSB0aGUgc3VibmV0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlIHN5c3RlbSdzIEF2YWlsYWJpbGl0eSBab25lLlxuICovXG5TdWJuZXRJZDogc3RyaW5nXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVmcy1tb3VudHRhcmdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1lZnMtbW91bnR0YXJnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBgQVdTOjpFRlM6Ok1vdW50VGFyZ2V0YGAgcmVzb3VyY2UgaXMgYW4gQW1hem9uIEVGUyByZXNvdXJjZSB0aGF0IGNyZWF0ZXMgYSBtb3VudCB0YXJnZXQgZm9yIGFuIEVGUyBmaWxlIHN5c3RlbS4gWW91IGNhbiB0aGVuIG1vdW50IHRoZSBmaWxlIHN5c3RlbSBvbiBBbWF6b24gRUMyIGluc3RhbmNlcyBvciBvdGhlciByZXNvdXJjZXMgYnkgdXNpbmcgdGhlIG1vdW50IHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VGU19NT1VOVFRBUkdFVCB7XG5JZD86IHN0cmluZ1xuLyoqXG4gKiBWYWxpZCBJUHY0IGFkZHJlc3Mgd2l0aGluIHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSBzcGVjaWZpZWQgc3VibmV0LlxuICovXG5JcEFkZHJlc3M/OiBzdHJpbmdcbklwdjZBZGRyZXNzPzogc3RyaW5nXG5JcEFkZHJlc3NUeXBlPzogKFwiSVBWNF9PTkxZXCIgfCBcIklQVjZfT05MWVwiIHwgXCJEVUFMX1NUQUNLXCIpXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgZmlsZSBzeXN0ZW0gZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgbW91bnQgdGFyZ2V0LlxuICovXG5GaWxlU3lzdGVtSWQ6IHN0cmluZ1xuLyoqXG4gKiBWUEMgc2VjdXJpdHkgZ3JvdXAgSURzLCBvZiB0aGUgZm9ybSBgYHNnLXh4eHh4eHh4YGAuIFRoZXNlIG11c3QgYmUgZm9yIHRoZSBzYW1lIFZQQyBhcyB0aGUgc3VibmV0IHNwZWNpZmllZC4gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY3VyaXR5IGdyb3VwcyBkZXBlbmRzIG9uIGFjY291bnQgcXVvdGEuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBWUEMgUXVvdGFzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvYW1hem9uLXZwYy1saW1pdHMuaHRtbCkgaW4gdGhlICpBbWF6b24gVlBDIFVzZXIgR3VpZGUqIChzZWUgdGhlICpTZWN1cml0eSBHcm91cHMqIHRhYmxlKS5cbiAqL1xuU2VjdXJpdHlHcm91cHM6IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgc3VibmV0IHRvIGFkZCB0aGUgbW91bnQgdGFyZ2V0IGluLiBGb3IgT25lIFpvbmUgZmlsZSBzeXN0ZW1zLCB1c2UgdGhlIHN1Ym5ldCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZSBzeXN0ZW0ncyBBdmFpbGFiaWxpdHkgWm9uZS5cbiAqL1xuU3VibmV0SWQ6IHN0cmluZ1xufVxuIl19
@@ -2,14 +2,6 @@
2
2
  * An object representing an Amazon EKS PodIdentityAssociation.
3
3
  */
4
4
  export interface _AWS_EKS_PODIDENTITYASSOCIATION {
5
- /**
6
- * The ARN of the pod identity association.
7
- */
8
- AssociationArn?: string;
9
- /**
10
- * The Kubernetes service account that the pod identity association is created for.
11
- */
12
- ServiceAccount: string;
13
5
  /**
14
6
  * The cluster that the pod identity association is created for.
15
7
  */
@@ -22,10 +14,30 @@ export interface _AWS_EKS_PODIDENTITYASSOCIATION {
22
14
  * The Kubernetes namespace that the pod identity association is created for.
23
15
  */
24
16
  Namespace: string;
17
+ /**
18
+ * The Kubernetes service account that the pod identity association is created for.
19
+ */
20
+ ServiceAccount: string;
21
+ /**
22
+ * The ARN of the pod identity association.
23
+ */
24
+ AssociationArn?: string;
25
25
  /**
26
26
  * The ID of the pod identity association.
27
27
  */
28
28
  AssociationId?: string;
29
+ /**
30
+ * The Target Role Arn of the pod identity association.
31
+ */
32
+ TargetRoleArn?: string;
33
+ /**
34
+ * The External Id of the pod identity association.
35
+ */
36
+ ExternalId?: string;
37
+ /**
38
+ * The Disable Session Tags of the pod identity association.
39
+ */
40
+ DisableSessionTags?: boolean;
29
41
  /**
30
42
  * An array of key-value pairs to apply to this resource.
31
43
  */
@@ -35,12 +47,12 @@ export interface _AWS_EKS_PODIDENTITYASSOCIATION {
35
47
  * A key-value pair to associate with a resource.
36
48
  */
37
49
  export interface Tag {
38
- /**
39
- * The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.
40
- */
41
- Value: string;
42
50
  /**
43
51
  * The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.
44
52
  */
45
53
  Key: string;
54
+ /**
55
+ * The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.
56
+ */
57
+ Value: string;
46
58
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVrcy1wb2RpZGVudGl0eWFzc29jaWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVrcy1wb2RpZGVudGl0eWFzc29jaWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYW4gQW1hem9uIEVLUyBQb2RJZGVudGl0eUFzc29jaWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfRUtTX1BPRElERU5USVRZQVNTT0NJQVRJT04ge1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBwb2QgaWRlbnRpdHkgYXNzb2NpYXRpb24uXG4gKi9cbkFzc29jaWF0aW9uQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBLdWJlcm5ldGVzIHNlcnZpY2UgYWNjb3VudCB0aGF0IHRoZSBwb2QgaWRlbnRpdHkgYXNzb2NpYXRpb24gaXMgY3JlYXRlZCBmb3IuXG4gKi9cblNlcnZpY2VBY2NvdW50OiBzdHJpbmdcbi8qKlxuICogVGhlIGNsdXN0ZXIgdGhhdCB0aGUgcG9kIGlkZW50aXR5IGFzc29jaWF0aW9uIGlzIGNyZWF0ZWQgZm9yLlxuICovXG5DbHVzdGVyTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBJQU0gcm9sZSBBUk4gdGhhdCB0aGUgcG9kIGlkZW50aXR5IGFzc29jaWF0aW9uIGlzIGNyZWF0ZWQgZm9yLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbi8qKlxuICogVGhlIEt1YmVybmV0ZXMgbmFtZXNwYWNlIHRoYXQgdGhlIHBvZCBpZGVudGl0eSBhc3NvY2lhdGlvbiBpcyBjcmVhdGVkIGZvci5cbiAqL1xuTmFtZXNwYWNlOiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBwb2QgaWRlbnRpdHkgYXNzb2NpYXRpb24uXG4gKi9cbkFzc29jaWF0aW9uSWQ/OiBzdHJpbmdcbi8qKlxuICogQW4gYXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFwcGx5IHRvIHRoaXMgcmVzb3VyY2UuXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBBIGtleS12YWx1ZSBwYWlyIHRvIGFzc29jaWF0ZSB3aXRoIGEgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgdGFnLiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIDAgdG8gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGF3czouIFlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIF8sIC4sIC8sID0sICssIGFuZCAtLlxuICovXG5WYWx1ZTogc3RyaW5nXG4vKipcbiAqIFRoZSBrZXkgbmFtZSBvZiB0aGUgdGFnLiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIDEgdG8gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGF3czouIFlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIF8sIC4sIC8sID0sICssIGFuZCAtLlxuICovXG5LZXk6IHN0cmluZ1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVrcy1wb2RpZGVudGl0eWFzc29jaWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVrcy1wb2RpZGVudGl0eWFzc29jaWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYW4gQW1hem9uIEVLUyBQb2RJZGVudGl0eUFzc29jaWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfRUtTX1BPRElERU5USVRZQVNTT0NJQVRJT04ge1xuLyoqXG4gKiBUaGUgY2x1c3RlciB0aGF0IHRoZSBwb2QgaWRlbnRpdHkgYXNzb2NpYXRpb24gaXMgY3JlYXRlZCBmb3IuXG4gKi9cbkNsdXN0ZXJOYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIElBTSByb2xlIEFSTiB0aGF0IHRoZSBwb2QgaWRlbnRpdHkgYXNzb2NpYXRpb24gaXMgY3JlYXRlZCBmb3IuXG4gKi9cblJvbGVBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgS3ViZXJuZXRlcyBuYW1lc3BhY2UgdGhhdCB0aGUgcG9kIGlkZW50aXR5IGFzc29jaWF0aW9uIGlzIGNyZWF0ZWQgZm9yLlxuICovXG5OYW1lc3BhY2U6IHN0cmluZ1xuLyoqXG4gKiBUaGUgS3ViZXJuZXRlcyBzZXJ2aWNlIGFjY291bnQgdGhhdCB0aGUgcG9kIGlkZW50aXR5IGFzc29jaWF0aW9uIGlzIGNyZWF0ZWQgZm9yLlxuICovXG5TZXJ2aWNlQWNjb3VudDogc3RyaW5nXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIHBvZCBpZGVudGl0eSBhc3NvY2lhdGlvbi5cbiAqL1xuQXNzb2NpYXRpb25Bcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBwb2QgaWRlbnRpdHkgYXNzb2NpYXRpb24uXG4gKi9cbkFzc29jaWF0aW9uSWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIFRhcmdldCBSb2xlIEFybiBvZiB0aGUgcG9kIGlkZW50aXR5IGFzc29jaWF0aW9uLlxuICovXG5UYXJnZXRSb2xlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBFeHRlcm5hbCBJZCBvZiB0aGUgcG9kIGlkZW50aXR5IGFzc29jaWF0aW9uLlxuICovXG5FeHRlcm5hbElkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBEaXNhYmxlIFNlc3Npb24gVGFncyBvZiB0aGUgcG9kIGlkZW50aXR5IGFzc29jaWF0aW9uLlxuICovXG5EaXNhYmxlU2Vzc2lvblRhZ3M/OiBib29sZWFuXG4vKipcbiAqIEFuIGFycmF5IG9mIGtleS12YWx1ZSBwYWlycyB0byBhcHBseSB0byB0aGlzIHJlc291cmNlLlxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogQSBrZXktdmFsdWUgcGFpciB0byBhc3NvY2lhdGUgd2l0aCBhIHJlc291cmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBrZXkgbmFtZSBvZiB0aGUgdGFnLiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIDEgdG8gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGF3czouIFlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIF8sIC4sIC8sID0sICssIGFuZCAtLlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmFsdWUgZm9yIHRoZSB0YWcuIFlvdSBjYW4gc3BlY2lmeSBhIHZhbHVlIHRoYXQgaXMgMCB0byAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2Fubm90IGJlIHByZWZpeGVkIHdpdGggYXdzOi4gWW91IGNhbiB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogdGhlIHNldCBvZiBVbmljb2RlIGxldHRlcnMsIGRpZ2l0cywgd2hpdGVzcGFjZSwgXywgLiwgLywgPSwgKywgYW5kIC0uXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbiJdfQ==
@@ -70,7 +70,7 @@ export interface _AWS_FIS_EXPERIMENTTEMPLATE {
70
70
  StopConditions: ExperimentTemplateStopConditionList;
71
71
  LogConfiguration?: ExperimentTemplateLogConfiguration;
72
72
  RoleArn: RoleArn;
73
- Tags: {
73
+ Tags?: {
74
74
  /**
75
75
  * This interface was referenced by `undefined`'s JSON-Schema definition
76
76
  * via the `patternProperty` ".{1,128}".
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWZpcy1leHBlcmltZW50dGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtZmlzLWV4cGVyaW1lbnR0ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlSWQgPSBzdHJpbmdcbi8qKlxuICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGV4cGVyaW1lbnQgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZURlc2NyaXB0aW9uID0gc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgcmVzb3VyY2UgdHlwZS4gVGhlIHJlc291cmNlIHR5cGUgbXVzdCBiZSBzdXBwb3J0ZWQgZm9yIHRoZSBzcGVjaWZpZWQgYWN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZVR5cGUgPSBzdHJpbmdcbmV4cG9ydCB0eXBlIFJlc291cmNlQXJuID0gc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZXMgKEFSTnMpIG9mIHRoZSB0YXJnZXQgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZUFybkxpc3QgPSBSZXNvdXJjZUFybltdXG4vKipcbiAqIFRoZSBhdHRyaWJ1dGUgcGF0aCBmb3IgdGhlIGZpbHRlci5cbiAqL1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0RmlsdGVyUGF0aCA9IHN0cmluZ1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0RmlsdGVyVmFsdWUgPSBzdHJpbmdcbi8qKlxuICogVGhlIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIHRoZSBmaWx0ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldEZpbHRlclZhbHVlcyA9IEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldEZpbHRlclZhbHVlW11cbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldEZpbHRlckxpc3QgPSBFeHBlcmltZW50VGVtcGxhdGVUYXJnZXRGaWx0ZXJbXVxuLyoqXG4gKiBTY29wZXMgdGhlIGlkZW50aWZpZWQgcmVzb3VyY2VzIHRvIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHRoZSByZXNvdXJjZXMgYXQgcmFuZG9tLCBvciBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0U2VsZWN0aW9uTW9kZSA9IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGFjdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uSWQgPSBzdHJpbmdcbi8qKlxuICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGFjdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uSXRlbURlc2NyaXB0aW9uID0gc3RyaW5nXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSw2NH1cIi5cbiAqL1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uSXRlbVBhcmFtZXRlciA9IHN0cmluZ1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsNjR9XCIuXG4gKi9cbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbkl0ZW1UYXJnZXQgPSBzdHJpbmdcbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbkl0ZW1TdGFydEFmdGVyID0gc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgYWN0aW9ucyB0aGF0IG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSB0aGUgY3VycmVudCBhY3Rpb24gc3RhcnRzLlxuICovXG5leHBvcnQgdHlwZSBFeHBlcmltZW50VGVtcGxhdGVBY3Rpb25JdGVtU3RhcnRBZnRlckxpc3QgPSBFeHBlcmltZW50VGVtcGxhdGVBY3Rpb25JdGVtU3RhcnRBZnRlcltdXG5leHBvcnQgdHlwZSBTdG9wQ29uZGl0aW9uU291cmNlID0gc3RyaW5nXG5leHBvcnQgdHlwZSBTdG9wQ29uZGl0aW9uVmFsdWUgPSBzdHJpbmdcbi8qKlxuICogT25lIG9yIG1vcmUgc3RvcCBjb25kaXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBFeHBlcmltZW50VGVtcGxhdGVTdG9wQ29uZGl0aW9uTGlzdCA9IEV4cGVyaW1lbnRUZW1wbGF0ZVN0b3BDb25kaXRpb25bXVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgYW4gSUFNIHJvbGUgdGhhdCBncmFudHMgdGhlIEFXUyBGSVMgc2VydmljZSBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gc2VydmljZSBhY3Rpb25zIG9uIHlvdXIgYmVoYWxmLlxuICovXG5leHBvcnQgdHlwZSBSb2xlQXJuID0gc3RyaW5nXG5cbi8qKlxuICogUmVzb3VyY2Ugc2NoZW1hIGZvciBBV1M6OkZJUzo6RXhwZXJpbWVudFRlbXBsYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19GSVNfRVhQRVJJTUVOVFRFTVBMQVRFIHtcbklkPzogRXhwZXJpbWVudFRlbXBsYXRlSWRcbkRlc2NyaXB0aW9uOiBFeHBlcmltZW50VGVtcGxhdGVEZXNjcmlwdGlvblxuVGFyZ2V0czogRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0TWFwXG5BY3Rpb25zPzogRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uTWFwXG5TdG9wQ29uZGl0aW9uczogRXhwZXJpbWVudFRlbXBsYXRlU3RvcENvbmRpdGlvbkxpc3RcbkxvZ0NvbmZpZ3VyYXRpb24/OiBFeHBlcmltZW50VGVtcGxhdGVMb2dDb25maWd1cmF0aW9uXG5Sb2xlQXJuOiBSb2xlQXJuXG5UYWdzOiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSwxMjh9XCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbkV4cGVyaW1lbnRPcHRpb25zPzogRXhwZXJpbWVudFRlbXBsYXRlRXhwZXJpbWVudE9wdGlvbnNcbkV4cGVyaW1lbnRSZXBvcnRDb25maWd1cmF0aW9uPzogRXhwZXJpbWVudFRlbXBsYXRlRXhwZXJpbWVudFJlcG9ydENvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIHRhcmdldHMgZm9yIHRoZSBleHBlcmltZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldE1hcCB7XG5bazogc3RyaW5nXTogRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0XG59XG4vKipcbiAqIFNwZWNpZmllcyBhIHRhcmdldCBmb3IgYW4gZXhwZXJpbWVudC5cbiAqIFxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldE1hcGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLDY0fVwiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldCB7XG5SZXNvdXJjZVR5cGU6IFJlc291cmNlVHlwZVxuUmVzb3VyY2VBcm5zPzogUmVzb3VyY2VBcm5MaXN0XG5SZXNvdXJjZVRhZ3M/OiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSwxMjh9XCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cblBhcmFtZXRlcnM/OiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSw2NH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuRmlsdGVycz86IEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldEZpbHRlckxpc3RcblNlbGVjdGlvbk1vZGU6IEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldFNlbGVjdGlvbk1vZGVcbn1cbi8qKlxuICogRGVzY3JpYmVzIGEgZmlsdGVyIHVzZWQgZm9yIHRoZSB0YXJnZXQgcmVzb3VyY2UgaW5wdXQgaW4gYW4gZXhwZXJpbWVudCB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50VGVtcGxhdGVUYXJnZXRGaWx0ZXIge1xuUGF0aDogRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0RmlsdGVyUGF0aFxuVmFsdWVzOiBFeHBlcmltZW50VGVtcGxhdGVUYXJnZXRGaWx0ZXJWYWx1ZXNcbn1cbi8qKlxuICogVGhlIGFjdGlvbnMgZm9yIHRoZSBleHBlcmltZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbk1hcCB7XG5bazogc3RyaW5nXTogRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uXG59XG4vKipcbiAqIFNwZWNpZmllcyBhbiBhY3Rpb24gZm9yIHRoZSBleHBlcmltZW50IHRlbXBsYXRlLlxuICogXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uTWFwYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCJbXFxTXXsxLDY0fVwiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbiB7XG5BY3Rpb25JZDogQWN0aW9uSWRcbkRlc2NyaXB0aW9uPzogRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uSXRlbURlc2NyaXB0aW9uXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uLCBpZiBhcHBsaWNhYmxlLlxuICovXG5QYXJhbWV0ZXJzPzoge1xuW2s6IHN0cmluZ106IEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbkl0ZW1QYXJhbWV0ZXJcbn1cbi8qKlxuICogT25lIG9yIG1vcmUgdGFyZ2V0cyBmb3IgdGhlIGFjdGlvbi5cbiAqL1xuVGFyZ2V0cz86IHtcbltrOiBzdHJpbmddOiBFeHBlcmltZW50VGVtcGxhdGVBY3Rpb25JdGVtVGFyZ2V0XG59XG5TdGFydEFmdGVyPzogRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uSXRlbVN0YXJ0QWZ0ZXJMaXN0XG59XG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRUZW1wbGF0ZVN0b3BDb25kaXRpb24ge1xuU291cmNlOiBTdG9wQ29uZGl0aW9uU291cmNlXG5WYWx1ZT86IFN0b3BDb25kaXRpb25WYWx1ZVxufVxuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50VGVtcGxhdGVMb2dDb25maWd1cmF0aW9uIHtcbkNsb3VkV2F0Y2hMb2dzQ29uZmlndXJhdGlvbj86IHtcbkxvZ0dyb3VwQXJuOiBzdHJpbmdcbn1cblMzQ29uZmlndXJhdGlvbj86IHtcbkJ1Y2tldE5hbWU6IHN0cmluZ1xuUHJlZml4Pzogc3RyaW5nXG59XG5Mb2dTY2hlbWFWZXJzaW9uOiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhwZXJpbWVudFRlbXBsYXRlRXhwZXJpbWVudE9wdGlvbnMge1xuLyoqXG4gKiBUaGUgYWNjb3VudCB0YXJnZXRpbmcgc2V0dGluZyBmb3IgdGhlIGV4cGVyaW1lbnQgdGVtcGxhdGUuXG4gKi9cbkFjY291bnRUYXJnZXRpbmc/OiAoXCJtdWx0aS1hY2NvdW50XCIgfCBcInNpbmdsZS1hY2NvdW50XCIpXG4vKipcbiAqIFRoZSB0YXJnZXQgcmVzb2x1dGlvbiBmYWlsdXJlIG1vZGUgZm9yIHRoZSBleHBlcmltZW50IHRlbXBsYXRlLlxuICovXG5FbXB0eVRhcmdldFJlc29sdXRpb25Nb2RlPzogKFwiZmFpbFwiIHwgXCJza2lwXCIpXG59XG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRUZW1wbGF0ZUV4cGVyaW1lbnRSZXBvcnRDb25maWd1cmF0aW9uIHtcbk91dHB1dHM6IHtcbkV4cGVyaW1lbnRSZXBvcnRTM0NvbmZpZ3VyYXRpb246IHtcbkJ1Y2tldE5hbWU6IHN0cmluZ1xuUHJlZml4Pzogc3RyaW5nXG59XG59XG5EYXRhU291cmNlcz86IHtcbkNsb3VkV2F0Y2hEYXNoYm9hcmRzPzogQ2xvdWRXYXRjaERhc2hib2FyZFtdXG59XG5QcmVFeHBlcmltZW50RHVyYXRpb24/OiBzdHJpbmdcblBvc3RFeHBlcmltZW50RHVyYXRpb24/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRXYXRjaERhc2hib2FyZCB7XG5EYXNoYm9hcmRJZGVudGlmaWVyOiBzdHJpbmdcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWZpcy1leHBlcmltZW50dGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtZmlzLWV4cGVyaW1lbnR0ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlSWQgPSBzdHJpbmdcbi8qKlxuICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGV4cGVyaW1lbnQgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZURlc2NyaXB0aW9uID0gc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgcmVzb3VyY2UgdHlwZS4gVGhlIHJlc291cmNlIHR5cGUgbXVzdCBiZSBzdXBwb3J0ZWQgZm9yIHRoZSBzcGVjaWZpZWQgYWN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZVR5cGUgPSBzdHJpbmdcbmV4cG9ydCB0eXBlIFJlc291cmNlQXJuID0gc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZXMgKEFSTnMpIG9mIHRoZSB0YXJnZXQgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZUFybkxpc3QgPSBSZXNvdXJjZUFybltdXG4vKipcbiAqIFRoZSBhdHRyaWJ1dGUgcGF0aCBmb3IgdGhlIGZpbHRlci5cbiAqL1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0RmlsdGVyUGF0aCA9IHN0cmluZ1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0RmlsdGVyVmFsdWUgPSBzdHJpbmdcbi8qKlxuICogVGhlIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIHRoZSBmaWx0ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldEZpbHRlclZhbHVlcyA9IEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldEZpbHRlclZhbHVlW11cbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldEZpbHRlckxpc3QgPSBFeHBlcmltZW50VGVtcGxhdGVUYXJnZXRGaWx0ZXJbXVxuLyoqXG4gKiBTY29wZXMgdGhlIGlkZW50aWZpZWQgcmVzb3VyY2VzIHRvIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHRoZSByZXNvdXJjZXMgYXQgcmFuZG9tLCBvciBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0U2VsZWN0aW9uTW9kZSA9IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGFjdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uSWQgPSBzdHJpbmdcbi8qKlxuICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGFjdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uSXRlbURlc2NyaXB0aW9uID0gc3RyaW5nXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSw2NH1cIi5cbiAqL1xuZXhwb3J0IHR5cGUgRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uSXRlbVBhcmFtZXRlciA9IHN0cmluZ1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsNjR9XCIuXG4gKi9cbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbkl0ZW1UYXJnZXQgPSBzdHJpbmdcbmV4cG9ydCB0eXBlIEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbkl0ZW1TdGFydEFmdGVyID0gc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgYWN0aW9ucyB0aGF0IG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSB0aGUgY3VycmVudCBhY3Rpb24gc3RhcnRzLlxuICovXG5leHBvcnQgdHlwZSBFeHBlcmltZW50VGVtcGxhdGVBY3Rpb25JdGVtU3RhcnRBZnRlckxpc3QgPSBFeHBlcmltZW50VGVtcGxhdGVBY3Rpb25JdGVtU3RhcnRBZnRlcltdXG5leHBvcnQgdHlwZSBTdG9wQ29uZGl0aW9uU291cmNlID0gc3RyaW5nXG5leHBvcnQgdHlwZSBTdG9wQ29uZGl0aW9uVmFsdWUgPSBzdHJpbmdcbi8qKlxuICogT25lIG9yIG1vcmUgc3RvcCBjb25kaXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBFeHBlcmltZW50VGVtcGxhdGVTdG9wQ29uZGl0aW9uTGlzdCA9IEV4cGVyaW1lbnRUZW1wbGF0ZVN0b3BDb25kaXRpb25bXVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgYW4gSUFNIHJvbGUgdGhhdCBncmFudHMgdGhlIEFXUyBGSVMgc2VydmljZSBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gc2VydmljZSBhY3Rpb25zIG9uIHlvdXIgYmVoYWxmLlxuICovXG5leHBvcnQgdHlwZSBSb2xlQXJuID0gc3RyaW5nXG5cbi8qKlxuICogUmVzb3VyY2Ugc2NoZW1hIGZvciBBV1M6OkZJUzo6RXhwZXJpbWVudFRlbXBsYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19GSVNfRVhQRVJJTUVOVFRFTVBMQVRFIHtcbklkPzogRXhwZXJpbWVudFRlbXBsYXRlSWRcbkRlc2NyaXB0aW9uOiBFeHBlcmltZW50VGVtcGxhdGVEZXNjcmlwdGlvblxuVGFyZ2V0czogRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0TWFwXG5BY3Rpb25zPzogRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uTWFwXG5TdG9wQ29uZGl0aW9uczogRXhwZXJpbWVudFRlbXBsYXRlU3RvcENvbmRpdGlvbkxpc3RcbkxvZ0NvbmZpZ3VyYXRpb24/OiBFeHBlcmltZW50VGVtcGxhdGVMb2dDb25maWd1cmF0aW9uXG5Sb2xlQXJuOiBSb2xlQXJuXG5UYWdzPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsMTI4fVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG5FeHBlcmltZW50T3B0aW9ucz86IEV4cGVyaW1lbnRUZW1wbGF0ZUV4cGVyaW1lbnRPcHRpb25zXG5FeHBlcmltZW50UmVwb3J0Q29uZmlndXJhdGlvbj86IEV4cGVyaW1lbnRUZW1wbGF0ZUV4cGVyaW1lbnRSZXBvcnRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSB0YXJnZXRzIGZvciB0aGUgZXhwZXJpbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50VGVtcGxhdGVUYXJnZXRNYXAge1xuW2s6IHN0cmluZ106IEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldFxufVxuLyoqXG4gKiBTcGVjaWZpZXMgYSB0YXJnZXQgZm9yIGFuIGV4cGVyaW1lbnQuXG4gKiBcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGBFeHBlcmltZW50VGVtcGxhdGVUYXJnZXRNYXBgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSw2NH1cIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50VGVtcGxhdGVUYXJnZXQge1xuUmVzb3VyY2VUeXBlOiBSZXNvdXJjZVR5cGVcblJlc291cmNlQXJucz86IFJlc291cmNlQXJuTGlzdFxuUmVzb3VyY2VUYWdzPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsMTI4fVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG5QYXJhbWV0ZXJzPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsNjR9XCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbkZpbHRlcnM/OiBFeHBlcmltZW50VGVtcGxhdGVUYXJnZXRGaWx0ZXJMaXN0XG5TZWxlY3Rpb25Nb2RlOiBFeHBlcmltZW50VGVtcGxhdGVUYXJnZXRTZWxlY3Rpb25Nb2RlXG59XG4vKipcbiAqIERlc2NyaWJlcyBhIGZpbHRlciB1c2VkIGZvciB0aGUgdGFyZ2V0IHJlc291cmNlIGlucHV0IGluIGFuIGV4cGVyaW1lbnQgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0RmlsdGVyIHtcblBhdGg6IEV4cGVyaW1lbnRUZW1wbGF0ZVRhcmdldEZpbHRlclBhdGhcblZhbHVlczogRXhwZXJpbWVudFRlbXBsYXRlVGFyZ2V0RmlsdGVyVmFsdWVzXG59XG4vKipcbiAqIFRoZSBhY3Rpb25zIGZvciB0aGUgZXhwZXJpbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50VGVtcGxhdGVBY3Rpb25NYXAge1xuW2s6IHN0cmluZ106IEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvblxufVxuLyoqXG4gKiBTcGVjaWZpZXMgYW4gYWN0aW9uIGZvciB0aGUgZXhwZXJpbWVudCB0ZW1wbGF0ZS5cbiAqIFxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbk1hcGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiW1xcU117MSw2NH1cIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50VGVtcGxhdGVBY3Rpb24ge1xuQWN0aW9uSWQ6IEFjdGlvbklkXG5EZXNjcmlwdGlvbj86IEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbkl0ZW1EZXNjcmlwdGlvblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvbiwgaWYgYXBwbGljYWJsZS5cbiAqL1xuUGFyYW1ldGVycz86IHtcbltrOiBzdHJpbmddOiBFeHBlcmltZW50VGVtcGxhdGVBY3Rpb25JdGVtUGFyYW1ldGVyXG59XG4vKipcbiAqIE9uZSBvciBtb3JlIHRhcmdldHMgZm9yIHRoZSBhY3Rpb24uXG4gKi9cblRhcmdldHM/OiB7XG5bazogc3RyaW5nXTogRXhwZXJpbWVudFRlbXBsYXRlQWN0aW9uSXRlbVRhcmdldFxufVxuU3RhcnRBZnRlcj86IEV4cGVyaW1lbnRUZW1wbGF0ZUFjdGlvbkl0ZW1TdGFydEFmdGVyTGlzdFxufVxuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50VGVtcGxhdGVTdG9wQ29uZGl0aW9uIHtcblNvdXJjZTogU3RvcENvbmRpdGlvblNvdXJjZVxuVmFsdWU/OiBTdG9wQ29uZGl0aW9uVmFsdWVcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhwZXJpbWVudFRlbXBsYXRlTG9nQ29uZmlndXJhdGlvbiB7XG5DbG91ZFdhdGNoTG9nc0NvbmZpZ3VyYXRpb24/OiB7XG5Mb2dHcm91cEFybjogc3RyaW5nXG59XG5TM0NvbmZpZ3VyYXRpb24/OiB7XG5CdWNrZXROYW1lOiBzdHJpbmdcblByZWZpeD86IHN0cmluZ1xufVxuTG9nU2NoZW1hVmVyc2lvbjogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIEV4cGVyaW1lbnRUZW1wbGF0ZUV4cGVyaW1lbnRPcHRpb25zIHtcbi8qKlxuICogVGhlIGFjY291bnQgdGFyZ2V0aW5nIHNldHRpbmcgZm9yIHRoZSBleHBlcmltZW50IHRlbXBsYXRlLlxuICovXG5BY2NvdW50VGFyZ2V0aW5nPzogKFwibXVsdGktYWNjb3VudFwiIHwgXCJzaW5nbGUtYWNjb3VudFwiKVxuLyoqXG4gKiBUaGUgdGFyZ2V0IHJlc29sdXRpb24gZmFpbHVyZSBtb2RlIGZvciB0aGUgZXhwZXJpbWVudCB0ZW1wbGF0ZS5cbiAqL1xuRW1wdHlUYXJnZXRSZXNvbHV0aW9uTW9kZT86IChcImZhaWxcIiB8IFwic2tpcFwiKVxufVxuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50VGVtcGxhdGVFeHBlcmltZW50UmVwb3J0Q29uZmlndXJhdGlvbiB7XG5PdXRwdXRzOiB7XG5FeHBlcmltZW50UmVwb3J0UzNDb25maWd1cmF0aW9uOiB7XG5CdWNrZXROYW1lOiBzdHJpbmdcblByZWZpeD86IHN0cmluZ1xufVxufVxuRGF0YVNvdXJjZXM/OiB7XG5DbG91ZFdhdGNoRGFzaGJvYXJkcz86IENsb3VkV2F0Y2hEYXNoYm9hcmRbXVxufVxuUHJlRXhwZXJpbWVudER1cmF0aW9uPzogc3RyaW5nXG5Qb3N0RXhwZXJpbWVudER1cmF0aW9uPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIENsb3VkV2F0Y2hEYXNoYm9hcmQge1xuRGFzaGJvYXJkSWRlbnRpZmllcjogc3RyaW5nXG59XG4iXX0=
@@ -97,7 +97,7 @@ export interface _AWS_KMS_KEY {
97
97
  * + SM2 key pairs (encryption and decryption *or* signing and verification *or* deriving shared secrets)
98
98
  * + ``SM2`` (China Regions only)
99
99
  */
100
- KeySpec?: ("SYMMETRIC_DEFAULT" | "RSA_2048" | "RSA_3072" | "RSA_4096" | "ECC_NIST_P256" | "ECC_NIST_P384" | "ECC_NIST_P521" | "ECC_SECG_P256K1" | "HMAC_224" | "HMAC_256" | "HMAC_384" | "HMAC_512" | "SM2");
100
+ KeySpec?: ("SYMMETRIC_DEFAULT" | "RSA_2048" | "RSA_3072" | "RSA_4096" | "ECC_NIST_P256" | "ECC_NIST_P384" | "ECC_NIST_P521" | "ECC_SECG_P256K1" | "HMAC_224" | "HMAC_256" | "HMAC_384" | "HMAC_512" | "SM2" | "ML_DSA_44" | "ML_DSA_65" | "ML_DSA_87");
101
101
  /**
102
102
  * Creates a multi-Region primary key that you can replicate in other AWS-Regions. You can't change the ``MultiRegion`` value after the KMS key is created.
103
103
  * For a list of AWS-Regions in which multi-Region keys are supported, see [Multi-Region keys in](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) in the **.