UNPKG

@hmscore/cordova-plugin-hms-map

Version:
314 lines (310 loc) 64 kB
/* Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License") you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import { AwesomeCordovaNativePlugin, cordova } from "@awesome-cordova-plugins/core"; var HMSMapOriginal = /** @class */ (function (_super) { __extends(HMSMapOriginal, _super); function HMSMapOriginal() { return _super !== null && _super.apply(this, arguments) || this; } HMSMapOriginal.prototype.getMap = function (divId, huaweiMapOptions, bounds) { return cordova(this, "getMap", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.showMap = function (divId) { return cordova(this, "showMap", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.hasPermission = function () { return cordova(this, "hasPermission", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.convertCoordinate = function (LatLngObj) { return cordova(this, "convertCoordinate", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.convertCoordinates = function (LatLngListObj) { return cordova(this, "convertCoordinates", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.requestPermission = function () { return cordova(this, "requestPermission", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.computeDistanceBetween = function (from, to) { return cordova(this, "computeDistanceBetween", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.setApiKey = function (apiKey) { return cordova(this, "setApiKey", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.disableLogger = function () { return cordova(this, "disableLogger", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.enableLogger = function () { return cordova(this, "enableLogger", { "otherPromise": true }, arguments); }; HMSMapOriginal.prototype.initialize = function (routePolicy) { return cordova(this, "initialize", { "otherPromise": true }, arguments); }; HMSMapOriginal.pluginName = "HMSMap"; HMSMapOriginal.plugin = "cordova-plugin-hms-map"; HMSMapOriginal.pluginRef = "HMSMap"; HMSMapOriginal.repo = "https://github.com/HMS-Core/hms-cordova-plugin"; HMSMapOriginal.platforms = ["Android"]; return HMSMapOriginal; }(AwesomeCordovaNativePlugin)); var HMSMap = new HMSMapOriginal(); export { HMSMap }; var CameraUpdateFactory = /** @class */ (function () { function CameraUpdateFactory() { } CameraUpdateFactory.newCameraPosition = function (cameraPosition) { return HMSMapOriginal.getPlugin().CameraUpdateFactory.newCameraPosition(cameraPosition); }; CameraUpdateFactory.newLatLng = function (latLng) { return HMSMapOriginal.getPlugin().CameraUpdateFactory.newLatLng(latLng); }; CameraUpdateFactory.newLatLngBounds = function (latLngBounds, padding, width, height) { return HMSMapOriginal.getPlugin().CameraUpdateFactory.newLatLngBounds(latLngBounds, padding, width, height); }; CameraUpdateFactory.newLatLngZoom = function (latLng, zoom) { return HMSMapOriginal.getPlugin().CameraUpdateFactory.newLatLngZoom(latLng, zoom); }; CameraUpdateFactory.scrollBy = function (xPixel, yPixel) { return HMSMapOriginal.getPlugin().CameraUpdateFactory.scrollBy(xPixel, yPixel); }; CameraUpdateFactory.zoomBy = function (amount, focus) { return HMSMapOriginal.getPlugin().CameraUpdateFactory.zoomBy(amount, focus); }; CameraUpdateFactory.zoomIn = function () { return HMSMapOriginal.getPlugin().CameraUpdateFactory.zoomIn(); }; CameraUpdateFactory.zoomOut = function () { return HMSMapOriginal.getPlugin().CameraUpdateFactory.zoomOut(); }; CameraUpdateFactory.zoomTo = function (zoom) { return HMSMapOriginal.getPlugin().CameraUpdateFactory.zoomTo(zoom); }; CameraUpdateFactory.pluginName = "HMSMap"; CameraUpdateFactory.plugin = "cordova-plugin-hms-map"; CameraUpdateFactory.pluginRef = "HMSMap.CameraUpdateFactory"; CameraUpdateFactory.repo = "https://github.com/HMS-Core/hms-cordova-plugin"; CameraUpdateFactory.platforms = ["Android"]; return CameraUpdateFactory; }()); export { CameraUpdateFactory }; var MapStyleOptions = /** @class */ (function () { function MapStyleOptions(resourceName) { this.resourceName = resourceName; } MapStyleOptions.loadRawResourceStyle = function (resourceName) { return new MapStyleOptions(resourceName); }; MapStyleOptions.prototype.getResourceName = function () { return this.resourceName; }; return MapStyleOptions; }()); export { MapStyleOptions }; var Cap = /** @class */ (function () { function Cap() { this.refWidth = null; this.bitmapDescriptor = null; } Cap.prototype.getType = function () { return this.type; }; Cap.TYPE_BUTT_CAP = 0; Cap.TYPE_SQUARE_CAP = 1; Cap.TYPE_ROUND_CAP = 2; Cap.TYPE_CUSTOM_CAP = 3; return Cap; }()); export { Cap }; var ButtCap = /** @class */ (function (_super) { __extends(ButtCap, _super); function ButtCap() { var _this = _super.call(this) || this; _this.type = 0; return _this; } return ButtCap; }(Cap)); export { ButtCap }; var RoundCap = /** @class */ (function (_super) { __extends(RoundCap, _super); function RoundCap() { var _this = _super.call(this) || this; _this.type = 2; return _this; } return RoundCap; }(Cap)); export { RoundCap }; var SquareCap = /** @class */ (function (_super) { __extends(SquareCap, _super); function SquareCap() { var _this = _super.call(this) || this; _this.type = 1; return _this; } return SquareCap; }(Cap)); export { SquareCap }; var CustomCap = /** @class */ (function (_super) { __extends(CustomCap, _super); function CustomCap(bitmapDescriptor, refWidth) { var _this = _super.call(this) || this; _this.type = 3; _this.bitmapDescriptor = bitmapDescriptor; _this.refWidth = refWidth; return _this; } CustomCap.prototype.getRefWidth = function () { return this.refWidth; }; CustomCap.prototype.getBitmapDescriptor = function () { return this.bitmapDescriptor; }; return CustomCap; }(Cap)); export { CustomCap }; var AnimationSet = /** @class */ (function () { function AnimationSet() { this.animations = new Map(); } AnimationSet.prototype.addRotateAnimation = function (animation) { this.animations.set("Rotate", animation); }; AnimationSet.prototype.addScaleAnimation = function (animation) { this.animations.set("Scale", animation); }; AnimationSet.prototype.addTranslateAnimation = function (animation) { this.animations.set("Translate", animation); }; AnimationSet.prototype.addAlphaAnimation = function (animation) { this.animations.set("Alpha", animation); }; return AnimationSet; }()); export { AnimationSet }; export var RadiusUnit; (function (RadiusUnit) { RadiusUnit["PIXEL"] = "pixel"; RadiusUnit["METER"] = "meter"; })(RadiusUnit || (RadiusUnit = {})); /*-------------------------------------------------------------ENUMS----------------------------------------------------------*/ export var TileType; (function (TileType) { TileType[TileType["URL_TILE"] = 0] = "URL_TILE"; TileType[TileType["REPETITIVE_TILE"] = 1] = "REPETITIVE_TILE"; TileType[TileType["LOCAL_TILE"] = 2] = "LOCAL_TILE"; })(TileType || (TileType = {})); export var Color; (function (Color) { Color[Color["RED"] = -65536] = "RED"; Color[Color["DARK_GRAY"] = -12303292] = "DARK_GRAY"; Color[Color["GRAY"] = -7829368] = "GRAY"; Color[Color["WHITE"] = -1] = "WHITE"; Color[Color["BLUE"] = -16776961] = "BLUE"; Color[Color["BLACK"] = -16777216] = "BLACK"; Color[Color["LITE_GRAY"] = -3355444] = "LITE_GRAY"; Color[Color["MAGENTA"] = -65281] = "MAGENTA"; Color[Color["YELLOW"] = -256] = "YELLOW"; Color[Color["CYAN"] = -16711681] = "CYAN"; Color[Color["GREEN"] = -16711936] = "GREEN"; Color[Color["TRANSPARENT"] = 0] = "TRANSPARENT"; })(Color || (Color = {})); export var JointType; (function (JointType) { JointType[JointType["ROUND"] = 2] = "ROUND"; JointType[JointType["BEVEL"] = 1] = "BEVEL"; JointType[JointType["DEFAULT"] = 0] = "DEFAULT"; })(JointType || (JointType = {})); export var MapEvent; (function (MapEvent) { MapEvent["ON_INDOOR_BUILDINGS_FOCUSED"] = "onIndoorBuildingsFocused"; MapEvent["ON_INDOOR_LEVEL_ACTIVATED"] = "onIndoorLevelActivated"; MapEvent["ON_MAP_LOADED"] = "onMapLoaded"; MapEvent["ON_CAMERA_IDLE"] = "onCameraIdle"; MapEvent["ON_CAMERA_MOVE_CANCELED"] = "onCameraMoveCanceled"; MapEvent["ON_CAMERA_MOVE"] = "onCameraMove"; MapEvent["ON_CAMERA_MOVE_STARTED"] = "onCameraMoveStarted"; MapEvent["ON_CIRCLE_CLICK"] = "onCircleClick"; MapEvent["ON_GROUND_OVERLAY_CLICK"] = "onGroundOverlayClick"; MapEvent["ON_INFO_WINDOW_CLICK"] = "onInfoWindowClick"; MapEvent["ON_INFO_WINDOW_CLOSE"] = "onInfoWindowClose"; MapEvent["ON_INFO_WINDOW_LONG_CLICK"] = "onInfoWindowLongClick"; MapEvent["ON_MAP_CLICK"] = "onMapClick"; MapEvent["ON_MAP_LONG_CLICK"] = "onMapLongClick"; MapEvent["ON_MARKER_CLICK"] = "onMarkerClick"; MapEvent["ON_MARKER_DRAG_START"] = "onMarkerDragStart"; MapEvent["ON_MARKER_DRAG"] = "onMarkerDrag"; MapEvent["ON_MARKER_DRAG_END"] = "onMarkerDragEnd"; MapEvent["ON_MY_LOCATION_BUTTON_CLICK"] = "onMyLocationButtonClick"; MapEvent["ON_MY_LOCATION_CLICK"] = "onMyLocationClick"; MapEvent["ON_POI_CLICK"] = "onPoiClick"; MapEvent["ON_POLYGON_CLICK"] = "onPolygonClick"; MapEvent["ON_POLYLINE_CLICK"] = "onPolylineClick"; MapEvent["ON_CANCELABLE_CALLBACK_FINISH"] = "onCancelableCallbackFinish"; MapEvent["ON_CANCELABLE_CALLBACK_CANCEL"] = "onCancelableCallbackCancel"; MapEvent["ON_SNAPSHOT_READY_CALLBACK"] = "onSnapshotReadyCallback"; })(MapEvent || (MapEvent = {})); export var MapType; (function (MapType) { MapType[MapType["MAP_TYPE_NONE"] = 0] = "MAP_TYPE_NONE"; MapType[MapType["MAP_TYPE_SATELLITE"] = 2] = "MAP_TYPE_SATELLITE"; MapType[MapType["MAP_TYPE_NORMAL"] = 1] = "MAP_TYPE_NORMAL"; MapType[MapType["MAP_TYPE_HYBRID"] = 4] = "MAP_TYPE_HYBRID"; MapType[MapType["MAP_TYPE_TERRAIN"] = 3] = "MAP_TYPE_TERRAIN"; })(MapType || (MapType = {})); export var Hue; (function (Hue) { Hue[Hue["HUE_GREEN"] = 120] = "HUE_GREEN"; Hue[Hue["HUE_AZURE"] = 210] = "HUE_AZURE"; Hue[Hue["HUE_ROSE"] = 330] = "HUE_ROSE"; Hue[Hue["HUE_CYAN"] = 180] = "HUE_CYAN"; Hue[Hue["HUE_ORANGE"] = 30] = "HUE_ORANGE"; Hue[Hue["HUE_MAGENTA"] = 300] = "HUE_MAGENTA"; Hue[Hue["HUE_VIOLET"] = 270] = "HUE_VIOLET"; Hue[Hue["HUE_YELLOW"] = 60] = "HUE_YELLOW"; Hue[Hue["HUE_BLUE"] = 240] = "HUE_BLUE"; Hue[Hue["HUE_RED"] = 0] = "HUE_RED"; })(Hue || (Hue = {})); export var PatternItemType; (function (PatternItemType) { PatternItemType[PatternItemType["TYPE_GAP"] = 2] = "TYPE_GAP"; PatternItemType[PatternItemType["TYPE_DOT"] = 1] = "TYPE_DOT"; PatternItemType[PatternItemType["TYPE_DASH"] = 0] = "TYPE_DASH"; })(PatternItemType || (PatternItemType = {})); export var CameraMoveStartedReason; (function (CameraMoveStartedReason) { CameraMoveStartedReason[CameraMoveStartedReason["REASON_API_ANIMATION"] = 2] = "REASON_API_ANIMATION"; CameraMoveStartedReason[CameraMoveStartedReason["REASON_DEVELOPER_ANIMATION"] = 3] = "REASON_DEVELOPER_ANIMATION"; CameraMoveStartedReason[CameraMoveStartedReason["REASON_GESTURE"] = 1] = "REASON_GESTURE"; })(CameraMoveStartedReason || (CameraMoveStartedReason = {})); export var InterpolatorType; (function (InterpolatorType) { InterpolatorType[InterpolatorType["LINEAR"] = 0] = "LINEAR"; InterpolatorType[InterpolatorType["ACCELERATE_DECELERATE"] = 1] = "ACCELERATE_DECELERATE"; InterpolatorType[InterpolatorType["ACCELERATE"] = 2] = "ACCELERATE"; InterpolatorType[InterpolatorType["ANTICIPATE"] = 3] = "ANTICIPATE"; InterpolatorType[InterpolatorType["ANTICIPATE_OVERSHOOT"] = 4] = "ANTICIPATE_OVERSHOOT"; InterpolatorType[InterpolatorType["BOUNCE"] = 5] = "BOUNCE"; InterpolatorType[InterpolatorType["CYCLE"] = 6] = "CYCLE"; InterpolatorType[InterpolatorType["DECELERATE"] = 7] = "DECELERATE"; InterpolatorType[InterpolatorType["OVERSHOOT"] = 8] = "OVERSHOOT"; InterpolatorType[InterpolatorType["PATH"] = 9] = "PATH"; })(InterpolatorType || (InterpolatorType = {})); export var AnimationConstant; (function (AnimationConstant) { AnimationConstant[AnimationConstant["FILL_MODE_FORWARDS"] = 0] = "FILL_MODE_FORWARDS"; AnimationConstant[AnimationConstant["FILL_MODE_BACKWARDS"] = 1] = "FILL_MODE_BACKWARDS"; AnimationConstant[AnimationConstant["INFINITE"] = -1] = "INFINITE"; AnimationConstant[AnimationConstant["RESTART"] = 1] = "RESTART"; AnimationConstant[AnimationConstant["REVERSE"] = 2] = "REVERSE"; })(AnimationConstant || (AnimationConstant = {})); export var Gravity; (function (Gravity) { Gravity[Gravity["TOP"] = 48] = "TOP"; Gravity[Gravity["BOTTOM"] = 80] = "BOTTOM"; Gravity[Gravity["START"] = 8388611] = "START"; Gravity[Gravity["END"] = 8388613] = "END"; })(Gravity || (Gravity = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvbmF0aXZlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQWlCQSxPQUFPLHVDQUErQyxNQUFNLCtCQUErQixDQUFDOztJQVVoRSwwQkFBMEI7Ozs7SUFFbEQsdUJBQU0sYUFDRixLQUFhLEVBQ2IsZ0JBQWtDLEVBQ2xDLE1BQWtCO0lBTXRCLHdCQUFPLGFBQUMsS0FBYTtJQUtyQiw4QkFBYTtJQUtiLGtDQUFpQixhQUFDLFNBQW9CO0lBS3RDLG1DQUFrQixhQUFDLGFBQTRCO0lBSy9DLGtDQUFpQjtJQUtqQix1Q0FBc0IsYUFDbEIsSUFBWSxFQUNaLEVBQVU7SUFNZCwwQkFBUyxhQUFDLE1BQWM7SUFLeEIsOEJBQWE7SUFLYiw2QkFBWTtJQUtaLDJCQUFVLGFBQUMsV0FBb0I7Ozs7OztpQkF0Rm5DO0VBMkI0QiwwQkFBMEI7U0FBekMsTUFBTTs7SUF3RWY7SUFBd0IsQ0FBQztJQUVsQixxQ0FBaUIsR0FBeEIsVUFBeUIsY0FBOEI7UUFDbkQsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQzNELGNBQWMsQ0FDakIsQ0FBQztJQUNOLENBQUM7SUFFTSw2QkFBUyxHQUFoQixVQUFpQixNQUFjO1FBQzNCLE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBT00sbUNBQWUsR0FBdEIsVUFDSSxZQUEwQixFQUMxQixPQUFlLEVBQ2YsS0FBYyxFQUNkLE1BQWU7UUFFZixPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQ3pELFlBQVksRUFDWixPQUFPLEVBQ1AsS0FBSyxFQUNMLE1BQU0sQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVNLGlDQUFhLEdBQXBCLFVBQXFCLE1BQWMsRUFBRSxJQUFZO1FBQzdDLE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FDdkQsTUFBTSxFQUNOLElBQUksQ0FDUCxDQUFDO0lBQ04sQ0FBQztJQUVNLDRCQUFRLEdBQWYsVUFBZ0IsTUFBYyxFQUFFLE1BQWM7UUFDMUMsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBSU0sMEJBQU0sR0FBYixVQUFjLE1BQWMsRUFBRSxLQUFhO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLDBCQUFNLEdBQWI7UUFDSSxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRU0sMkJBQU8sR0FBZDtRQUNJLE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFTSwwQkFBTSxHQUFiLFVBQWMsSUFBWTtRQUN0QixPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7Ozs7OzhCQTdKTDs7U0FrR2EsbUJBQW1COztJQWlFNUIseUJBQW9CLFlBQW9CO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFFYSxvQ0FBb0IsR0FBbEMsVUFBbUMsWUFBb0I7UUFDbkQsT0FBTyxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQseUNBQWUsR0FBZjtRQUNJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDOzBCQTdLTDs7Ozs7UUFzTGMsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixxQkFBZ0IsR0FBc0IsSUFBSSxDQUFDOztJQUVyRCxxQkFBTyxHQUFQO1FBQ0ksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFWZSxpQkFBYSxHQUFHLENBQUMsQ0FBQztJQUNsQixtQkFBZSxHQUFHLENBQUMsQ0FBQztJQUNwQixrQkFBYyxHQUFHLENBQUMsQ0FBQztJQUNuQixtQkFBZSxHQUFHLENBQUMsQ0FBQztjQXBMeEM7O1NBZ0xzQixHQUFHOztJQWNJLDJCQUFHO0lBQzVCO1FBQUEsWUFDSSxpQkFBTyxTQUVWO1FBREcsS0FBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7O0lBQ2xCLENBQUM7a0JBbE1MO0VBOEw2QixHQUFHOzs7SUFPRiw0QkFBRztJQUM3QjtRQUFBLFlBQ0ksaUJBQU8sU0FFVjtRQURHLEtBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDOztJQUNsQixDQUFDO21CQXpNTDtFQXFNOEIsR0FBRzs7O0lBT0YsNkJBQUc7SUFDOUI7UUFBQSxZQUNJLGlCQUFPLFNBRVY7UUFERyxLQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQzs7SUFDbEIsQ0FBQztvQkFoTkw7RUE0TStCLEdBQUc7OztJQU9ILDZCQUFHO0lBQzlCLG1CQUFZLGdCQUFrQyxFQUFFLFFBQWlCO1FBQWpFLFlBQ0ksaUJBQU8sU0FJVjtRQUhHLEtBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsS0FBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLEtBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDOztJQUM3QixDQUFDO0lBRUQsK0JBQVcsR0FBWDtRQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsdUNBQW1CLEdBQW5CO1FBQ0ksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztvQkFqT0w7RUFtTitCLEdBQUc7Ozs7UUFrQnJCLGVBQVUsR0FBMkIsSUFBSSxHQUFHLEVBQXFCLENBQUM7O0lBRTNFLHlDQUFrQixHQUFsQixVQUFtQixTQUEwQjtRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELHdDQUFpQixHQUFqQixVQUFrQixTQUF5QjtRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELDRDQUFxQixHQUFyQixVQUFzQixTQUE2QjtRQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELHdDQUFpQixHQUFqQixVQUFrQixTQUF5QjtRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQzt1QkFyUEw7OztBQTZwQkEsTUFBTSxDQUFOLElBQVksVUFHWDtBQUhELFdBQVksVUFBVTtJQUNsQiw2QkFBZSxDQUFBO0lBQ2YsNkJBQWUsQ0FBQTtBQUNuQixDQUFDLEVBSFcsVUFBVSxLQUFWLFVBQVUsUUFHckI7QUF1TkQsZ0lBQWdJO0FBQ2hJLE1BQU0sQ0FBTixJQUFZLFFBSVg7QUFKRCxXQUFZLFFBQVE7SUFDaEIsK0NBQVEsQ0FBQTtJQUNSLDZEQUFlLENBQUE7SUFDZixtREFBVSxDQUFBO0FBQ2QsQ0FBQyxFQUpXLFFBQVEsS0FBUixRQUFRLFFBSW5CO0FBRUQsTUFBTSxDQUFOLElBQVksS0FhWDtBQWJELFdBQVksS0FBSztJQUNiLG9DQUFZLENBQUE7SUFDWixtREFBcUIsQ0FBQTtJQUNyQix3Q0FBZSxDQUFBO0lBQ2Ysb0NBQVUsQ0FBQTtJQUNWLHlDQUFnQixDQUFBO0lBQ2hCLDJDQUFpQixDQUFBO0lBQ2pCLGtEQUFvQixDQUFBO0lBQ3BCLDRDQUFnQixDQUFBO0lBQ2hCLHdDQUFhLENBQUE7SUFDYix5Q0FBZ0IsQ0FBQTtJQUNoQiwyQ0FBaUIsQ0FBQTtJQUNqQiwrQ0FBZSxDQUFBO0FBQ25CLENBQUMsRUFiVyxLQUFLLEtBQUwsS0FBSyxRQWFoQjtBQUVELE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDakIsMkNBQVMsQ0FBQTtJQUNULDJDQUFTLENBQUE7SUFDVCwrQ0FBVyxDQUFBO0FBQ2YsQ0FBQyxFQUpXLFNBQVMsS0FBVCxTQUFTLFFBSXBCO0FBRUQsTUFBTSxDQUFOLElBQVksUUEyQlg7QUEzQkQsV0FBWSxRQUFRO0lBQ2hCLG9FQUF3RCxDQUFBO0lBQ3hELGdFQUFvRCxDQUFBO0lBQ3BELHlDQUE2QixDQUFBO0lBQzdCLDJDQUErQixDQUFBO0lBQy9CLDREQUFnRCxDQUFBO0lBQ2hELDJDQUErQixDQUFBO0lBQy9CLDBEQUE4QyxDQUFBO0lBQzlDLDZDQUFpQyxDQUFBO0lBQ2pDLDREQUFnRCxDQUFBO0lBQ2hELHNEQUEwQyxDQUFBO0lBQzFDLHNEQUEwQyxDQUFBO0lBQzFDLCtEQUFtRCxDQUFBO0lBQ25ELHVDQUEyQixDQUFBO0lBQzNCLGdEQUFvQyxDQUFBO0lBQ3BDLDZDQUFpQyxDQUFBO0lBQ2pDLHNEQUEwQyxDQUFBO0lBQzFDLDJDQUErQixDQUFBO0lBQy9CLGtEQUFzQyxDQUFBO0lBQ3RDLG1FQUF1RCxDQUFBO0lBQ3ZELHNEQUEwQyxDQUFBO0lBQzFDLHVDQUEyQixDQUFBO0lBQzNCLCtDQUFtQyxDQUFBO0lBQ25DLGlEQUFxQyxDQUFBO0lBQ3JDLHdFQUE0RCxDQUFBO0lBQzVELHdFQUE0RCxDQUFBO0lBQzVELGtFQUFzRCxDQUFBO0FBQzFELENBQUMsRUEzQlcsUUFBUSxLQUFSLFFBQVEsUUEyQm5CO0FBRUQsTUFBTSxDQUFOLElBQVksT0FNWDtBQU5ELFdBQVksT0FBTztJQUNmLHVEQUFpQixDQUFBO0lBQ2pCLGlFQUFzQixDQUFBO0lBQ3RCLDJEQUFtQixDQUFBO0lBQ25CLDJEQUFtQixDQUFBO0lBQ25CLDZEQUFvQixDQUFBO0FBQ3hCLENBQUMsRUFOVyxPQUFPLEtBQVAsT0FBTyxRQU1sQjtBQUVELE1BQU0sQ0FBTixJQUFZLEdBV1g7QUFYRCxXQUFZLEdBQUc7SUFDWCx5Q0FBZSxDQUFBO0lBQ2YseUNBQWUsQ0FBQTtJQUNmLHVDQUFjLENBQUE7SUFDZCx1Q0FBYyxDQUFBO0lBQ2QsMENBQWUsQ0FBQTtJQUNmLDZDQUFpQixDQUFBO0lBQ2pCLDJDQUFnQixDQUFBO0lBQ2hCLDBDQUFlLENBQUE7SUFDZix1Q0FBYyxDQUFBO0lBQ2QsbUNBQVcsQ0FBQTtBQUNmLENBQUMsRUFYVyxHQUFHLEtBQUgsR0FBRyxRQVdkO0FBRUQsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN2Qiw2REFBWSxDQUFBO0lBQ1osNkRBQVksQ0FBQTtJQUNaLCtEQUFhLENBQUE7QUFDakIsQ0FBQyxFQUpXLGVBQWUsS0FBZixlQUFlLFFBSTFCO0FBRUQsTUFBTSxDQUFOLElBQVksdUJBSVg7QUFKRCxXQUFZLHVCQUF1QjtJQUMvQixxR0FBd0IsQ0FBQTtJQUN4QixpSEFBOEIsQ0FBQTtJQUM5Qix5RkFBa0IsQ0FBQTtBQUN0QixDQUFDLEVBSlcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQUlsQztBQUVELE1BQU0sQ0FBTixJQUFZLGdCQVdYO0FBWEQsV0FBWSxnQkFBZ0I7SUFDeEIsMkRBQU0sQ0FBQTtJQUNOLHlGQUFxQixDQUFBO0lBQ3JCLG1FQUFVLENBQUE7SUFDVixtRUFBVSxDQUFBO0lBQ1YsdUZBQW9CLENBQUE7SUFDcEIsMkRBQU0sQ0FBQTtJQUNOLHlEQUFLLENBQUE7SUFDTCxtRUFBVSxDQUFBO0lBQ1YsaUVBQVMsQ0FBQTtJQUNULHVEQUFJLENBQUE7QUFDUixDQUFDLEVBWFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQVczQjtBQUVELE1BQU0sQ0FBTixJQUFZLGlCQU1YO0FBTkQsV0FBWSxpQkFBaUI7SUFDekIscUZBQXNCLENBQUE7SUFDdEIsdUZBQXVCLENBQUE7SUFDdkIsa0VBQWEsQ0FBQTtJQUNiLCtEQUFXLENBQUE7SUFDWCwrREFBVyxDQUFBO0FBQ2YsQ0FBQyxFQU5XLGlCQUFpQixLQUFqQixpQkFBaUIsUUFNNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxPQUtYO0FBTEQsV0FBWSxPQUFPO0lBQ2Ysb0NBQVEsQ0FBQTtJQUNSLDBDQUFXLENBQUE7SUFDWCw2Q0FBZSxDQUFBO0lBQ2YseUNBQWEsQ0FBQTtBQUNqQixDQUFDLEVBTFcsT0FBTyxLQUFQLE9BQU8sUUFLbEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gICAgQ29weXJpZ2h0IDIwMjAtMjAyNC4gSHVhd2VpIFRlY2hub2xvZ2llcyBDby4sIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpXHJcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuXHJcbiAgICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiovXHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29yZG92YSwgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4sIFBsdWdpbiB9IGZyb20gXCJAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvY29yZVwiO1xyXG5cclxuQFBsdWdpbih7XHJcbiAgICBwbHVnaW5OYW1lOiBcIkhNU01hcFwiLFxyXG4gICAgcGx1Z2luOiBcImNvcmRvdmEtcGx1Z2luLWhtcy1tYXBcIixcclxuICAgIHBsdWdpblJlZjogXCJITVNNYXBcIixcclxuICAgIHJlcG86IFwiaHR0cHM6Ly9naXRodWIuY29tL0hNUy1Db3JlL2htcy1jb3Jkb3ZhLXBsdWdpblwiLFxyXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxyXG59KVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBITVNNYXAgZXh0ZW5kcyBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB7XHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZ2V0TWFwKFxyXG4gICAgICAgIGRpdklkOiBzdHJpbmcsXHJcbiAgICAgICAgaHVhd2VpTWFwT3B0aW9uczogSHVhd2VpTWFwT3B0aW9ucyxcclxuICAgICAgICBib3VuZHM/OiBNYXBCb3VuZHNcclxuICAgICk6IFByb21pc2U8SHVhd2VpTWFwPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBzaG93TWFwKGRpdklkOiBzdHJpbmcpOiBQcm9taXNlPEh1YXdlaU1hcD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgaGFzUGVybWlzc2lvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGNvbnZlcnRDb29yZGluYXRlKExhdExuZ09iajogTGF0TG5nT2JqKTogUHJvbWlzZTxMYXRMbmdPYmo+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGNvbnZlcnRDb29yZGluYXRlcyhMYXRMbmdMaXN0T2JqOiBMYXRMbmdMaXN0T2JqKTogUHJvbWlzZTxMYXRMbmdMaXN0T2JqW10+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIHJlcXVlc3RQZXJtaXNzaW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgY29tcHV0ZURpc3RhbmNlQmV0d2VlbihcclxuICAgICAgICBmcm9tOiBMYXRMbmcsXHJcbiAgICAgICAgdG86IExhdExuZ1xyXG4gICAgKTogUHJvbWlzZTxDb21wdXRlRGlzdGFuY2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIHNldEFwaUtleShhcGlLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZGlzYWJsZUxvZ2dlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGVuYWJsZUxvZ2dlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGluaXRpYWxpemUocm91dGVQb2xpY3k/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbn1cclxuXHJcbkBQbHVnaW4oe1xyXG4gICAgcGx1Z2luTmFtZTogXCJITVNNYXBcIixcclxuICAgIHBsdWdpbjogXCJjb3Jkb3ZhLXBsdWdpbi1obXMtbWFwXCIsXHJcbiAgICBwbHVnaW5SZWY6IFwiSE1TTWFwLkNhbWVyYVVwZGF0ZUZhY3RvcnlcIixcclxuICAgIHJlcG86IFwiaHR0cHM6Ly9naXRodWIuY29tL0hNUy1Db3JlL2htcy1jb3Jkb3ZhLXBsdWdpblwiLFxyXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FtZXJhVXBkYXRlRmFjdG9yeSB7XHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgc3RhdGljIG5ld0NhbWVyYVBvc2l0aW9uKGNhbWVyYVBvc2l0aW9uOiBDYW1lcmFQb3NpdGlvbik6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lm5ld0NhbWVyYVBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYW1lcmFQb3NpdGlvblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5ld0xhdExuZyhsYXRMbmc6IExhdExuZyk6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lm5ld0xhdExuZyhsYXRMbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBuZXdMYXRMbmdCb3VuZHMoXHJcbiAgICAgICAgbGF0TG5nQm91bmRzOiBMYXRMbmdCb3VuZHMsXHJcbiAgICAgICAgcGFkZGluZzogbnVtYmVyXHJcbiAgICApOiBDYW1lcmFVcGRhdGU7XHJcblxyXG4gICAgc3RhdGljIG5ld0xhdExuZ0JvdW5kcyhcclxuICAgICAgICBsYXRMbmdCb3VuZHM6IExhdExuZ0JvdW5kcyxcclxuICAgICAgICBwYWRkaW5nOiBudW1iZXIsXHJcbiAgICAgICAgd2lkdGg/OiBudW1iZXIsXHJcbiAgICAgICAgaGVpZ2h0PzogbnVtYmVyXHJcbiAgICApOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS5uZXdMYXRMbmdCb3VuZHMoXHJcbiAgICAgICAgICAgIGxhdExuZ0JvdW5kcyxcclxuICAgICAgICAgICAgcGFkZGluZyxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5ld0xhdExuZ1pvb20obGF0TG5nOiBMYXRMbmcsIHpvb206IG51bWJlcik6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lm5ld0xhdExuZ1pvb20oXHJcbiAgICAgICAgICAgIGxhdExuZyxcclxuICAgICAgICAgICAgem9vbVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNjcm9sbEJ5KHhQaXhlbDogbnVtYmVyLCB5UGl4ZWw6IG51bWJlcik6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5LnNjcm9sbEJ5KHhQaXhlbCwgeVBpeGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgem9vbUJ5KGFtb3VudDogbnVtYmVyKTogQ2FtZXJhVXBkYXRlO1xyXG5cclxuICAgIHN0YXRpYyB6b29tQnkoYW1vdW50OiBudW1iZXIsIGZvY3VzPzogUG9pbnQpOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS56b29tQnkoYW1vdW50LCBmb2N1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHpvb21JbigpOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS56b29tSW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgem9vbU91dCgpOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS56b29tT3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHpvb21Ubyh6b29tOiBudW1iZXIpOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS56b29tVG8oem9vbSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXBTdHlsZU9wdGlvbnMge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZU5hbWU6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHJlc291cmNlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yZXNvdXJjZU5hbWUgPSByZXNvdXJjZU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBsb2FkUmF3UmVzb3VyY2VTdHlsZShyZXNvdXJjZU5hbWU6IHN0cmluZyk6IE1hcFN0eWxlT3B0aW9ucyB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXBTdHlsZU9wdGlvbnMocmVzb3VyY2VOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXNvdXJjZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZU5hbWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDYXAge1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IFRZUEVfQlVUVF9DQVAgPSAwO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IFRZUEVfU1FVQVJFX0NBUCA9IDE7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgVFlQRV9ST1VORF9DQVAgPSAyO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IFRZUEVfQ1VTVE9NX0NBUCA9IDM7XHJcbiAgICBwcm90ZWN0ZWQgdHlwZTogbnVtYmVyO1xyXG4gICAgcHJvdGVjdGVkIHJlZldpZHRoPzogbnVtYmVyID0gbnVsbDtcclxuICAgIHByb3RlY3RlZCBiaXRtYXBEZXNjcmlwdG9yPzogQml0bWFwRGVzY3JpcHRvciA9IG51bGw7XHJcblxyXG4gICAgZ2V0VHlwZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnR5cGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCdXR0Q2FwIGV4dGVuZHMgQ2FwIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy50eXBlID0gMDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJvdW5kQ2FwIGV4dGVuZHMgQ2FwIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy50eXBlID0gMjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNxdWFyZUNhcCBleHRlbmRzIENhcCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IDE7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21DYXAgZXh0ZW5kcyBDYXAge1xyXG4gICAgY29uc3RydWN0b3IoYml0bWFwRGVzY3JpcHRvcjogQml0bWFwRGVzY3JpcHRvciwgcmVmV2lkdGg/OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IDM7XHJcbiAgICAgICAgdGhpcy5iaXRtYXBEZXNjcmlwdG9yID0gYml0bWFwRGVzY3JpcHRvcjtcclxuICAgICAgICB0aGlzLnJlZldpZHRoID0gcmVmV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmVmV2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWZXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCaXRtYXBEZXNjcmlwdG9yKCk6IEJpdG1hcERlc2NyaXB0b3Ige1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJpdG1hcERlc2NyaXB0b3I7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBbmltYXRpb25TZXQge1xyXG4gICAgcmVhZG9ubHkgYW5pbWF0aW9uczogTWFwPHN0cmluZywgQW5pbWF0aW9uPiA9IG5ldyBNYXA8c3RyaW5nLCBBbmltYXRpb24+KCk7XHJcblxyXG4gICAgYWRkUm90YXRlQW5pbWF0aW9uKGFuaW1hdGlvbjogUm90YXRlQW5pbWF0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25zLnNldChcIlJvdGF0ZVwiLCBhbmltYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNjYWxlQW5pbWF0aW9uKGFuaW1hdGlvbjogU2NhbGVBbmltYXRpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFuaW1hdGlvbnMuc2V0KFwiU2NhbGVcIiwgYW5pbWF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUcmFuc2xhdGVBbmltYXRpb24oYW5pbWF0aW9uOiBUcmFuc2xhdGVBbmltYXRpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFuaW1hdGlvbnMuc2V0KFwiVHJhbnNsYXRlXCIsIGFuaW1hdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWxwaGFBbmltYXRpb24oYW5pbWF0aW9uOiBBbHBoYUFuaW1hdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9ucy5zZXQoXCJBbHBoYVwiLCBhbmltYXRpb24pO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9JTlRFUkZBQ0VTLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVaVNldHRpbmdzIHtcclxuICAgIGlzQ29tcGFzc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzSW5kb29yTGV2ZWxQaWNrZXJFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc01hcFRvb2xiYXJFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc015TG9jYXRpb25CdXR0b25FbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc1JvdGF0ZUdlc3R1cmVzRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNTY3JvbGxHZXN0dXJlc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzU2Nyb2xsR2VzdHVyZXNFbmFibGVkRHVyaW5nUm90YXRlT3Jab29tKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc1RpbHRHZXN0dXJlc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzWm9vbUNvbnRyb2xzRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNab29tR2VzdHVyZXNFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBzZXRBbGxHZXN0dXJlc0VuYWJsZWQoYWxsR2VzdHVyZXNFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldENvbXBhc3NFbmFibGVkKGNvbXBhc3NFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEluZG9vckxldmVsUGlja2VyRW5hYmxlZChcclxuICAgICAgICBpbmRvb3JMZXZlbFBpY2tlckVuYWJsZWQ6IGJvb2xlYW5cclxuICAgICk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXBUb29sYmFyRW5hYmxlZChtYXBUb29sYmFyRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNeUxvY2F0aW9uQnV0dG9uRW5hYmxlZChteUxvY2F0aW9uQnV0dG9uRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRSb3RhdGVHZXN0dXJlc0VuYWJsZWQocm90YXRlR2VzdHVyZXNFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFNjcm9sbEdlc3R1cmVzRW5hYmxlZChzY3JvbGxHZXN0dXJlc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U2Nyb2xsR2VzdHVyZXNFbmFibGVkRHVyaW5nUm90YXRlT3Jab29tKFxyXG4gICAgICAgIHNjcm9sbEdlc3R1cmVzRW5hYmxlZER1cmluZ1JvdGF0ZU9yWm9vbTogYm9vbGVhblxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRpbHRHZXN0dXJlc0VuYWJsZWQodGlsdEdlc3R1cmVzRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRab29tQ29udHJvbHNFbmFibGVkKHpvb21Db250cm9sc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Wm9vbUdlc3R1cmVzRW5hYmxlZCh6b29tR2VzdHVyZXNFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEdlc3R1cmVTY2FsZUJ5TWFwQ2VudGVyKFxyXG4gICAgICAgIGdlc3R1cmVTY2FsZUJ5TWFwQ2VudGVyRW5hYmxlZDogYm9vbGVhblxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcmtlckNsdXN0ZXJDb2xvcihtYXJrZXJDbHVzdGVyQ29sb3I6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXJrZXJDbHVzdGVySWNvbihtYXJrZXJDbHVzdGVySWNvbjogQml0bWFwRGVzY3JpcHRvcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXJrZXJDbHVzdGVyVGV4dENvbG9yKG1hcmtlckNsdXN0ZXJUZXh0Q29sb3I6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRMb2dvUG9zaXRpb24obG9nb1Bvc2l0aW9uOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TG9nb1BhZGRpbmcoXHJcbiAgICAgICAgcGFkZGluZ1N0YXJ0OiBudW1iZXIsXHJcbiAgICAgICAgcGFkZGluZ1RvcDogbnVtYmVyLFxyXG4gICAgICAgIHBhZGRpbmdFbmQ6IG51bWJlcixcclxuICAgICAgICBwYWRkaW5nQm90dG9tOiBudW1iZXJcclxuICAgICk6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSHVhd2VpTWFwIHtcclxuICAgIG9uKGV2ZW50OiBNYXBFdmVudCwgY2FsbGJhY2s6ICh2YWw6IGFueSkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBkZXN0cm95TWFwKCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBoaWRlTWFwKCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBnZXRDb21wb25lbnQoa2V5OiBzdHJpbmcpOiBhbnk7XHJcbiAgICByZW1vdmVDb21wb25lbnQoa2V5OiBzdHJpbmcpOiB2b2lkO1xyXG4gICAgZ2V0SWQoKTogbnVtYmVyO1xyXG4gICAgc2Nyb2xsKCk6IHZvaWQ7XHJcbiAgICBzeW5jRGltZW5zaW9ucygpOiB2b2lkO1xyXG4gICAgYWRkQ2lyY2xlKGNpcmNsZU9wdGlvbnM6IENpcmNsZU9wdGlvbnMpOiBQcm9taXNlPENpcmNsZT47XHJcbiAgICBhZGRIZWF0TWFwKGhlYXRNYXBPcHRpb25zOiBIZWF0TWFwT3B0aW9ucyk6IFByb21pc2U8SGVhdE1hcD5cclxuICAgIGFkZE1hcmtlcihtYXJrZXJPcHRpb25zOiBNYXJrZXJPcHRpb25zKTogUHJvbWlzZTxNYXJrZXI+O1xyXG4gICAgYWRkR3JvdW5kT3ZlcmxheShcclxuICAgICAgICBncm91bmRPdmVybGF5T3B0aW9uczogR3JvdW5kT3ZlcmxheU9wdGlvbnNcclxuICAgICk6IFByb21pc2U8R3JvdW5kT3ZlcmxheT47XHJcbiAgICBhZGRUaWxlT3ZlcmxheShcclxuICAgICAgICB0aWxlT3ZlcmxheU9wdGlvbnM6IFRpbGVPdmVybGF5T3B0aW9uc1xyXG4gICAgKTogUHJvbWlzZTxUaWxlT3ZlcmxheT47XHJcbiAgICBhZGRQb2x5Z29uKHBvbHlnb25PcHRpb25zOiBQb2x5Z29uT3B0aW9ucyk6IFByb21pc2U8UG9seWdvbj47XHJcbiAgICBhZGRQb2x5bGluZShwb2x5bGluZU9wdGlvbnM6IFBvbHlsaW5lT3B0aW9ucyk6IFByb21pc2U8UG9seWxpbmU+O1xyXG4gICAgYW5pbWF0ZUNhbWVyYShjYW1lcmFVcGRhdGU6IENhbWVyYVVwZGF0ZSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBhbmltYXRlQ2FtZXJhKFxyXG4gICAgICAgIGNhbWVyYVVwZGF0ZTogQ2FtZXJhVXBkYXRlLFxyXG4gICAgICAgIGNhbmNlbGFibGVDYWxsYmFjazogQ2FuY2VsYWJsZUNhbGxiYWNrXHJcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgYW5pbWF0ZUNhbWVyYShcclxuICAgICAgICBjYW1lcmFVcGRhdGU6IENhbWVyYVVwZGF0ZSxcclxuICAgICAgICBjYW5jZWxhYmxlQ2FsbGJhY2s/OiBDYW5jZWxhYmxlQ2FsbGJhY2ssXHJcbiAgICAgICAgZHVyYXRpb25Ncz86IG51bWJlclxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIG1vdmVDYW1lcmEoY2FtZXJhVXBkYXRlOiBDYW1lcmFVcGRhdGUpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgY2xlYXIoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHJlc2V0TWluTWF4Wm9vbVByZWZlcmVuY2UoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHN0b3BBbmltYXRpb24oKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGdldENhbWVyYVBvc2l0aW9uKCk6IFByb21pc2U8Q2FtZXJhUG9zaXRpb24+O1xyXG4gICAgZ2V0TWFwVHlwZSgpOiBQcm9taXNlPE1hcFR5cGU+O1xyXG4gICAgZ2V0TWF4Wm9vbUxldmVsKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldE1pblpvb21MZXZlbCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRQcm9qZWN0aW9uKCk6IFByb2plY3Rpb247XHJcbiAgICBnZXRVaVNldHRpbmdzKCk6IFVpU2V0dGluZ3M7XHJcbiAgICBnZXRTY2FsZVBlclBpeGVsKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldE15TG9jYXRpb25TdHlsZSgpOiBQcm9taXNlPE15TG9jYXRpb25TdHlsZT47XHJcbiAgICBpc0J1aWxkaW5nc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzRGFyaygpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNNeUxvY2F0aW9uRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNUcmFmZmljRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNJbmRvb3JFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBcclxuICAgIHNldEJ1aWxkaW5nc0VuYWJsZWQoYnVpbGRpbmdzRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXREYXJrRW5hYmxlZChkYXJrRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRDb250ZW50RGVzY3JpcHRpb24oY29udGVudERlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0SW5mb1dpbmRvd0FkYXB0ZXIoaW5mb1dpbmRvd0FkYXB0ZXI6IEluZm9XaW5kb3dBZGFwdGVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldExhdExuZ0JvdW5kc0ZvckNhbWVyYVRhcmdldChcclxuICAgICAgICBsYXRMbmdCb3VuZHNGb3JDYW1lcmFUYXJnZXQ6IExhdExuZ0JvdW5kc1xyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldExvY2F0aW9uU291cmNlKGxvY2F0aW9uU291cmNlOiBMb2NhdGlvblNvdXJjZSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXBTdHlsZShtYXBTdHlsZTogTWFwU3R5bGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcFR5cGUobWFwVHlwZTogTWFwVHlwZSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXJrZXJzQ2x1c3RlcmluZyhtYXJrZXJzQ2x1c3RlcmluZzogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXhab29tUHJlZmVyZW5jZShtYXhab29tUHJlZmVyZW5jZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1pblpvb21QcmVmZXJlbmNlKG1pblpvb21QcmVmZXJlbmNlOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TXlMb2NhdGlvbkVuYWJsZWQobXlMb2NhdGlvbkVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0UGFkZGluZyhcclxuICAgICAgICBsZWZ0OiBudW1iZXIsXHJcbiAgICAgICAgdG9wOiBudW1iZXIsXHJcbiAgICAgICAgcmlnaHQ6IG51bWJlcixcclxuICAgICAgICBib3R0b206IG51bWJlclxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRyYWZmaWNFbmFibGVkKHRyYWZmaWNFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNuYXBzaG90KFxyXG4gICAgICAgIG9uUmVhZHlDYWxsYmFjazogKHNuYXBzaG90OiBTbmFwc2hvdFJlc3VsdCkgPT4gdm9pZFxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcFBvaW50ZXJzRW5hYmxlZChtYXBQb2ludGVyc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgaXNNYXBQb2ludGVyc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIHNldFBvaW50VG9DZW50ZXIoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3R5bGVJZChzdHlsZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgcHJldmlld0lkKHByZXZpZXdJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE15TG9jYXRpb25TdHlsZShzdHlsZTogTXlMb2NhdGlvblN0eWxlKTogUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYW1lcmFVcGRhdGUge1xyXG4gICAgbW92ZUNhbWVyYShtYXBJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgYW5pbWF0ZUNhbWVyYShtYXBJZDogc3RyaW5nLCBwcm9wczogYW55KTogUHJvbWlzZTxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENpcmNsZSB7XHJcbiAgICBnZXRDZW50ZXIoKTogUHJvbWlzZTxMYXRMbmc+O1xyXG4gICAgZ2V0RmlsbENvbG9yKCk6IFByb21pc2U8Q29sb3I+O1xyXG4gICAgZ2V0SWQoKTogc3RyaW5nO1xyXG4gICAgZ2V0UmFkaXVzKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFN0cm9rZUNvbG9yKCk6IFByb21pc2U8Q29sb3I+O1xyXG4gICAgZ2V0U3Ryb2tlUGF0dGVybigpOiBQcm9taXNlPFBhdHRlcm5JdGVtW10+O1xyXG4gICAgZ2V0U3Ryb2tlV2lkdGgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0VGFnKCk6IFByb21pc2U8YW55PjtcclxuICAgIGdldFpJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBpc0NsaWNrYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNWaXNpYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICByZW1vdmUoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHN0YXJ0QW5pbWF0aW9uKCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBjbGVhckFuaW1hdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+OyBcclxuICAgIHNldENlbnRlcihjZW50ZXI6IExhdExuZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRGaWxsQ29sb3IoZmlsbENvbG9yOiBDb2xvcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRSYWRpdXMocmFkaXVzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3I6IENvbG9yKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFN0cm9rZVBhdHRlcm4oc3Ryb2tlUGF0dGVybjogUGF0dGVybkl0ZW1bXSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTdHJva2VXaWR0aChzdHJva2VXaWR0aDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRhZyh0YWc6IGFueSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRaSW5kZXgoekluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Q2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0QW5pbWF0aW9uKGFuaW1hdGlvbjogQW5pbWF0aW9uU2V0KTogUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIZWF0TWFwIHtcclxuXHJcbiAgICBnZXRJZCgpOiBzdHJpbmc7XHJcbiAgICByZW1vdmUoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGNoYW5nZURhdGFTZXQoanNvbkRhdGE6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBjaGFuZ2VEYXRhU2V0SWQocmVzb3VyY2VJZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGdldFJhZGl1c1VuaXQoKTogUHJvbWlzZTxSYWRpdXNVbml0PjtcclxuICAgIHNldFJhZGl1c1VuaXQocmFkaXVzVW5pdDogUmFkaXVzVW5pdCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRDb2xvcihjb2xvcjogTWFwPG51bWJlciwgTnVtYmVyW10+KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEludGVuc2l0eShpbnRlbnNpdHk6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRJbnRlbnNpdGllcyhpbnRlbnNpdGllczogTWFwPG51bWJlciwgbnVtYmVyPik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRPcGFjaXR5KG9wYWNpdHk6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRPcGFjaXRpZXMoT3BhY2l0aWVzOiBNYXA8bnVtYmVyLCBudW1iZXI+KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFJhZGl1cyhyYWRpdXM6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRSYWRpdXNlcyhyYWRpdXNlczogTWFwPG51bWJlciwgbnVtYmVyPik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91bmRPdmVybGF5IHtcclxuICAgIGdldEJlYXJpbmcoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0Qm91bmRzKCk6IFByb21pc2U8TGF0TG5nQm91bmRzPjtcclxuICAgIGdldEhlaWdodCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRJZCgpOiBzdHJpbmc7XHJcbiAgICBnZXRQb3NpdGlvbigpOiBQcm9taXNlPExhdExuZz47XHJcbiAgICBnZXRUYWcoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgZ2V0VHJhbnNwYXJlbmN5KCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFdpZHRoKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFpJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBpc0NsaWNrYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNWaXNpYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcblxyXG4gICAgcmVtb3ZlKCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gICAgc2V0QmVhcmluZyhiZWFyaW5nOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Q2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXREaW1lbnNpb25zKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldERpbWVuc2lvbnMod2lkdGg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRJbWFnZShpbWFnZURlc2NyaXB0b3I6IEJpdG1hcERlc2NyaXB0b3IpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0UG9zaXRpb24ocG9zaXRpb246IExhdExuZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQb3NpdGlvbkZyb21Cb3VuZHMocG9zaXRpb25MYXRMbmdCb3VuZHM6IExhdExuZ0JvdW5kcyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUYWcodGFnOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VHJhbnNwYXJlbmN5KHRyYW5zcGFyZW5jeTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRaSW5kZXgoekluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtlciB7XHJcbiAgICBnZXRBbHBoYSgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRJZCgpOiBzdHJpbmc7XHJcbiAgICBnZXRQb3NpdGlvbigpOiBQcm9taXNlPExhdExuZz47XHJcbiAgICBnZXRSb3RhdGlvbigpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRTbmlwcGV0KCk6IFByb21pc2U8c3RyaW5nPjtcclxuICAgIGdldFRhZygpOiBQcm9taXNlPGFueT47XHJcbiAgICBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz47XHJcbiAgICBnZXRaSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgaXNWaXNpYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0NsdXN0ZXJhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0RyYWdnYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNGbGF0KCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0luZm9XaW5kb3dTaG93bigpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNDbGlja2FibGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuXHJcbiAgICByZW1vdmUoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGhpZGVJbmZvV2luZG93KCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzaG93SW5mb1dpbmRvdygpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc3RhcnRBbmltYXRpb24oKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgICBzZXRBbHBoYShhbHBoYTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEFuaW1hdGlvbihhbmltYXRpb246IEFuaW1hdGlvblNldCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXREcmFnZ2FibGUoZHJhZ2dhYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEZsYXQoZmxhdDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRJY29uKGljb246IEJpdG1hcERlc2NyaXB0b3IpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0SW5mb1dpbmRvd0FuY2hvcih1OiBudW1iZXIsIHY6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXJrZXJBbmNob3IodTogbnVtYmVyLCB2OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0UG9zaXRpb24obGF0TG5nOiBMYXRMbmcpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Um90YXRpb24ocm90YXRpb246IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTbmlwcGV0KHNuaXBwZXQ6IFN0cmluZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRhZyh0YWc6IGFueSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldENsaWNrYWJsZShjbGlja2FibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBvbHlnb24ge1xyXG4gICAgZ2V0RmlsbENvbG9yKCk6IFByb21pc2U8Q29sb3I+O1xyXG4gICAgZ2V0SG9sZXMoKTogUHJvbWlzZTxMYXRMbmdbXVtdPjtcclxuICAgIGdldElkKCk6IHN0cmluZztcclxuICAgIGdldFBvaW50cygpOiBQcm9taXNlPExhdExuZ1tdPjtcclxuICAgIGdldFN0cm9rZUNvbG9yKCk6IFByb21pc2U8Q29sb3I+O1xyXG4gICAgZ2V0U3Ryb2tlSm9pbnRUeXBlKCk6IFByb21pc2U8Sm9pbnRUeXBlPjtcclxuICAgIGdldFN0cm9rZVBhdHRlcm4oKTogUHJvbWlzZTxQYXR0ZXJuSXRlbVtdPjtcclxuICAgIGdldFN0cm9rZVdpZHRoKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFRhZygpOiBQcm9taXNlPGFueT47XHJcbiAgICBnZXRaSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgaXNDbGlja2FibGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzVmlzaWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNHZW9kZXNpYygpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG5cclxuICAgIHJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAgIHNldENsaWNrYWJsZShjbGlja2FibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0RmlsbENvbG9yKGNvbG9yOiBDb2xvcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRHZW9kZXNpYyhnZW9kZXNpYzogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRIb2xlcyhob2xlczogTGF0TG5nW11bXSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQb2ludHMocG9pbnRzOiBMYXRMbmdbXSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTdHJva2VDb2xvcihjb2xvcjogQ29sb3IpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3Ryb2tlSm9pbnRUeXBlKGpvaW50VHlwZTogSm9pbnRUeXBlKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFN0cm9rZVBhdHRlcm4ocGF0dGVybkl0ZW06IFBhdHRlcm5JdGVtW10pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3Ryb2tlV2lkdGgod2lkdGg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUYWcodGFnOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9seWxpbmUge1xyXG4gICAgZ2V0Q29sb3IoKTogUHJvbWlzZTxDb2xvcj47XHJcbiAgICBnZXRFbmRDYXAoKTogUHJvbWlzZTxDYXA+O1xyXG4gICAgZ2V0U3RhcnRDYXAoKTogUHJvbWlzZTxDYXA+O1xyXG4gICAgZ2V0SWQoKTogc3RyaW5nO1xyXG4gICAgZ2V0Sm9pbnRUeXBlKCk6IFByb21pc2U8Sm9pbnRUeXBlPjtcclxuICAgIGdldFBhdHRlcm4oKTogUHJvbWlzZTxQYXR0ZXJuSXRlbVtdPjtcclxuICAgIGdldFBvaW50cygpOiBQcm9taXNlPExhdExuZ1tdPjtcclxuICAgIGdldFRhZygpOiBQcm9taXNlPGFueT47XHJcbiAgICBnZXRXaWR0aCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRaSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgaXNDbGlja2FibGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzR2VvZGVzaWMoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzVmlzaWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG5cclxuICAgIHJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAgIHNldENsaWNrYWJsZShjbGlja2FibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Q29sb3IoY29sb3I6IENvbG9yKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFN0YXJ0Q2FwKHN0YXJ0Q2FwOiBDYXApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0RW5kQ2FwKGVuZENhcDogQ2FwKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEdlb2Rlc2ljKGdlb2Rlc2ljOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEpvaW50VHlwZShqb2ludFR5cGU6IEpvaW50VHlwZSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQYXR0ZXJuKHBhdHRlcm46IFBhdHRlcm5JdGVtW10pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0UG9pbnRzKHBvaW50czogTGF0TG5nW10pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VGFnKHRhZzogYW55KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRXaWR0aCh3aWR0aDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRHcmFkaWVudChvbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRDb2xvclZhbHVlcyhjb2xvcnM6IENvbG9yW10pOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRpbGVPdmVybGF5IHtcclxuICAgIGdldEZhZGVJbigpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgZ2V0SWQoKTogc3RyaW5nO1xyXG4gICAgZ2V0VHJhbnNwYXJlbmN5KCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFpJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBpc1Zpc2libGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuXHJcbiAgICByZW1vdmUoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGNsZWFyVGlsZUNhY2hlKCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gICAgc2V0RmFkZUluKGZhZGVJbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUcmFuc3BhcmVuY3kodHJhbnNwYXJlbmN5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdGlvbiB7XHJcbiAgICBmcm9tU2NyZWVuTG9jYXRpb24ocG9pbnQ6IFBvaW50KTogUHJv