@finbourne/lusid-sdk-angular7
Version:
An angular (7+) SDK for secure access to the LUSID® by FINBOURNE web API
27 lines • 38.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* Pricing context node. In order to price an instrument a number of configuration parameters are required to determine which (a) pricing model (ranging from a simple lookup of a market quote/price through to a Monte-Carlo simulation for the behaviour of its cashflows) (b) vendor library (Lusid internal models or those provided through an external Vendor such as Refinitiv (proprietary) or QuantLib (open source) are used in the pricing. In conjunction with these there are a number of parameters that govern the behaviour of these models. For example, in pricing an Fx volatility dependent product such as an Fx option, there are various parameters that affect model behaviour for the smile. In Lusid a distinction is made between those which are understood natively and those which are only held for use with a given vendor-model combination. The problem is that, unlike market quote data, there are few standards around model descriptions. Hence, apparently similar terminology can be mis-leading; for example in SABR models where the basic parameters are agreed upon but most practical models have used an approximation with adjustments where the parameters can have wildly different meanings. To avoid confusion or mis-behaviour in this area, where parameters are not understood to be interchangeable, they are only settable on a per-library per-model basis, essentially as opaque data that will be given to the Vendor library \"verbatim\" but not used with any other.
* @record
*/
export function PricingContext() { }
if (false) {
/**
* The set of model rules that are available. There may be multiple rules for Vendors, but only one per model-instrument pair. Which of these preference sets is used depends upon the model choice selection if specified, or failing that the global default model specification in the options.
* @type {?|undefined}
*/
PricingContext.prototype.modelRules;
/**
* The choice of which model selection (vendor library, pricing model) to use in evaluation of a given instrument type.
* @type {?|undefined}
*/
PricingContext.prototype.modelChoice;
/**
* Miscellaneous options for controlling pricing.
* @type {?|undefined}
*/
PricingContext.prototype.options;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2luZ0NvbnRleHQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZmluYm91cm5lL2x1c2lkLXNkay1hbmd1bGFyNy8iLCJzb3VyY2VzIjpbImxpYi9nZW5lcmF0ZWQvbW9kZWwvcHJpY2luZ0NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFtQkEsb0NBYUM7Ozs7OztJQVRHLG9DQUFvQzs7Ozs7SUFJcEMscUNBQWlEOzs7OztJQUlqRCxpQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExVU0lEIEFQSVxuICogIyBJbnRyb2R1Y3Rpb24gIFRoaXMgcGFnZSBkb2N1bWVudHMgdGhlIFtMVVNJRCBBUElzXShodHRwczovL2FwaS5sdXNpZC5jb20vc3dhZ2dlciksIHdoaWNoIGFsbG93cyBhdXRob3Jpc2VkIGNsaWVudHMgdG8gcXVlcnkgYW5kIHVwZGF0ZSB0aGVpciBkYXRhIHdpdGhpbiB0aGUgTFVTSUQgcGxhdGZvcm0uICBTREtzIHRvIGludGVyYWN0IHdpdGggdGhlIExVU0lEIEFQSXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgZm9sbG93aW5nIGxhbmd1YWdlcyA6ICAqIFtDI10oaHR0cHM6Ly9naXRodWIuY29tL2ZpbmJvdXJuZS9sdXNpZC1zZGstY3NoYXJwKSAqIFtKYXZhXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1qYXZhKSAqIFtKYXZhU2NyaXB0XShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1qcykgKiBbUHl0aG9uXShodHRwczovL2dpdGh1Yi5jb20vZmluYm91cm5lL2x1c2lkLXNkay1weXRob24pICAjIERhdGEgTW9kZWwgIFRoZSBMVVNJRCBBUEkgaGFzIGEgcmVsYXRpdmVseSBsaWdodHdlaWdodCBidXQgZXh0cmVtZWx5IHBvd2VyZnVsIGRhdGEgbW9kZWwuICAgT25lIG9mIHRoZSBnb2FscyBvZiBMVVNJRCB3YXMgbm90IHRvIGVuZm9yY2Ugb24gY2xpZW50cyBhIHNpbmdsZSByaWdpZCBkYXRhIG1vZGVsIGJ1dCByYXRoZXIgdG8gcHJvdmlkZSBhIGZsZXhpYmxlIGZvdW5kYXRpb24gb250byB3aGljaCBjbGllbnRzIGNhbiBzdHJlYW1saW5lIHRoZWlyIGRhdGEuICAgT25lIG9mIHRoZSBwcmltYXJ5IHRvb2xzIHRvIGV4dGVuZCB0aGUgZGF0YSBtb2RlbCBpcyB0aHJvdWdoIHVzaW5nIHByb3BlcnRpZXMuICBQcm9wZXJ0aWVzIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYW1vbmdzdCBvdGhlcnM6IC0gKiBUcmFuc2FjdGlvbnMgKiBJbnN0cnVtZW50cyAqIFBvcnRmb2xpb3MgICBUaGUgTFVTSUQgZGF0YSBtb2RlbCBpcyBleHBvc2VkIHRocm91Z2ggdGhlIExVU0lEIEFQSXMuICBUaGUgQVBJcyBwcm92aWRlIGFjY2VzcyB0byBib3RoIGJ1c2luZXNzIG9iamVjdHMgYW5kIHRoZSBtZXRhIGRhdGEgdXNlZCB0byBjb25maWd1cmUgdGhlIHN5c3RlbXMgYmVoYXZpb3Vycy4gICBUaGUga2V5IGJ1c2luZXNzIGVudGl0aWVzIGFyZTogLSAqICoqUG9ydGZvbGlvcyoqIEEgcG9ydGZvbGlvIGlzIHRoZSBwcmltYXJ5IGNvbnRhaW5lciBmb3IgdHJhbnNhY3Rpb25zIGFuZCBob2xkaW5ncy4gICogKipEZXJpdmVkIFBvcnRmb2xpb3MqKiBEZXJpdmVkIHBvcnRmb2xpb3MgYWxsb3cgcG9ydGZvbGlvcyB0byBiZSBjcmVhdGVkIGJhc2VkIG9uIG90aGVyIHBvcnRmb2xpb3MsIGJ5IG92ZXJyaWRpbmcgb3Igb3ZlcmxheWluZyBzcGVjaWZpYyBpdGVtcyAqICoqSG9sZGluZ3MqKiBBIGhvbGRpbmcgaXMgYSBwb3NpdGlvbiBhY2NvdW50IGZvciBhIGluc3RydW1lbnQgd2l0aGluIGEgcG9ydGZvbGlvLiAgSG9sZGluZ3MgY2FuIG9ubHkgYmUgYWRqdXN0ZWQgdmlhIHRyYW5zYWN0aW9ucy4gKiAqKlRyYW5zYWN0aW9ucyoqIEEgVHJhbnNhY3Rpb24gaXMgYSBzb3VyY2Ugb2YgdHJhbnNhY3Rpb25zIHVzZWQgdG8gbWFuaXB1bGF0ZSBob2xkaW5ncy4gICogKipDb3Jwb3JhdGUgQWN0aW9ucyoqIEEgY29ycG9yYXRlIGFjdGlvbiBpcyBhIG1hcmtldCBldmVudCB3aGljaCBvY2N1cnMgdG8gYSBpbnN0cnVtZW50LCBmb3IgZXhhbXBsZSBhIHN0b2NrIHNwbGl0ICogKipJbnN0cnVtZW50cyoqICBBIGluc3RydW1lbnQgcmVwcmVzZW50cyBhIGN1cnJlbmN5LCB0cmFkYWJsZSBpbnN0cnVtZW50IG9yIE9UQyBjb250cmFjdCB0aGF0IGlzIGF0dGFjaGVkIHRvIGEgdHJhbnNhY3Rpb24gYW5kIGEgaG9sZGluZy4gKiAqKlByb3BlcnRpZXMqKiBTZXZlcmFsIGVudGl0aWVzIGFsbG93IGFkZGl0aW9uYWwgdXNlciBkZWZpbmVkIHByb3BlcnRpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZW0uICAgRm9yIGV4YW1wbGUsIGEgUG9ydGZvbGlvIG1hbmFnZXIgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBhIHBvcnRmb2xpbyAgTWV0YSBkYXRhIGluY2x1ZGVzOiAtICogKipUcmFuc2FjdGlvbiBUeXBlcyoqIFRyYW5zYWN0aW9ucyBhcmUgYm9va2VkIHdpdGggYSBzcGVjaWZpYyB0cmFuc2FjdGlvbiB0eXBlLiAgVGhlIHR5cGVzIGFyZSBjbGllbnQgZGVmaW5lZCBhbmQgYXJlIHVzZWQgdG8gbWFwIHRoZSBUcmFuc2FjdGlvbiB0byBhIHNlcmllcyBvZiBtb3ZlbWVudHMgd2hpY2ggdXBkYXRlIHRoZSBwb3J0Zm9saW8gaG9sZGluZ3MuICAqICoqUHJvcGVydGllcyBUeXBlcyoqIFR5cGVzIG9mIHVzZXIgZGVmaW5lZCBwcm9wZXJ0aWVzIHVzZWQgd2l0aGluIHRoZSBzeXN0ZW0uICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBkYXRhIG1vZGVsIHRoYXQgTFVTSUQgZXhwb3NlcyB2aWEgdGhlIEFQSXMuICAjIyBTY29wZSAgQWxsIGRhdGEgaW4gTFVTSUQgaXMgc2VncmVnYXRlZCBhdCB0aGUgY2xpZW50IGxldmVsLiAgRW50aXRpZXMgaW4gTFVTSUQgYXJlIGlkZW50aWZpYWJsZSBieSBhIHVuaXF1ZSBjb2RlLiAgRXZlcnkgZW50aXR5IGxpdmVzIHdpdGhpbiBhIGxvZ2ljYWwgZGF0YSBwYXJ0aXRpb24ga25vd24gYXMgYSBTY29wZS4gIFNjb3BlIGlzIGFuIGlkZW50aXR5IG5hbWVzcGFjZSBhbGxvd2luZyB0d28gZW50aXRpZXMgd2l0aCB0aGUgc2FtZSB1bmlxdWUgY29kZSB0byBjby1leGlzdCB3aXRoaW4gaW5kaXZpZHVhbCBhZGRyZXNzIHNwYWNlcy4gIEZvciBleGFtcGxlLCBwcmljZXMgZm9yIGVxdWl0aWVzIGZyb20gZGlmZmVyZW50IHZlbmRvcnMgbWF5IGJlIHVwbG9hZGVkIGludG8gZGlmZmVyZW50IHNjb3BlcyBzdWNoIGFzIGBjbGllbnQvdmVuZG9yMWAgYW5kIGBjbGllbnQvdmVuZG9yMmAuICBBIHBvcnRmb2xpbyBtYXkgdGhlbiBiZSB2YWx1ZWQgdXNpbmcgZWl0aGVyIG9mIHRoZSBwcmljZSBzb3VyY2VzIGJ5IHJlZmVyZW5jaW5nIHRoZSBhcHByb3ByaWF0ZSBzY29wZS4gIExVU0lEIENsaWVudHMgY2Fubm90IGFjY2VzcyBzY29wZXMgb2Ygb3RoZXIgY2xpZW50cy4gICMjIFNjaGVtYSAgQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgZW50aXRpZXMgdXNlZCBieSB0aGUgQVBJIGFuZCBwYXJhbWV0ZXJzIGZvciBlbmRwb2ludHMgd2hpY2ggdGFrZSBhIEpTT04gZG9jdW1lbnQgY2FuIGJlIHJldHJpZXZlZCB2aWEgdGhlIGBzY2hlbWFgIGVuZHBvaW50LiAgIyMgSW5zdHJ1bWVudHMgIExVU0lEIGhhcyBpdHMgb3duIGJ1aWx0LWluIGluc3RydW1lbnQgbWFzdGVyIHdoaWNoIHlvdSBjYW4gdXNlIHRvIG1hc3RlciB5b3VyIG93biBpbnN0cnVtZW50IHVuaXZlcnNlLiAgRXZlcnkgaW5zdHJ1bWVudCBtdXN0IGJlIGNyZWF0ZWQgd2l0aCBvbmUgb3IgbW9yZSB1bmlxdWUgbWFya2V0IGlkZW50aWZpZXJzLCBzdWNoIGFzIFtGSUdJXShodHRwczovL29wZW5maWdpLmNvbS8pLiBGb3IgYW55IG5vbi1saXN0ZWQgaW5zdHJ1bWVudHMgKGVnIE9UQ3MpLCB5b3UgY2FuIHVwbG9hZCBhbiBpbnN0cnVtZW50IGFnYWluc3QgYSBjdXN0b20gSUQgb2YgeW91ciBjaG9vc2luZy4gIEluIGFkZGl0aW9uLCBMVVNJRCB3aWxsIGFsbG9jYXRlIGVhY2ggaW5zdHJ1bWVudCBhIHVuaXF1ZSAnTFVTSUQgaW5zdHJ1bWVudCBpZGVudGlmaWVyJy4gVGhlIExVU0lEIGluc3RydW1lbnQgaWRlbnRpZmllciBpcyB3aGF0IGlzIHVzZWQgd2hlbiB1cGxvYWRpbmcgdHJhbnNhY3Rpb25zLCBob2xkaW5ncywgcHJpY2VzLCBldGMuIFRoZSBBUEkgZXhwb3NlcyBhbiBgaW5zdHJ1bWVudC9sb29rdXBgIGVuZHBvaW50IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGxvb2t1cCB0aGVzZSBMVVNJRCBpZGVudGlmaWVycyB1c2luZyB0aGVpciBtYXJrZXQgaWRlbnRpZmllcnMuICBDYXNoIGNhbiBiZSByZWZlcmVuY2VkIHVzaW5nIHRoZSBJU08gY3VycmVuY3kgY29kZSBwcmVmaXhlZCB3aXRoIFxcXCJgQ0NZX2BcXFwiIGUuZy4gYENDWV9HQlBgICAjIyBJbnN0cnVtZW50IFByaWNlcyAoQW5hbHl0aWNzKSAgSW5zdHJ1bWVudCBwcmljZXMgYXJlIHN0b3JlZCBpbiBMVVNJRCdzIEFuYWx5dGljcyBTdG9yZSAgfCBGaWVsZHxUeXBlfERlc2NyaXB0aW9uIHwgfCAtLS18LS0tfC0tLSB8IHwgSW5zdHJ1bWVudFVpZHxzdHJpbmd8VW5pcXVlIGluc3RydW1lbnQgaWRlbnRpZmllciB8IHwgVmFsdWV8ZGVjaW1hbHxWYWx1ZSBvZiB0aGUgYW5hbHl0aWMsIGVnIHByaWNlIHwgfCBEZW5vbWluYXRpb258c3RyaW5nfFVuZGVybHlpbmcgdW5pdCBvZiB0aGUgYW5hbHl0aWMsIGVnIGN1cnJlbmN5LCBFUFMgZXRjLiB8ICAgIyMgSW5zdHJ1bWVudCBEYXRhICBJbnN0cnVtZW50IGRhdGEgY2FuIGJlIHVwbG9hZGVkIHRvIHRoZSBzeXN0ZW0gdXNpbmcgdGhlIFtJbnN0cnVtZW50IFByb3BlcnRpZXNdKCN0YWcvSW5zdHJ1bWVudFByb3BlcnRpZXMpIGVuZHBvaW50LiAgfCBGaWVsZHxUeXBlfERlc2NyaXB0aW9uIHwgfCAtLS18LS0tfC0tLSB8IHwgS2V5fHByb3BlcnR5a2V5fFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5LiBUaGlzIHRha2VzIHRoZSBmb3JtYXQge2RvbWFpbn0ve3Njb3BlfS97Y29kZX0gZS5nLiAnSW5zdHJ1bWVudC9zeXN0ZW0vTmFtZScgb3IgJ1RyYW5zYWN0aW9uL3N0cmF0ZWd5L3F1YW50c2lnbmFsJy4gfCB8IFZhbHVlfHN0cmluZ3xUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiB8IHwgRWZmZWN0aXZlRnJvbXxkYXRldGltZW9mZnNldHxUaGUgZWZmZWN0aXZlIGRhdGV0aW1lIGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IGlzIHZhbGlkLiB8ICAgIyMgUG9ydGZvbGlvcyAgUG9ydGZvbGlvcyBhcmUgdGhlIHRvcC1sZXZlbCBlbnRpdHkgY29udGFpbmVycyB3aXRoaW4gTFVTSUQsIGNvbnRhaW5pbmcgdHJhbnNhY3Rpb25zLCBjb3Jwb3JhdGUgYWN0aW9ucyBhbmQgaG9sZGluZ3MuICAgIFRoZSB0cmFuc2FjdGlvbnMgYnVpbGQgdXAgdGhlIHBvcnRmb2xpbyBob2xkaW5ncyBvbiB3aGljaCB2YWx1YXRpb25zLCBhbmFseXRpY3MgcHJvZml0ICYgbG9zcyBhbmQgcmlzayBjYW4gYmUgY2FsY3VsYXRlZC4gICAgIFByb3BlcnRpZXMgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBQb3J0Zm9saW9zIHRvIGFkZCBpbiBhZGRpdGlvbmFsIG1vZGVsIGRhdGEuICBQb3J0Zm9saW8gcHJvcGVydGllcyBjYW4gYmUgY2hhbmdlZCBvdmVyIHRpbWUgYXMgd2VsbC4gIEZvciBleGFtcGxlLCB0byBhbGxvdyBhIFBvcnRmb2xpbyBNYW5hZ2VyIHRvIGJlIGxpbmtlZCB3aXRoIGEgUG9ydGZvbGlvLiAgQWRkaXRpb25hbGx5LCBwb3J0Zm9saW9zIGNhbiBiZSBzZWN1cml0aXNlZCBhbmQgaGVsZCBieSBvdGhlciBwb3J0Zm9saW9zLCBhbGxvd2luZyBMVVNJRCB0byBwZXJmb3JtIFxcXCJkcmlsbC10aHJvdWdoXFxcIiBpbnRvIHVuZGVybHlpbmcgZnVuZCBob2xkaW5ncyAgIyMjIFJlZmVyZW5jZSBQb3J0Zm9saW9zIFJlZmVyZW5jZSBwb3J0Zm9saW9zIGFyZSBwb3J0Zm9saW9zIHRoYXQgY29udGFpbiBvbmx5IHdlaWdodHMsIGFzIG9wcG9zZWQgdG8gdHJhbnNhY3Rpb25zLCBhbmQgYXJlIGRlc2lnbmVkIHRvIHJlcHJlc2VudCBlbnRpdGllcyBzdWNoIGFzIGluZGljZXMuICAjIyMgRGVyaXZlZCBQb3J0Zm9saW9zICBMVVNJRCBhbHNvIGFsbG93cyBmb3IgYSBwb3J0Zm9saW8gdG8gYmUgY29tcG9zZWQgb2YgYW5vdGhlciBwb3J0Zm9saW8gdmlhIGRlcml2ZWQgcG9ydGZvbGlvcy4gIEEgZGVyaXZlZCBwb3J0Zm9saW8gY2FuIGNvbnRhaW4gaXRzIG93biB0cmFuc2FjdGlvbnMgYW5kIGFsc28gaW5oZXJpdHMgYW55IHRyYW5zYWN0aW9ucyBmcm9tIGl0cyBwYXJlbnQgcG9ydGZvbGlvLiAgQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgcGFyZW50IHBvcnRmb2xpbyBhcmUgYXV0b21hdGljYWxseSByZWZsZWN0ZWQgaW4gZGVyaXZlZCBwb3J0Zm9saW8uICBEZXJpdmVkIHBvcnRmb2xpb3MgaW4gY29uanVuY3Rpb24gd2l0aCBzY29wZXMgYXJlIGEgcG93ZXJmdWwgY29uc3RydWN0LiAgRm9yIGV4YW1wbGUsIHRvIGRvIHByZS10cmFkZSB3aGF0LWlmIGFuYWx5c2lzLCBhIGRlcml2ZWQgcG9ydGZvbGlvIGNvdWxkIGJlIGNyZWF0ZWQgYSBuZXcgbmFtZXNwYWNlIGxpbmtlZCB0byB0aGUgdW5kZXJseWluZyBsaXZlIChwYXJlbnQpIHBvcnRmb2xpby4gIEFuYWx5c2lzIGNhbiB0aGVuIGJlIHVuZGVydGFrZW4gb24gdGhlIGRlcml2ZWQgcG9ydGZvbGlvIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBsaXZlIHBvcnRmb2xpby4gICMjIyBQb3J0Zm9saW8gR3JvdXBzIFBvcnRmb2xpbyBncm91cHMgYWxsb3cgdGhlIGNvbnN0cnVjdGlvbiBvZiBhIGhpZXJhcmNoeSBmcm9tIHBvcnRmb2xpb3MgYW5kIGdyb3Vwcy4gIFBvcnRmb2xpbyBvcGVyYXRpb25zIG9uIHRoZSBncm91cCBhcmUgZXhlY3V0ZWQgb24gYW4gYWdncmVnYXRlZCBzZXQgb2YgcG9ydGZvbGlvcyBpbiB0aGUgaGllcmFyY2h5LiAgIEZvciBleGFtcGxlOiAgICogR2xvYmFsIFBvcnRmb2xpb3MgXyhncm91cClfICAgKiBBUEFDIF8oZ3JvdXApXyAgICAgKiBIb25nIEtvbmcgXyhwb3J0Zm9saW8pXyAgICAgKiBKYXBhbiBfKHBvcnRmb2xpbylfICAgKiBFdXJvcGUgXyhncm91cClfICAgICAqIEZyYW5jZSBfKHBvcnRmb2xpbylfICAgICAqIEdlcm1hbnkgXyhwb3J0Zm9saW8pXyAgICogVUsgXyhwb3J0Zm9saW8pXyAgIEluIHRoaXMgZXhhbXBsZSAqKkdsb2JhbCBQb3J0Zm9saW9zKiogaXMgYSBncm91cCB0aGF0IGNvbnNpc3RzIG9mIGFuIGFnZ3JlZ2F0ZSBvZiAqKkhvbmcgS29uZyoqLCAqKkphcGFuKiosICoqRnJhbmNlKiosICoqR2VybWFueSoqIGFuZCAqKlVLKiogcG9ydGZvbGlvcy4gICMjIyBNb3ZlbWVudHMgRW5naW5lIFRoZSBNb3ZlbWVudHMgZW5naW5lIHNpdHMgb24gdG9wIG9mIHRoZSBpbW11dGFibGUgZXZlbnQgc3RvcmUgYW5kIGlzIHVzZWQgdG8gbWFuYWdlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBpbnB1dCB0cmFkaW5nIGFjdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgcG9ydGZvbGlvIGhvbGRpbmdzLiAgICAgVGhlIG1vdmVtZW50cyBlbmdpbmUgcmVhZHMgaW4gdGhlIGZvbGxvd2luZyBlbnRpdHkgdHlwZXM6LSAqIFBvc3RpbmcgVHJhbnNhY3Rpb25zICogQXBwbHlpbmcgQ29ycG9yYXRlIEFjdGlvbnMgICogSG9sZGluZyBBZGp1c3RtZW50cyAgVGhlc2UgYXJlIGNvbnZlcnRlZCB0byBvbmUgb3IgbW9yZSBtb3ZlbWVudHMgYW5kIHVzZWQgYnkgdGhlIG1vdmVtZW50cyBlbmdpbmUgdG8gY2FsY3VsYXRlIGhvbGRpbmdzLiAgQXQgdGhlIHNhbWUgdGltZSBpdCBhbHNvIGNhbGN1bGF0ZXMgcnVubmluZyBiYWxhbmNlcywgYW5kIHJlYWxpc2VkIFAmTC4gIFRoZSBvdXRwdXRzIGZyb20gdGhlIG1vdmVtZW50cyBlbmdpbmUgYXJlIGhvbGRpbmdzIGFuZCB0cmFuc2FjdGlvbnMuICAjIyBUcmFuc2FjdGlvbnMgIEEgdHJhbnNhY3Rpb24gcmVwcmVzZW50cyBhbiBlY29ub21pYyBhY3Rpdml0eSBhZ2FpbnN0IGEgUG9ydGZvbGlvLiAgVHJhbnNhY3Rpb25zIGFyZSBwcm9jZXNzZWQgYWNjb3JkaW5nIHRvIGEgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIHRlbGwgdGhlIExVU0lEIGVuZ2luZSBob3cgdG8gaW50ZXJwcmV0IHRoZSB0cmFuc2FjdGlvbiBhbmQgY29ycmVjdGx5IHVwZGF0ZSB0aGUgaG9sZGluZ3MuIExVU0lEIGNvbWVzIHdpdGggYSBzZXQgb2YgdHJhbnNhY3Rpb24gdHlwZXMgeW91IGNhbiB1c2Ugb3V0IG9mIHRoZSBib3gsIG9yIHlvdSBjYW4gY29uZmlndXJlIHlvdXIgb3duIHNldChzKSBvZiB0cmFuc2FjdGlvbnMuICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgW0xVU0lEIEdldHRpbmcgU3RhcnRlZCBHdWlkZSBmb3IgdHJhbnNhY3Rpb24gY29uZmlndXJhdGlvbi5dKGh0dHBzOi8vc3VwcG9ydC5sdXNpZC5jb20vY29uZmlndXJpbmctdHJhbnNhY3Rpb24tdHlwZXMpICB8IEZpZWxkfFR5cGV8RGVzY3JpcHRpb24gfCB8IC0tLXwtLS18LS0tIHwgfCBUcmFuc2FjdGlvbklkfHN0cmluZ3xUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB0cmFuc2FjdGlvbi4gfCB8IFR5cGV8c3RyaW5nfFRoZSB0eXBlIG9mIHRoZSB0cmFuc2FjdGlvbiBlLmcuICdCdXknLCAnU2VsbCcuIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHNob3VsZCBoYXZlIGJlZW4gcHJlLWNvbmZpZ3VyZWQgdmlhIHRoZSBTeXN0ZW0gQ29uZmlndXJhdGlvbiBBUEkgZW5kcG9pbnQuIElmIGl0IGhhc24ndCBiZWVuIHByZS1jb25maWd1cmVkIHRoZSB0cmFuc2FjdGlvbiB3aWxsIHN0aWxsIGJlIHVwZGF0ZWQgb3IgaW5zZXJ0ZWQgaG93ZXZlciB5b3Ugd2lsbCBiZSB1bmFibGUgdG8gZ2VuZXJhdGUgdGhlIHJlc3VsdGFudCBob2xkaW5ncyBmb3IgdGhlIHBvcnRmb2xpbyB0aGF0IGNvbnRhaW5zIHRoaXMgdHJhbnNhY3Rpb24gYXMgTFVTSUQgZG9lcyBub3Qga25vdyBob3cgdG8gcHJvY2VzcyBpdC4gfCB8IEluc3RydW1lbnRJZGVudGlmaWVyc3xtYXB8QSBzZXQgb2YgaW5zdHJ1bWVudCBpZGVudGlmaWVycyB0byB1c2UgdG8gcmVzb2x2ZSB0aGUgdHJhbnNhY3Rpb24gdG8gYSB1bmlxdWUgaW5zdHJ1bWVudC4gfCB8IFRyYW5zYWN0aW9uRGF0ZXxkYXRlb3JjdXRsYWJlbHxUaGUgZGF0ZSBvZiB0aGUgdHJhbnNhY3Rpb24uIHwgfCBTZXR0bGVtZW50RGF0ZXxkYXRlb3JjdXRsYWJlbHxUaGUgc2V0dGxlbWVudCBkYXRlIG9mIHRoZSB0cmFuc2FjdGlvbi4gfCB8IFVuaXRzfGRlY2ltYWx8VGhlIG51bWJlciBvZiB1bml0cyB0cmFuc2FjdGVkIGluIHRoZSBhc3NvY2lhdGVkIGluc3RydW1lbnQuIHwgfCBUcmFuc2FjdGlvblByaWNlfHRyYW5zYWN0aW9ucHJpY2V8VGhlIHByaWNlIGZvciBlYWNoIHVuaXQgb2YgdGhlIHRyYW5zYWN0ZWQgaW5zdHJ1bWVudCBpbiB0aGUgdHJhbnNhY3Rpb24gY3VycmVuY3kuIHwgfCBUb3RhbENvbnNpZGVyYXRpb258Y3VycmVuY3lhbmRhbW91bnR8VGhlIHRvdGFsIHZhbHVlIG9mIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUgc2V0dGxlbWVudCBjdXJyZW5jeS4gfCB8IEV4Y2hhbmdlUmF0ZXxkZWNpbWFsfFRoZSBleGNoYW5nZSByYXRlIGJldHdlZW4gdGhlIHRyYW5zYWN0aW9uIGFuZCBzZXR0bGVtZW50IGN1cnJlbmN5LiBGb3IgZXhhbXBsZSBpZiB0aGUgdHJhbnNhY3Rpb24gY3VycmVuY3kgaXMgaW4gVVNEIGFuZCB0aGUgc2V0dGxlbWVudCBjdXJyZW5jeSBpcyBpbiBHQlAgdGhpcyB0aGlzIHRoZSBVU0QvR0JQIHJhdGUuIHwgfCBUcmFuc2FjdGlvbkN1cnJlbmN5fGN1cnJlbmN5fFRoZSB0cmFuc2FjdGlvbiBjdXJyZW5jeS4gfCB8IFByb3BlcnRpZXN8bWFwfFNldCBvZiB1bmlxdWUgdHJhbnNhY3Rpb24gcHJvcGVydGllcyBhbmQgYXNzb2NpYXRlZCB2YWx1ZXMgdG8gc3RvcmUgd2l0aCB0aGUgdHJhbnNhY3Rpb24uIEVhY2ggcHJvcGVydHkgbXVzdCBiZSBmcm9tIHRoZSAnVHJhbnNhY3Rpb24nIGRvbWFpbi4gfCB8IENvdW50ZXJwYXJ0eUlkfHN0cmluZ3xUaGUgaWRlbnRpZmllciBmb3IgdGhlIGNvdW50ZXJwYXJ0eSBvZiB0aGUgdHJhbnNhY3Rpb24uIHwgfCBTb3VyY2V8c3RyaW5nfFRoZSBzb3VyY2Ugb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGlzIGlzIHVzZWQgdG8gbG9vayB1cCB0aGUgYXBwcm9wcmlhdGUgdHJhbnNhY3Rpb24gZ3JvdXAgc2V0IGluIHRoZSB0cmFuc2FjdGlvbiB0eXBlIGNvbmZpZ3VyYXRpb24uIHwgICBGcm9tIHRoZXNlIGZpZWxkcywgdGhlIGZvbGxvd2luZyB2YWx1ZXMgY2FuIGJlIGNhbGN1bGF0ZWQgICogKipUcmFuc2FjdGlvbiB2YWx1ZSBpbiBUcmFuc2FjdGlvbiBjdXJyZW5jeSoqOiBUb3RhbENvbnNpZGVyYXRpb24gLyBFeGNoYW5nZVJhdGUgICogKipUcmFuc2FjdGlvbiB2YWx1ZSBpbiBQb3J0Zm9saW8gY3VycmVuY3kqKjogVHJhbnNhY3Rpb24gdmFsdWUgaW4gVHJhbnNhY3Rpb24gY3VycmVuY3kgKiBUcmFkZVRvUG9ydGZvbGlvUmF0ZSAgIyMjIEV4YW1wbGUgVHJhbnNhY3Rpb25zICAjIyMjIEEgQ29tbW9uIFB1cmNoYXNlIEV4YW1wbGUgVGhyZWUgZXhhbXBsZSB0cmFuc2FjdGlvbnMgYXJlIHNob3duIGluIHRoZSB0YWJsZSBiZWxvdy4gICBUaGV5IHJlcHJlc2VudCBhIHB1cmNoYXNlIG9mIFVTRCBkZW5vbWluYXRlZCBJQk0gc2hhcmVzIHdpdGhpbiBhIFN0ZXJsaW5nIGRlbm9taW5hdGVkIHBvcnRmb2xpby4gICAqIFRoZSBmaXJzdCB0d28gdHJhbnNhY3Rpb25zIGFyZSBmb3Igc2VwYXJhdGUgYnV5IGFuZCBmeCB0cmFkZXMgICAgKiBCdXlpbmcgNTAwIElCTSBzaGFyZXMgZm9yICQ3MSw0ODAuMDAgICAgKiBBIGZvcmVpZ24gZXhjaGFuZ2UgY29udmVyc2lvbiB0byBmdW5kIHRoZSBJQk0gcHVyY2hhc2UuIChCdXkgJDcxLDQ4MC4wMCBmb3IgJiMxNjM7NTQsODQ2LjYwKSAgKiBUaGUgdGhpcmQgdHJhbnNhY3Rpb24gaXMgYW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgdGhlIGFib3ZlIHRyYWRlcy4gQnV5aW5nIDUwMCBJQk0gc2hhcmVzIGFuZCBzZXR0bGluZyBkaXJlY3RseSBpbiBTdGVybGluZy4gIHwgQ29sdW1uIHwgIEJ1eSBUcmFkZSB8IEZ4IFRyYWRlIHwgQnV5IFRyYWRlIHdpdGggZm9yZWlnbiBTZXR0bGVtZW50IHwgfCAtLS0tLSB8IC0tLS0tIHwgLS0tLS0gfCAtLS0tLSB8IHwgVHJhbnNhY3Rpb25JZCB8IEZCTjAwMDAxIHwgRkJOMDAwMDIgfCBGQk4wMDAwMyB8IHwgVHlwZSB8IEJ1eSB8IEZ4QnV5IHwgQnV5IHwgfCBJbnN0cnVtZW50SWRlbnRpZmllcnMgfCB7IFxcXCJmaWdpXFxcIiwgXFxcIkJCRzAwMEJMTk5INlxcXCIgfSB8IHsgXFxcIkNDWVxcXCIsIFxcXCJDQ1lfVVNEXFxcIiB9IHwgeyBcXFwiZmlnaVxcXCIsIFxcXCJCQkcwMDBCTE5OSDZcXFwiIH0gfCB8IFRyYW5zYWN0aW9uRGF0ZSB8IDIwMTgtMDgtMDIgfCAyMDE4LTA4LTAyIHwgMjAxOC0wOC0wMiB8IHwgU2V0dGxlbWVudERhdGUgfCAyMDE4LTA4LTA2IHwgMjAxOC0wOC0wNiB8IDIwMTgtMDgtMDYgfCB8IFVuaXRzIHwgNTAwIHwgNzE0ODAgfCA1MDAgfCB8IFRyYW5zYWN0aW9uUHJpY2UgfCAxNDIuOTYgfCAxIHwgMTQyLjk2IHwgfCBUcmFkZUN1cnJlbmN5IHwgVVNEIHwgVVNEIHwgVVNEIHwgfCBFeGNoYW5nZVJhdGUgfCAxIHwgMC43NjczIHwgMC43NjczIHwgfCBUb3RhbENvbnNpZGVyYXRpb24uQW1vdW50IHwgNzE0ODAuMDAgfCA1NDg0Ni42MCB8IDU0ODQ2LjYwIHwgfCBUb3RhbENvbnNpZGVyYXRpb24uQ3VycmVuY3kgfCBVU0QgfCBHQlAgfCBHQlAgfCB8IFRyYWRlL2RlZmF1bHQvVHJhZGVUb1BvcnRmb2xpb1JhdGUmYXN0OyB8IDAuNzY3MyB8IDAuNzY3MyB8IDAuNzY3MyB8ICBbJmFzdDsgVGhpcyBpcyBhIHByb3BlcnR5IGZpZWxkXSAgIyMjIyBBIEZvcndhcmQgRlggRXhhbXBsZSAgTFVTSUQgaGFzIGEgZmxleGlibGUgdHJhbnNhY3Rpb24gbW9kZWxsaW5nIHN5c3RlbSwgYW5kIHRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgd2F5cyBvZiBtb2RlbGxpbmcgZm9yd2FyZCBmeCB0cmFkZXMuICBUaGUgZGVmYXVsdCBMVVNJRCB0cmFuc2FjdGlvbiB0eXBlcyBhcmUgRndkRnhCdXkgYW5kIEZ3ZEZ4U2VsbC4gT3RoZXIgdHlwZXMgYW5kIGJlaGF2aW91cnMgY2FuIGJlIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQuICBVc2luZyB0aGVzZSB0cmFuc2FjdGlvbiB0eXBlcywgdGhlIGhvbGRpbmdzIHF1ZXJ5IHdpbGwgcmVwb3J0IHR3byBmb3J3YXJkIHBvc2l0aW9ucy4gT25lIGluIGVhY2ggY3VycmVuY3kuICAgU2luY2UgYW4gRlggdHJhZGUgaXMgYW4gZXhjaGFuZ2Ugb2Ygb25lIGN1cnJlbmN5IGZvciBhbm90aGVyLCB0aGUgZm9sbG93aW5nIHR3byA2IG1vbnRoIGZvcndhcmQgdHJhbnNhY3Rpb25zIGFyZSBlcXVpdmFsZW50OiAgfCBDb2x1bW4gfCAgRm9yd2FyZCAnU2VsbCcgVHJhZGUgfCBGb3J3YXJkICdCdXknIFRyYWRlIHwgfCAtLS0tLSB8IC0tLS0tIHwgLS0tLS0gfCB8IFRyYW5zYWN0aW9uSWQgfCBGQk4wMDAwNCB8IEZCTjAwMDA1IHwgfCBUeXBlIHwgRndkRnhTZWxsIHwgRndkRnhCdXkgfCB8IEluc3RydW1lbnRJZGVudGlmaWVycyB8IHsgXFxcIkNDWVxcXCIsIFxcXCJDQ1lfR0JQXFxcIiB9IHwgeyBcXFwiQ0NZXFxcIiwgXFxcIkNDWV9VU0RcXFwiIH0gfCB8IFRyYW5zYWN0aW9uRGF0ZSB8IDIwMTgtMDgtMDIgfCAyMDE4LTA4LTAyIHwgfCBTZXR0bGVtZW50RGF0ZSB8IDIwMTktMDItMDYgfCAyMDE5LTAyLTA2IHwgfCBVbml0cyB8IDEwMDAwLjAwIHwgMTMxNDIuMDAgfCB8IFRyYW5zYWN0aW9uUHJpY2UgfDEgfCAxIHwgfCBUcmFkZUN1cnJlbmN5IHwgR0JQIHwgVVNEIHwgfCBFeGNoYW5nZVJhdGUgfCAxLjMxNDIgfCAwLjc2MDkxOSB8IHwgVG90YWxDb25zaWRlcmF0aW9uLkFtb3VudCB8IDEzMTQyLjAwIHwgMTAwMDAuMDAgfCB8IFRvdGFsQ29uc2lkZXJhdGlvbi5DdXJyZW5jeSB8IFVTRCB8IEdCUCB8IHwgVHJhZGUvZGVmYXVsdC9UcmFkZVRvUG9ydGZvbGlvUmF0ZSB8IDEuMCB8IDAuNzYwOTE5IHwgICMjIEhvbGRpbmdzICBBIGhvbGRpbmcgcmVwcmVzZW50cyBhIHBvc2l0aW9uIGluIGEgaW5zdHJ1bWVudCBvciBjYXNoIG9uIGEgZ2l2ZW4gZGF0ZS4gIHwgRmllbGR8VHlwZXxEZXNjcmlwdGlvbiB8IHwgLS0tfC0tLXwtLS0gfCB8IEluc3RydW1lbnRVaWR8c3RyaW5nfFRoZSB1bnFpdWUgTHVzaWQgSW5zdHJ1bWVudCBJZCAoTFVJRCkgb2YgdGhlIGluc3RydW1lbnQgdGhhdCB0aGUgaG9sZGluZyBpcyBpbi4gfCB8IFN1YkhvbGRpbmdLZXlzfG1hcHxUaGUgc3ViLWhvbGRpbmcgcHJvcGVydGllcyB3aGljaCBpZGVudGlmeSB0aGUgaG9sZGluZy4gRWFjaCBwcm9wZXJ0eSB3aWxsIGJlIGZyb20gdGhlICdUcmFuc2FjdGlvbicgZG9tYWluLiBUaGVzZSBhcmUgY29uZmlndXJlZCB3aGVuIGEgdHJhbnNhY3Rpb24gcG9ydGZvbGlvIGlzIGNyZWF0ZWQuIHwgfCBQcm9wZXJ0aWVzfG1hcHxUaGUgcHJvcGVydGllcyB3aGljaCBoYXZlIGJlZW4gcmVxdWVzdGVkIHRvIGJlIGRlY29yYXRlZCBvbnRvIHRoZSBob2xkaW5nLiBUaGVzZSB3aWxsIGJlIGZyb20gdGhlICdJbnN0cnVtZW50JyBvciAnSG9sZGluZycgZG9tYWluLiB8IHwgSG9sZGluZ1R5cGV8c3RyaW5nfFRoZSB0eXBlIG9mIHRoZSBob2xkaW5nIGUuZy4gUG9zaXRpb24sIEJhbGFuY2UsIENhc2hDb21taXRtZW50LCBSZWNlaXZhYmxlLCBGb3J3YXJkRlggZXRjLiB8IHwgVW5pdHN8ZGVjaW1hbHxUaGUgdG90YWwgbnVtYmVyIG9mIHVuaXRzIG9mIHRoZSBob2xkaW5nLiB8IHwgU2V0dGxlZFVuaXRzfGRlY2ltYWx8VGhlIHRvdGFsIG51bWJlciBvZiBzZXR0bGVkIHVuaXRzIG9mIHRoZSBob2xkaW5nLiB8IHwgQ29zdHxjdXJyZW5jeWFuZGFtb3VudHxUaGUgdG90YWwgY29zdCBvZiB0aGUgaG9sZGluZyBpbiB0aGUgdHJhbnNhY3Rpb24gY3VycmVuY3kuIHwgfCBDb3N0UG9ydGZvbGlvQ2N5fGN1cnJlbmN5YW5kYW1vdW50fFRoZSB0b3RhbCBjb3N0IG9mIHRoZSBob2xkaW5nIGluIHRoZSBwb3J0Zm9saW8gY3VycmVuY3kuIHwgfCBUcmFuc2FjdGlvbnx0cmFuc2FjdGlvbnxUaGUgdHJhbnNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGFuIHVuc2V0dGxlZCBob2xkaW5nLiB8ICAgIyMgQ29ycG9yYXRlIEFjdGlvbnMgIENvcnBvcmF0ZSBhY3Rpb25zIGFyZSByZXByZXNlbnRlZCB3aXRoaW4gTFVTSUQgaW4gdGVybXMgb2YgYSBzZXQgb2YgaW5zdHJ1bWVudC1zcGVjaWZpYyAndHJhbnNpdGlvbnMnLiAgVGhlc2UgdHJhbnNpdGlvbnMgYXJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGFydGljaXBhbnRzIG9mIHRoZSBjb3Jwb3JhdGUgYWN0aW9uLCBhbmQgdGhlIGVmZmVjdCB0aGF0IHRoZSBjb3Jwb3JhdGUgYWN0aW9uIHdpbGwgaGF2ZSBvbiBob2xkaW5ncyBpbiB0aG9zZSBwYXJ0aWNpcGFudHMuICAjIyMgQ29ycG9yYXRlIEFjdGlvbiAgfCBGaWVsZHxUeXBlfERlc2NyaXB0aW9uIHwgfCAtLS18LS0tfC0tLSB8IHwgQ29ycG9yYXRlQWN0aW9uQ29kZXxjb2RlfFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGlzIGNvcnBvcmF0ZSBhY3Rpb24gfCB8IERlc2NyaXB0aW9ufHN0cmluZ3wgIHwgfCBBbm5vdW5jZW1lbnREYXRlfGRhdGV0aW1lb2Zmc2V0fFRoZSBhbm5vdW5jZW1lbnQgZGF0ZSBvZiB0aGUgY29ycG9yYXRlIGFjdGlvbiB8IHwgRXhEYXRlfGRhdGV0aW1lb2Zmc2V0fFRoZSBleCBkYXRlIG9mIHRoZSBjb3Jwb3JhdGUgYWN0aW9uIHwgfCBSZWNvcmREYXRlfGRhdGV0aW1lb2Zmc2V0fFRoZSByZWNvcmQgZGF0ZSBvZiB0aGUgY29ycG9yYXRlIGFjdGlvbiB8IHwgUGF5bWVudERhdGV8ZGF0ZXRpbWVvZmZzZXR8VGhlIHBheW1lbnQgZGF0ZSBvZiB0aGUgY29ycG9yYXRlIGFjdGlvbiB8IHwgVHJhbnNpdGlvbnN8Y29ycG9yYXRlYWN0aW9udHJhbnNpdGlvbltdfFRoZSB0cmFuc2l0aW9ucyB0aGF0IHJlc3VsdCBmcm9tIHRoaXMgY29ycG9yYXRlIGFjdGlvbiB8ICAgIyMjIFRyYW5zaXRpb24gIHwgRmllbGR8VHlwZXxEZXNjcmlwdGlvbiB8IHwgLS0tfC0tLXwtLS0gfCB8IElucHV0VHJhbnNpdGlvbnxjb3Jwb3JhdGVhY3Rpb250cmFuc2l0aW9uY29tcG9uZW50fEluZGljYXRpbmcgdGhlIGJhc2lzIG9mIHRoZSBjb3Jwb3JhdGUgYWN0aW9uIC0gd2hpY2ggc2VjdXJpdHkgYW5kIGhvdyBtYW55IHVuaXRzIHwgfCBPdXRwdXRUcmFuc2l0aW9uc3xjb3Jwb3JhdGVhY3Rpb250cmFuc2l0aW9uY29tcG9uZW50W118V2hhdCB3aWxsIGJlIGdlbmVyYXRlZCByZWxhdGl2ZSB0byB0aGUgaW5wdXQgdHJhbnNpdGlvbiB8ICAgIyMjIEV4YW1wbGUgQ29ycG9yYXRlIEFjdGlvbiBUcmFuc2l0aW9ucyAgIyMjIyBBIERpdmlkZW5kIEFjdGlvbiBUcmFuc2l0aW9uICBJbiB0aGlzIGV4YW1wbGUsIGZvciBlYWNoIHNoYXJlIG9mIElCTSwgMC4yMCB1bml0cyAob3IgMjAgcGVuY2UpIG9mIEdCUCBhcmUgZ2VuZXJhdGVkLiAgfCBDb2x1bW4gfCAgSW5wdXQgVHJhbnNpdGlvbiB8IE91dHB1dCBUcmFuc2l0aW9uIHwgfCAtLS0tLSB8IC0tLS0tIHwgLS0tLS0gfCB8IEluc3RydW1lbnQgSWRlbnRpZmllcnMgfCB7IFxcXCJmaWdpXFxcIiA6IFxcXCJCQkcwMDBCTE5OSDZcXFwiIH0gfCB7IFxcXCJjY3lcXFwiIDogXFxcIkNDWV9HQlBcXFwiIH0gfCB8IFVuaXRzIEZhY3RvciB8IDEgfCAwLjIwIHwgfCBDb3N0IEZhY3RvciB8IDEgfCAwIHwgICMjIyMgQSBTcGxpdCBBY3Rpb24gVHJhbnNpdGlvbiAgSW4gdGhpcyBleGFtcGxlLCBmb3IgZWFjaCBzaGFyZSBvZiBJQk0sIHdlIGVuZCB1cCB3aXRoIDIgdW5pdHMgKDIgc2hhcmVzKSBvZiBJQk0sIHdpdGggdG90YWwgdmFsdWUgdW5jaGFuZ2VkLiAgfCBDb2x1bW4gfCAgSW5wdXQgVHJhbnNpdGlvbiB8IE91dHB1dCBUcmFuc2l0aW9uIHwgfCAtLS0tLSB8IC0tLS0tIHwgLS0tLS0gfCB8IEluc3RydW1lbnQgSWRlbnRpZmllcnMgfCB7IFxcXCJmaWdpXFxcIiA6IFxcXCJCQkcwMDBCTE5OSDZcXFwiIH0gfCB7IFxcXCJmaWdpXFxcIiA6IFxcXCJCQkcwMDBCTE5OSDZcXFwiIH0gfCB8IFVuaXRzIEZhY3RvciB8IDEgfCAyIHwgfCBDb3N0IEZhY3RvciB8IDEgfCAxIHwgICMjIyMgQSBTcGlub2ZmIEFjdGlvbiBUcmFuc2l0aW9uICBJbiB0aGlzIGV4YW1wbGUsIGZvciBlYWNoIHNoYXJlIG9mIElCTSwgd2UgZW5kIHVwIHdpdGggMSB1bml0ICgxIHNoYXJlKSBvZiBJQk0gYW5kIDMgdW5pdHMgKDMgc2hhcmVzKSBvZiBDZWxlc3RpY2EsIHdpdGggODUlIG9mIHRoZSB2YWx1ZSByZW1haW5pbmcgb24gdGhlIElCTSBzaGFyZSwgYW5kIDUlIGluIGVhY2ggQ2VsZXN0aWNhIHNoYXJlICgxNSUgdG90YWwpLiAgfCBDb2x1bW4gfCAgSW5wdXQgVHJhbnNpdGlvbiB8IE91dHB1dCBUcmFuc2l0aW9uIDEgfCBPdXRwdXQgVHJhbnNpdGlvbiAyIHwgfCAtLS0tLSB8IC0tLS0tIHwgLS0tLS0gfCAtLS0tLSB8IHwgSW5zdHJ1bWVudCBJZGVudGlmaWVycyB8IHsgXFxcImZpZ2lcXFwiIDogXFxcIkJCRzAwMEJMTk5INlxcXCIgfSB8IHsgXFxcImZpZ2lcXFwiIDogXFxcIkJCRzAwMEJMTk5INlxcXCIgfSB8IHsgXFxcImZpZ2lcXFwiIDogXFxcIkJCRzAwMEhCR1JGM1xcXCIgfSB8IHwgVW5pdHMgRmFjdG9yIHwgMSB8IDEgfCAzIHwgfCBDb3N0IEZhY3RvciB8IDEgfCAwLjg1IHwgMC4xNSB8ICAjIyBQcm9wZXJ0eSAgUHJvcGVydGllcyBhcmUga2V5LXZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYW55IGVudGl0eSB3aXRoaW4gYSBkb21haW4gKHdoZXJlIGEgZG9tYWluIGlzIGB0cmFkZWAsIGBwb3J0Zm9saW9gLCBgc2VjdXJpdHlgIGV0YykuICBQcm9wZXJ0aWVzIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgdXNlIHdpdGggYSBgUHJvcGVydHlEZWZpbml0aW9uYCBhbmQgY2FuIHRoZW4gc3Vic2VxdWVudGx5IGJlIGFkZGVkIHRvIGVudGl0aWVzLiAgIyBTY2hlbWFzICBUaGUgZm9sbG93aW5nIGhlYWRlcnMgYXJlIHJldHVybmVkIG9uIGFsbCByZXNwb25zZXMgZnJvbSBMVVNJRCAgfCBOYW1lIHwgUHVycG9zZSB8IHwgLS0tIHwgLS0tIHwgfCBsdXNpZC1tZXRhLWR1cmF0aW9uIHwgRHVyYXRpb24gb2YgdGhlIHJlcXVlc3QgfCB8IGx1c2lkLW1ldGEtc3VjY2VzcyB8IFdoZXRoZXIgb3Igbm90IExVU0lEIGNvbnNpZGVyZWQgdGhlIHJlcXVlc3QgdG8gYmUgc3VjY2Vzc2Z1bCB8IHwgbHVzaWQtbWV0YS1yZXF1ZXN0SWQgfCBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZXF1ZXN0IHwgfCBsdXNpZC1zY2hlbWEtdXJsIHwgVXJsIG9mIHRoZSBzY2hlbWEgZm9yIHRoZSBkYXRhIGJlaW5nIHJldHVybmVkIHwgfCBsdXNpZC1wcm9wZXJ0eS1zY2hlbWEtdXJsIHwgVXJsIG9mIHRoZSBzY2hlbWEgZm9yIGFueSBwcm9wZXJ0aWVzIHwgICAjIEVycm9yIENvZGVzICB8IENvZGV8TmFtZXxEZXNjcmlwdGlvbiB8IHwgLS0tfC0tLXwtLS0gfCB8IDxhIG5hbWU9XFxcIjEwMlxcXCI+MTAyPC9hPnxWZXJzaW9uTm90Rm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA0XFxcIj4xMDQ8L2E+fEluc3RydW1lbnROb3RGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDVcXFwiPjEwNTwvYT58UHJvcGVydHlOb3RGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxMDZcXFwiPjEwNjwvYT58UG9ydGZvbGlvUmVjdXJzaW9uRGVwdGh8ICB8IHwgPGEgbmFtZT1cXFwiMTA4XFxcIj4xMDg8L2E+fEdyb3VwTm90Rm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTA5XFxcIj4xMDk8L2E+fFBvcnRmb2xpb05vdEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjExMFxcXCI+MTEwPC9hPnxQcm9wZXJ0eVNjaGVtYU5vdEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjExMVxcXCI+MTExPC9hPnxQb3J0Zm9saW9BbmNlc3RyeU5vdEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjExMlxcXCI+MTEyPC9hPnxQb3J0Zm9saW9XaXRoSWRBbHJlYWR5RXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjExM1xcXCI+MTEzPC9hPnxPcnBoYW5lZFBvcnRmb2xpb3wgIHwgfCA8YSBuYW1lPVxcXCIxMTlcXFwiPjExOTwvYT58TWlzc2luZ0Jhc2VDbGFpbXN8ICB8IHwgPGEgbmFtZT1cXFwiMTIxXFxcIj4xMjE8L2E+fFByb3BlcnR5Tm90RGVmaW5lZHwgIHwgfCA8YSBuYW1lPVxcXCIxMjJcXFwiPjEyMjwvYT58Q2Fubm90RGVsZXRlU3lzdGVtUHJvcGVydHl8ICB8IHwgPGEgbmFtZT1cXFwiMTIzXFxcIj4xMjM8L2E+fENhbm5vdE1vZGlmeUltbXV0YWJsZVByb3BlcnR5RmllbGR8ICB8IHwgPGEgbmFtZT1cXFwiMTI0XFxcIj4xMjQ8L2E+fFByb3BlcnR5QWxyZWFkeUV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxMjVcXFwiPjEyNTwvYT58SW52YWxpZFByb3BlcnR5TGlmZVRpbWV8ICB8IHwgPGEgbmFtZT1cXFwiMTI3XFxcIj4xMjc8L2E+fENhbm5vdE1vZGlmeURlZmF1bHREYXRhVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMjhcXFwiPjEyODwvYT58R3JvdXBBbHJlYWR5RXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjEyOVxcXCI+MTI5PC9hPnxOb1N1Y2hEYXRhVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIxMzJcXFwiPjEzMjwvYT58VmFsaWRhdGlvbkVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjEzM1xcXCI+MTMzPC9hPnxMb29wRGV0ZWN0ZWRJbkdyb3VwSGllcmFyY2h5fCAgfCB8IDxhIG5hbWU9XFxcIjEzNVxcXCI+MTM1PC9hPnxTdWJHcm91cEFscmVhZHlFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTM4XFxcIj4xMzg8L2E+fFByaWNlU291cmNlTm90Rm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTM5XFxcIj4xMzk8L2E+fEFuYWx5dGljU3RvcmVOb3RGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxNDFcXFwiPjE0MTwvYT58QW5hbHl0aWNTdG9yZUFscmVhZHlFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTQzXFxcIj4xNDM8L2E+fENsaWVudEluc3RydW1lbnRBbHJlYWR5RXhpc3RzfCAgfCB8IDxhIG5hbWU9XFxcIjE0NFxcXCI+MTQ0PC9hPnxEdXBsaWNhdGVJblBhcmFtZXRlclNldHwgIHwgfCA8YSBuYW1lPVxcXCIxNDdcXFwiPjE0NzwvYT58UmVzdWx0c05vdEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE0OFxcXCI+MTQ4PC9hPnxPcmRlckZpZWxkTm90SW5SZXN1bHRTZXR8ICB8IHwgPGEgbmFtZT1cXFwiMTQ5XFxcIj4xNDk8L2E+fE9wZXJhdGlvbkZhaWxlZHwgIHwgfCA8YSBuYW1lPVxcXCIxNTBcXFwiPjE1MDwvYT58RWxhc3RpY1NlYXJjaEVycm9yfCAgfCB8IDxhIG5hbWU9XFxcIjE1MVxcXCI+MTUxPC9hPnxJbnZhbGlkUGFyYW1ldGVyVmFsdWV8ICB8IHwgPGEgbmFtZT1cXFwiMTUzXFxcIj4xNTM8L2E+fENvbW1hbmRQcm9jZXNzaW5nRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTRcXFwiPjE1NDwvYT58RW50aXR5U3RhdGVDb25zdHJ1Y3Rpb25GYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1NVxcXCI+MTU1PC9hPnxFbnRpdHlUaW1lbGluZURvZXNOb3RFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIxNTZcXFwiPjE1NjwvYT58RXZlbnRQdWJsaXNoRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNTdcXFwiPjE1NzwvYT58SW52YWxpZFJlcXVlc3RGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE1OFxcXCI+MTU4PC9hPnxFdmVudFB1Ymxpc2hVbmtub3dufCAgfCB8IDxhIG5hbWU9XFxcIjE1OVxcXCI+MTU5PC9hPnxFdmVudFF1ZXJ5RmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjBcXFwiPjE2MDwvYT58QmxvYkRpZE5vdEV4aXN0RmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjJcXFwiPjE2MjwvYT58U3ViU3lzdGVtUmVxdWVzdEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTYzXFxcIj4xNjM8L2E+fFN1YlN5c3RlbUNvbmZpZ3VyYXRpb25GYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE2NVxcXCI+MTY1PC9hPnxGYWlsZWRUb0RlbGV0ZXwgIHwgfCA8YSBuYW1lPVxcXCIxNjZcXFwiPjE2NjwvYT58VXBzZXJ0Q2xpZW50SW5zdHJ1bWVudEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTY3XFxcIj4xNjc8L2E+fElsbGVnYWxBc0F0SW50ZXJ2YWx8ICB8IHwgPGEgbmFtZT1cXFwiMTY4XFxcIj4xNjg8L2E+fElsbGVnYWxCaXRlbXBvcmFsUXVlcnl8ICB8IHwgPGEgbmFtZT1cXFwiMTY5XFxcIj4xNjk8L2E+fEludmFsaWRBbHRlcm5hdGVJZHwgIHwgfCA8YSBuYW1lPVxcXCIxNzBcXFwiPjE3MDwvYT58Q2Fubm90QWRkU291cmNlUG9ydGZvbGlvUHJvcGVydHlFeHBsaWNpdGx5fCAgfCB8IDxhIG5hbWU9XFxcIjE3MVxcXCI+MTcxPC9hPnxFbnRpdHlBbHJlYWR5RXhpc3RzSW5Hcm91cHwgIHwgfCA8YSBuYW1lPVxcXCIxNzNcXFwiPjE3MzwvYT58RW50aXR5V2l0aElkQWxyZWFkeUV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIxNzRcXFwiPjE3NDwvYT58RGVyaXZlZFBvcnRmb2xpb0RldGFpbHNEb05vdEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjE3NlxcXCI+MTc2PC9hPnxQb3J0Zm9saW9XaXRoTmFtZUFscmVhZHlFeGlzdHN8ICB8IHwgPGEgbmFtZT1cXFwiMTc3XFxcIj4xNzc8L2E+fEludmFsaWRUcmFuc2FjdGlvbnN8ICB8IHwgPGEgbmFtZT1cXFwiMTc4XFxcIj4xNzg8L2E+fFJlZmVyZW5jZVBvcnRmb2xpb05vdEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE3OVxcXCI+MTc5PC9hPnxEdXBsaWNhdGVJZEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMTgwXFxcIj4xODA8L2E+fENvbW1hbmRSZXRyaWV2YWxGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4MVxcXCI+MTgxPC9hPnxEYXRhRmlsdGVyQXBwbGljYXRpb25GYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4MlxcXCI+MTgyPC9hPnxTZWFyY2hGYWlsZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTgzXFxcIj4xODM8L2E+fE1vdmVtZW50c0VuZ2luZUNvbmZpZ3VyYXRpb25LZXlGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjE4NFxcXCI+MTg0PC9hPnxGeFJhdGVTb3VyY2VOb3RGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIxODVcXFwiPjE4NTwvYT58QWNjcnVhbFNvdXJjZU5vdEZvdW5kfCAgfCB8IDxhIG5hbWU9XFxcIjE4NlxcXCI+MTg2PC9hPnxBY2Nlc3NEZW5pZWR8ICB8IHwgPGEgbmFtZT1cXFwiMTg3XFxcIj4xODc8L2E+fEludmFsaWRJZGVudGl0eVRva2VufCAgfCB8IDxhIG5hbWU9XFxcIjE4OFxcXCI+MTg4PC9hPnxJbnZhbGlkUmVxdWVzdEhlYWRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiMTg5XFxcIj4xODk8L2E+fFByaWNlTm90Rm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTkwXFxcIj4xOTA8L2E+fEludmFsaWRTdWJIb2xkaW5nS2V5c1Byb3ZpZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5MVxcXCI+MTkxPC9hPnxEdXBsaWNhdGVTdWJIb2xkaW5nS2V5c1Byb3ZpZGVkfCAgfCB8IDxhIG5hbWU9XFxcIjE5MlxcXCI+MTkyPC9hPnxDdXREZWZpbml0aW9uTm90Rm91bmR8ICB8IHwgPGEgbmFtZT1cXFwiMTkzXFxcIj4xOTM8L2E+fEN1dERlZmluaXRpb25JbnZhbGlkfCAgfCB8IDxhIG5hbWU9XFxcIjIwMFxcXCI+MjAwPC9hPnxJbnZhbGlkVW5pdEZvckRhdGFUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwMVxcXCI+MjAxPC9hPnxJbnZhbGlkVHlwZUZvckRhdGFUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwMlxcXCI+MjAyPC9hPnxJbnZhbGlkVmFsdWVGb3JEYXRhVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDNcXFwiPjIwMzwvYT58VW5pdE5vdERlZmluZWRGb3JEYXRhVHlwZXwgIHwgfCA8YSBuYW1lPVxcXCIyMDRcXFwiPjIwNDwvYT58VW5pdHNOb3RTdXBwb3J0ZWRPbkRhdGFUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNVxcXCI+MjA1PC9hPnxDYW5ub3RTcGVjaWZ5VW5pdHNPbkRhdGFUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwNlxcXCI+MjA2PC9hPnxVbml0U2NoZW1hSW5jb25zaXN0ZW50V2l0aERhdGFUeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIwN1xcXCI+MjA3PC9hPnxVbml0RGVmaW5pdGlvbk5vdFNwZWNpZmllZHwgIHwgfCA8YSBuYW1lPVxcXCIyMDhcXFwiPjIwODwvYT58RHVwbGljYXRlVW5pdERlZmluaXRpb25zU3BlY2lmaWVkfCAgfCB8IDxhIG5hbWU9XFxcIjIwOVxcXCI+MjA5PC9hPnxJbnZhbGlkVW5pdHNEZWZpbml0aW9ufCAgfCB8IDxhIG5hbWU9XFxcIjIxMFxcXCI+MjEwPC9hPnxJbnZhbGlkSW5zdHJ1bWVudElkZW50aWZpZXJVbml0fCAgfCB8IDxhIG5hbWU9XFxcIjIxMVxcXCI+MjExPC9hPnxIb2xkaW5nc0FkanVzdG1lbnREb2VzTm90RXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiMjEyXFxcIj4yMTI8L2E+fENvdWxkTm90QnVpbGRFeGNlbFVybHwgIHwgfCA8YSBuYW1lPVxcXCIyMTNcXFwiPjIxMzwvYT58Q291bGROb3RHZXRFeGNlbFZlcnNpb258ICB8IHwgPGEgbmFtZT1cXFwiMjE0XFxcIj4yMTQ8L2E+fEluc3RydW1lbnRCeUNvZGVOb3RGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMTVcXFwiPjIxNTwvYT58RW50aXR5U2NoZW1hRG9lc05vdEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjIxNlxcXCI+MjE2PC9hPnxGZWF0dXJlTm90U3VwcG9ydGVkT25Qb3J0Zm9saW9UeXBlfCAgfCB8IDxhIG5hbWU9XFxcIjIxN1xcXCI+MjE3PC9hPnxRdW90ZU5vdEZvdW5kRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMThcXFwiPjIxODwvYT58SW52YWxpZFF1b3RlSWRlbnRpZmllckZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjE5XFxcIj4yMTk8L2E+fEludmFsaWRJbnN0cnVtZW50RGVmaW5pdGlvbnwgIHwgfCA8YSBuYW1lPVxcXCIyMjFcXFwiPjIyMTwvYT58SW5zdHJ1bWVudFVwc2VydEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjIyXFxcIj4yMjI8L2E+fFJlZmVyZW5jZVBvcnRmb2xpb1JlcXVlc3ROb3RTdXBwb3J0ZWR8ICB8IHwgPGEgbmFtZT1cXFwiMjIzXFxcIj4yMjM8L2E+fFRyYW5zYWN0aW9uUG9ydGZvbGlvUmVxdWVzdE5vdFN1cHBvcnRlZHwgIHwgfCA8YSBuYW1lPVxcXCIyMjRcXFwiPjIyNDwvYT58SW52YWxpZFByb3BlcnR5VmFsdWVBc3NpZ25tZW50fCAgfCB8IDxhIG5hbWU9XFxcIjIzMFxcXCI+MjMwPC9hPnxUcmFuc2FjdGlvblR5cGVOb3RGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIyMzFcXFwiPjIzMTwvYT58VHJhbnNhY3Rpb25UeXBlRHVwbGljYXRpb258ICB8IHwgPGEgbmFtZT1cXFwiMjMyXFxcIj4yMzI8L2E+fFBvcnRmb2xpb0RvZXNOb3RFeGlzdEF0R2l2ZW5EYXRlfCAgfCB8IDxhIG5hbWU9XFxcIjIzM1xcXCI+MjMzPC9hPnxRdWVyeVBhcnNlckZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjM0XFxcIj4yMzQ8L2E+fER1cGxpY2F0ZUNvbnN0aXR1ZW50RmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIyMzVcXFwiPjIzNTwvYT58VW5yZXNvbHZlZEluc3RydW1lbnRDb25zdGl0dWVudEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMjM2XFxcIj4yMzY8L2E+fFVucmVzb2x2ZWRJbnN0cnVtZW50SW5UcmFuc2l0aW9uRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzMDBcXFwiPjMwMDwvYT58TWlzc2luZ1JlY2lwZUZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzAxXFxcIj4zMDE8L2E+fERlcGVuZGVuY2llc0ZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzA0XFxcIj4zMDQ8L2E+fFBvcnRmb2xpb1ByZXByb2Nlc3NGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMFxcXCI+MzEwPC9hPnxWYWx1YXRpb25FbmdpbmVGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjMxMVxcXCI+MzExPC9hPnxUYXNrRmFjdG9yeUZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzEyXFxcIj4zMTI8L2E+fFRhc2tFdmFsdWF0aW9uRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNTBcXFwiPjM1MDwvYT58SW5zdHJ1bWVudEZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzUxXFxcIj4zNTE8L2E+fENhc2hGbG93c0ZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzYwXFxcIj4zNjA8L2E+fEFnZ3JlZ2F0aW9uRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzBcXFwiPjM3MDwvYT58UmVzdWx0UmV0cmlldmFsRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzFcXFwiPjM3MTwvYT58UmVzdWx0UHJvY2Vzc2luZ0ZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzcxXFxcIj4zNzE8L2E+fFJlc3VsdFByb2Nlc3NpbmdGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM3MlxcXCI+MzcyPC9hPnxWZW5kb3JSZXN1bHRQcm9jZXNzaW5nRmFpbHVyZXwgIHwgfCA8YSBuYW1lPVxcXCIzNzNcXFwiPjM3MzwvYT58VmVuZG9yUmVzdWx0TWFwcGluZ0ZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiMzc0XFxcIj4zNzQ8L2E+fFZlbmRvckxpYnJhcnlVbmF1dGhvcmlzZWRGYWlsdXJlfCAgfCB8IDxhIG5hbWU9XFxcIjM5MFxcXCI+MzkwPC9hPnxBdHRlbXB0VG9VcHNlcnREdXBsaWNhdGVRdW90ZXN8ICB8IHwgPGEgbmFtZT1cXFwiMzkxXFxcIj4zOTE8L2E+fENvcnBvcmF0ZUFjdGlvblNvdXJjZURvZXNOb3RFeGlzdHwgIHwgfCA8YSBuYW1lPVxcXCIzOTJcXFwiPjM5MjwvYT58Q29ycG9yYXRlQWN0aW9uU291cmNlQWxyZWFkeUV4aXN0c3wgIHwgfCA8YSBuYW1lPVxcXCIzOTNcXFwiPjM5MzwvYT58SW5zdHJ1bWVudElkZW50aWZpZXJBbHJlYWR5SW5Vc2V8ICB8IHwgPGEgbmFtZT1cXFwiMzk0XFxcIj4zOTQ8L2E+fFByb3BlcnRpZXNOb3RGb3VuZHwgIHwgfCA8YSBuYW1lPVxcXCIzOTVcXFwiPjM5NTwvYT58QmF0Y2hPcGVyYXRpb25BYm9ydGVkfCAgfCB8IDxhIG5hbWU9XFxcIjQwMFxcXCI+NDAwPC9hPnxJbnZhbGlkSXNvNDIxN0N1cnJlbmN5Q29kZUZhaWx1cmV8ICB8IHwgPGEgbmFtZT1cXFwiNDEwXFxcIj40MTA8L2E+fEluZGV4RG9lc05vdEV4aXN0fCAgfCB8IDxhIG5hbWU9XFxcIjQxMVxcXCI+NDExPC9hPnxTb3J0RmllbGREb2VzTm90RXhpc3R8ICB8IHwgPGEgbmFtZT1cXFwiNDEzXFxcIj40MTM8L2E+fE5lZ2F0aXZlUGFnaW5hdGlvblBhcmFtZXRlcnN8ICB8IHwgPGEgbmFtZT1cXFwiNDE0XFxcIj40MTQ8L2E+fEludmFsaWRTZWFyY2hTeW50YXh8ICB8IHwgPGEgbmFtZT1cXFwiLTEwXFxcIj4tMTA8L2E+fFNlcnZlckNvbmZpZ3VyYXRpb25FcnJvcnwgIHwgfCA8YSBuYW1lPVxcXCItMVxcXCI+LTE8L2E+fFVua25vd24gZXJyb3J8ICB8IFxuICpcbiAqIE9wZW5BUEkgc3BlYyB2ZXJzaW9uOiAwLjEwLjY2OFxuICogQ29udGFjdDogaW5mb0BmaW5ib3VybmUuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxuICogaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItY29kZWdlbi5naXRcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgTW9kZWxTZWxlY3Rpb24gfSBmcm9tICcuL21vZGVsU2VsZWN0aW9uJztcbmltcG9ydCB7IFByaWNpbmdPcHRpb25zIH0gZnJvbSAnLi9wcmljaW5nT3B0aW9ucyc7XG5pbXBvcnQgeyBWZW5kb3JNb2RlbFJ1bGUgfSBmcm9tICcuL3ZlbmRvck1vZGVsUnVsZSc7XG5cblxuLyoqXG4gKiBQcmljaW5nIGNvbnRleHQgbm9kZS4gSW4gb3JkZXIgdG8gcHJpY2UgYW4gaW5zdHJ1bWVudCBhIG51bWJlciBvZiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIHJlcXVpcmVkIHRvIGRldGVybWluZSB3aGljaCAgKGEpIHByaWNpbmcgbW9kZWwgKHJhbmdpbmcgZnJvbSBhIHNpbXBsZSBsb29rdXAgb2YgYSBtYXJrZXQgcXVvdGUvcHJpY2UgdGhyb3VnaCB0byBhIE1vbnRlLUNhcmxvIHNpbXVsYXRpb24gZm9yIHRoZSBiZWhhdmlvdXIgb2YgaXRzIGNhc2hmbG93cykgIChiKSB2ZW5kb3IgbGlicmFyeSAoTHVzaWQgaW50ZXJuYWwgbW9kZWxzIG9yIHRob3NlIHByb3ZpZGVkIHRocm91Z2ggYW4gZXh0ZXJuYWwgVmVuZG9yIHN1Y2ggYXMgUmVmaW5pdGl2IChwcm9wcmlldGFyeSkgb3IgUXVhbnRMaWIgKG9wZW4gc291cmNlKSAgYXJlIHVzZWQgaW4gdGhlIHByaWNpbmcuICAgIEluIGNvbmp1bmN0aW9uIHdpdGggdGhlc2UgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhdCBnb3Zlcm4gdGhlIGJlaGF2aW91ciBvZiB0aGVzZSBtb2RlbHMuIEZvciBleGFtcGxlLCBpbiBwcmljaW5nIGFuIEZ4IHZvbGF0aWxpdHkgIGRlcGVuZGVudCBwcm9kdWN0IHN1Y2ggYXMgYW4gRnggb3B0aW9uLCB0aGVyZSBhcmUgdmFyaW91cyBwYXJhbWV0ZXJzIHRoYXQgYWZmZWN0IG1vZGVsIGJlaGF2aW91ciBmb3IgdGhlIHNtaWxlLiBJbiBMdXNpZCBhIGRpc3RpbmN0aW9uIGlzIG1hZGUgYmV0d2VlbiAgdGhvc2Ugd2hpY2ggYXJlIHVuZGVyc3Rvb2QgbmF0aXZlbHkgYW5kIHRob3NlIHdoaWNoIGFyZSBvbmx5IGhlbGQgZm9yIHVzZSB3aXRoIGEgZ2l2ZW4gdmVuZG9yLW1vZGVsIGNvbWJpbmF0aW9uLiBUaGUgcHJvYmxlbSBpcyB0aGF0LCB1bmxpa2UgbWFya2V0ICBxdW90ZSBkYXRhLCB0aGVyZSBhcmUgZmV3IHN0YW5kYXJkcyBhcm91bmQgbW9kZWwgZGVzY3JpcHRpb25zLiBIZW5jZSwgYXBwYXJlbnRseSBzaW1pbGFyIHRlcm1pbm9sb2d5IGNhbiBiZSBtaXMtbGVhZGluZzsgZm9yIGV4YW1wbGUgaW4gU0FCUiBtb2RlbHMgd2hlcmUgIHRoZSBiYXNpYyBwYXJhbWV0ZXJzIGFyZSBhZ3JlZWQgdXBvbiBidXQgbW9zdCBwcmFjdGljYWwgbW9kZWxzIGhhdmUgdXNlZCBhbiBhcHByb3hpbWF0aW9uIHdpdGggYWRqdXN0bWVudHMgd2hlcmUgdGhlIHBhcmFtZXRlcnMgY2FuIGhhdmUgd2lsZGx5IGRpZmZlcmVudCBtZWFuaW5ncy4gIFRvIGF2b2lkIGNvbmZ1c2lvbiBvciBtaXMtYmVoYXZpb3VyIGluIHRoaXMgYXJlYSwgd2hlcmUgcGFyYW1ldGVycyBhcmUgbm90IHVuZGVyc3Rvb2QgdG8gYmUgaW50ZXJjaGFuZ2VhYmxlLCB0aGV5IGFyZSBvbmx5IHNldHRhYmxlIG9uIGEgcGVyLWxpYnJhcnkgcGVyLW1vZGVsICBiYXNpcywgZXNzZW50aWFsbHkgYXMgb3BhcXVlIGRhdGEgdGhhdCB3aWxsIGJlIGdpdmVuIHRvIHRoZSBWZW5kb3IgbGlicmFyeSBcXFwidmVyYmF0aW1cXFwiIGJ1dCBub3QgdXNlZCB3aXRoIGFueSBvdGhlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmljaW5nQ29udGV4dCB7IFxuICAgIC8qKlxuICAgICAqIFRoZSBzZXQgb2YgbW9kZWwgcnVsZXMgdGhhdCBhcmUgYXZhaWxhYmxlLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgcnVsZXMgZm9yIFZlbmRvcnMsIGJ1dCBvbmx5IG9uZSBwZXIgbW9kZWwtaW5zdHJ1bWVudCBwYWlyLiAgV2hpY2ggb2YgdGhlc2UgcHJlZmVyZW5jZSBzZXRzIGlzIHVzZWQgZGVwZW5kcyB1cG9uIHRoZSBtb2RlbCBjaG9pY2Ugc2VsZWN0aW9uIGlmIHNwZWNpZmllZCwgb3IgZmFpbGluZyB0aGF0IHRoZSBnbG9iYWwgZGVmYXVsdCBtb2RlbCBzcGVjaWZpY2F0aW9uICBpbiB0aGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBtb2RlbFJ1bGVzPzogQXJyYXk8VmVuZG9yTW9kZWxSdWxlPjtcbiAgICAvKipcbiAgICAgKiBUaGUgY2hvaWNlIG9mIHdoaWNoIG1vZGVsIHNlbGVjdGlvbiAodmVuZG9yIGxpYnJhcnksIHByaWNpbmcgbW9kZWwpIHRvIHVzZSBpbiBldmFsdWF0aW9uIG9mIGEgZ2l2ZW4gaW5zdHJ1bWVudCB0eXBlLlxuICAgICAqL1xuICAgIG1vZGVsQ2hvaWNlPzogeyBba2V5OiBzdHJpbmddOiBNb2RlbFNlbGVjdGlvbjsgfTtcbiAgICAvKipcbiAgICAgKiBNaXNjZWxsYW5lb3VzIG9wdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHByaWNpbmcuXG4gICAgICovXG4gICAgb3B0aW9ucz86IFByaWNpbmdPcHRpb25zO1xufVxuIl19