@appium/base-driver 8.2.3 → 8.3.1
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.
- package/build/lib/basedriver/capabilities.js +2 -4
- package/build/lib/basedriver/commands/event.js +2 -4
- package/build/lib/basedriver/commands/find.js +5 -14
- package/build/lib/basedriver/commands/index.js +2 -4
- package/build/lib/basedriver/commands/log.js +4 -9
- package/build/lib/basedriver/commands/session.js +19 -30
- package/build/lib/basedriver/commands/settings.js +5 -11
- package/build/lib/basedriver/commands/timeout.js +11 -18
- package/build/lib/basedriver/desired-caps.js +2 -4
- package/build/lib/basedriver/device-settings.js +15 -5
- package/build/lib/basedriver/driver.js +36 -23
- package/build/lib/basedriver/helpers.js +10 -12
- package/build/lib/basedriver/logger.js +2 -4
- package/build/lib/constants.js +2 -4
- package/build/lib/express/crash.js +2 -4
- package/build/lib/express/express-logging.js +3 -5
- package/build/lib/express/idempotency.js +3 -5
- package/build/lib/express/logger.js +2 -4
- package/build/lib/express/middleware.js +2 -4
- package/build/lib/express/server.js +2 -4
- package/build/lib/express/static.js +2 -4
- package/build/lib/express/websocket.js +2 -4
- package/build/lib/helpers/capabilities.js +37 -0
- package/build/lib/index.js +4 -8
- package/build/lib/jsonwp-proxy/protocol-converter.js +19 -15
- package/build/lib/jsonwp-proxy/proxy.js +20 -15
- package/build/lib/jsonwp-status/status.js +2 -4
- package/build/lib/protocol/errors.js +2 -4
- package/build/lib/protocol/helpers.js +2 -4
- package/build/lib/protocol/index.js +2 -4
- package/build/lib/protocol/protocol.js +37 -30
- package/build/lib/protocol/routes.js +68 -4
- package/build/lib/protocol/validators.js +2 -4
- package/build/test/basedriver/README.md +5 -0
- package/build/test/basedriver/driver-e2e-tests.js +2 -4
- package/build/test/basedriver/driver-tests.js +12 -17
- package/build/test/basedriver/index.js +2 -4
- package/build/test/e2e/basedriver/driver.e2e.spec.js +15 -0
- package/build/test/e2e/basedriver/helpers.e2e.spec.js +192 -0
- package/build/test/e2e/basedriver/websockets.e2e.spec.js +82 -0
- package/build/test/e2e/express/server.e2e.spec.js +159 -0
- package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +59 -0
- package/build/test/e2e/protocol/fake-driver.js +163 -0
- package/build/test/e2e/protocol/helpers.js +25 -0
- package/build/test/e2e/protocol/protocol.e2e.spec.js +1186 -0
- package/build/test/helpers.js +2 -4
- package/build/test/unit/basedriver/capabilities.spec.js +672 -0
- package/build/test/unit/basedriver/capability.spec.js +353 -0
- package/build/test/unit/basedriver/commands/event.spec.js +110 -0
- package/build/test/unit/basedriver/commands/log.spec.js +85 -0
- package/build/test/unit/basedriver/driver.spec.js +15 -0
- package/build/test/unit/basedriver/helpers.spec.js +151 -0
- package/build/test/unit/basedriver/timeout.spec.js +135 -0
- package/build/test/unit/express/server.spec.js +155 -0
- package/build/test/unit/express/static.spec.js +26 -0
- package/build/test/unit/jsonwp-proxy/mock-request.js +91 -0
- package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +171 -0
- package/build/test/unit/jsonwp-proxy/proxy.spec.js +292 -0
- package/build/test/unit/jsonwp-proxy/url.spec.js +165 -0
- package/build/test/unit/jsonwp-status/status.spec.js +34 -0
- package/build/test/unit/protocol/errors.spec.js +390 -0
- package/build/test/unit/protocol/routes.spec.js +80 -0
- package/build/test/unit/protocol/validator.spec.js +149 -0
- package/lib/basedriver/commands/find.js +3 -6
- package/lib/basedriver/commands/log.js +2 -4
- package/lib/basedriver/commands/session.js +21 -22
- package/lib/basedriver/commands/settings.js +3 -5
- package/lib/basedriver/commands/timeout.js +9 -10
- package/lib/basedriver/device-settings.js +10 -1
- package/lib/basedriver/driver.js +36 -12
- package/lib/basedriver/helpers.js +13 -11
- package/lib/express/express-logging.js +1 -1
- package/lib/express/idempotency.js +1 -1
- package/lib/helpers/capabilities.js +25 -0
- package/lib/index.js +2 -2
- package/lib/jsonwp-proxy/protocol-converter.js +14 -13
- package/lib/jsonwp-proxy/proxy.js +16 -12
- package/lib/protocol/protocol.js +34 -29
- package/lib/protocol/routes.js +60 -1
- package/package.json +36 -24
- package/test/basedriver/README.md +5 -0
- package/test/basedriver/driver-e2e-tests.js +1 -1
- package/test/basedriver/driver-tests.js +12 -7
- package/build/lib/protocol/sessions-cache.js +0 -88
- package/build/test/basedriver/capabilities-specs.js +0 -632
- package/build/test/basedriver/capability-specs.js +0 -396
- package/build/test/basedriver/commands/event-specs.js +0 -112
- package/build/test/basedriver/commands/log-specs.js +0 -80
- package/build/test/basedriver/driver-e2e-specs.js +0 -17
- package/build/test/basedriver/driver-specs.js +0 -17
- package/build/test/basedriver/helpers-e2e-specs.js +0 -194
- package/build/test/basedriver/helpers-specs.js +0 -153
- package/build/test/basedriver/timeout-specs.js +0 -139
- package/build/test/basedriver/websockets-e2e-specs.js +0 -84
- package/build/test/express/server-e2e-specs.js +0 -156
- package/build/test/express/server-specs.js +0 -151
- package/build/test/express/static-specs.js +0 -23
- package/build/test/jsonwp-proxy/mock-request.js +0 -93
- package/build/test/jsonwp-proxy/protocol-converter-specs.js +0 -173
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +0 -61
- package/build/test/jsonwp-proxy/proxy-specs.js +0 -294
- package/build/test/jsonwp-proxy/url-specs.js +0 -167
- package/build/test/jsonwp-status/status-specs.js +0 -36
- package/build/test/protocol/errors-specs.js +0 -388
- package/build/test/protocol/fake-driver.js +0 -168
- package/build/test/protocol/helpers.js +0 -27
- package/build/test/protocol/protocol-e2e-specs.js +0 -1182
- package/build/test/protocol/routes-specs.js +0 -82
- package/build/test/protocol/validator-specs.js +0 -151
- package/lib/protocol/sessions-cache.js +0 -74
- package/test/basedriver/capabilities-specs.js +0 -505
- package/test/basedriver/capability-specs.js +0 -409
- package/test/basedriver/commands/event-specs.js +0 -74
- package/test/basedriver/commands/log-specs.js +0 -70
- package/test/basedriver/driver-e2e-specs.js +0 -8
- package/test/basedriver/driver-specs.js +0 -8
- package/test/basedriver/fixtures/BadZippedApp.zip +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.apk +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.asd +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.app +0 -1
- package/test/basedriver/fixtures/FakeIOSApp.app.zip +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.ipa +0 -0
- package/test/basedriver/fixtures/custom-element-finder-bad.js +0 -5
- package/test/basedriver/fixtures/custom-element-finder.js +0 -29
- package/test/basedriver/helpers-e2e-specs.js +0 -187
- package/test/basedriver/helpers-specs.js +0 -137
- package/test/basedriver/timeout-specs.js +0 -133
- package/test/basedriver/websockets-e2e-specs.js +0 -75
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.default = void 0;
|
|
9
|
-
|
|
10
|
-
require("source-map-support/register");
|
|
11
|
-
|
|
12
|
-
var _lruCache = _interopRequireDefault(require("lru-cache"));
|
|
13
|
-
|
|
14
|
-
var _support = require("@appium/support");
|
|
15
|
-
|
|
16
|
-
var _constants = require("../constants");
|
|
17
|
-
|
|
18
|
-
const GENERIC_PROTOCOL = 'GENERIC';
|
|
19
|
-
|
|
20
|
-
const mjsonwpLog = _support.logger.getLogger('MJSONWP');
|
|
21
|
-
|
|
22
|
-
const w3cLog = _support.logger.getLogger('W3C');
|
|
23
|
-
|
|
24
|
-
const genericProtocolLog = _support.logger.getLogger(GENERIC_PROTOCOL);
|
|
25
|
-
|
|
26
|
-
class SessionsCache {
|
|
27
|
-
constructor(max) {
|
|
28
|
-
this._cache = new _lruCache.default({
|
|
29
|
-
max
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
getLogger(sessionId, protocol) {
|
|
34
|
-
if (sessionId) {
|
|
35
|
-
if (this._cache.has(sessionId)) {
|
|
36
|
-
const value = this._cache.get(sessionId);
|
|
37
|
-
|
|
38
|
-
if (value.logger) {
|
|
39
|
-
return value.logger;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
protocol = protocol || value.protocol;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return _support.logger.getLogger(`${protocol || GENERIC_PROTOCOL} ` + `(${sessionId.substring(0, Math.min(sessionId.length, 8))})`);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
switch (protocol) {
|
|
49
|
-
case _constants.PROTOCOLS.W3C:
|
|
50
|
-
return w3cLog;
|
|
51
|
-
|
|
52
|
-
case _constants.PROTOCOLS.MJSONWP:
|
|
53
|
-
return mjsonwpLog;
|
|
54
|
-
|
|
55
|
-
default:
|
|
56
|
-
return genericProtocolLog;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
getProtocol(sessionId) {
|
|
61
|
-
return (this._cache.get(sessionId) || {}).protocol;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
putSession(sessionId, value) {
|
|
65
|
-
if (sessionId && value) {
|
|
66
|
-
this._cache.set(sessionId, {
|
|
67
|
-
protocol: value,
|
|
68
|
-
logger: this.getLogger(sessionId, value)
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return value;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
resetLogger(sessionId) {
|
|
76
|
-
if (this._cache.has(sessionId)) {
|
|
77
|
-
this._cache.get(sessionId).logger = null;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const SESSIONS_CACHE = new SessionsCache(100);
|
|
84
|
-
var _default = SESSIONS_CACHE;
|
|
85
|
-
exports.default = _default;require('source-map-support').install();
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm90b2NvbC9zZXNzaW9ucy1jYWNoZS5qcyJdLCJuYW1lcyI6WyJHRU5FUklDX1BST1RPQ09MIiwibWpzb253cExvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInczY0xvZyIsImdlbmVyaWNQcm90b2NvbExvZyIsIlNlc3Npb25zQ2FjaGUiLCJjb25zdHJ1Y3RvciIsIm1heCIsIl9jYWNoZSIsIkxSVSIsInNlc3Npb25JZCIsInByb3RvY29sIiwiaGFzIiwidmFsdWUiLCJnZXQiLCJzdWJzdHJpbmciLCJNYXRoIiwibWluIiwibGVuZ3RoIiwiUFJPVE9DT0xTIiwiVzNDIiwiTUpTT05XUCIsImdldFByb3RvY29sIiwicHV0U2Vzc2lvbiIsInNldCIsInJlc2V0TG9nZ2VyIiwiU0VTU0lPTlNfQ0FDSEUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsZ0JBQWdCLEdBQUcsU0FBekI7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHQyxnQkFBT0MsU0FBUCxDQUFpQixTQUFqQixDQUFuQjs7QUFDQSxNQUFNQyxNQUFNLEdBQUdGLGdCQUFPQyxTQUFQLENBQWlCLEtBQWpCLENBQWY7O0FBQ0EsTUFBTUUsa0JBQWtCLEdBQUdILGdCQUFPQyxTQUFQLENBQWlCSCxnQkFBakIsQ0FBM0I7O0FBR0EsTUFBTU0sYUFBTixDQUFvQjtBQUNsQkMsRUFBQUEsV0FBVyxDQUFFQyxHQUFGLEVBQU87QUFDaEIsU0FBS0MsTUFBTCxHQUFjLElBQUlDLGlCQUFKLENBQVE7QUFBRUYsTUFBQUE7QUFBRixLQUFSLENBQWQ7QUFDRDs7QUFFREwsRUFBQUEsU0FBUyxDQUFFUSxTQUFGLEVBQWFDLFFBQWIsRUFBdUI7QUFDOUIsUUFBSUQsU0FBSixFQUFlO0FBQ2IsVUFBSSxLQUFLRixNQUFMLENBQVlJLEdBQVosQ0FBZ0JGLFNBQWhCLENBQUosRUFBZ0M7QUFDOUIsY0FBTUcsS0FBSyxHQUFHLEtBQUtMLE1BQUwsQ0FBWU0sR0FBWixDQUFnQkosU0FBaEIsQ0FBZDs7QUFDQSxZQUFJRyxLQUFLLENBQUNaLE1BQVYsRUFBa0I7QUFDaEIsaUJBQU9ZLEtBQUssQ0FBQ1osTUFBYjtBQUNEOztBQUNEVSxRQUFBQSxRQUFRLEdBQUdBLFFBQVEsSUFBSUUsS0FBSyxDQUFDRixRQUE3QjtBQUNEOztBQUlELGFBQU9WLGdCQUFPQyxTQUFQLENBQWtCLEdBQUVTLFFBQVEsSUFBSVosZ0JBQWlCLEdBQWhDLEdBQ3JCLElBQUdXLFNBQVMsQ0FBQ0ssU0FBVixDQUFvQixDQUFwQixFQUF1QkMsSUFBSSxDQUFDQyxHQUFMLENBQVNQLFNBQVMsQ0FBQ1EsTUFBbkIsRUFBMkIsQ0FBM0IsQ0FBdkIsQ0FBc0QsR0FEckQsQ0FBUDtBQUVEOztBQUdELFlBQVFQLFFBQVI7QUFDRSxXQUFLUSxxQkFBVUMsR0FBZjtBQUNFLGVBQU9qQixNQUFQOztBQUNGLFdBQUtnQixxQkFBVUUsT0FBZjtBQUNFLGVBQU9yQixVQUFQOztBQUNGO0FBQ0UsZUFBT0ksa0JBQVA7QUFOSjtBQVFEOztBQUVEa0IsRUFBQUEsV0FBVyxDQUFFWixTQUFGLEVBQWE7QUFDdEIsV0FBTyxDQUFDLEtBQUtGLE1BQUwsQ0FBWU0sR0FBWixDQUFnQkosU0FBaEIsS0FBOEIsRUFBL0IsRUFBbUNDLFFBQTFDO0FBQ0Q7O0FBRURZLEVBQUFBLFVBQVUsQ0FBRWIsU0FBRixFQUFhRyxLQUFiLEVBQW9CO0FBQzVCLFFBQUlILFNBQVMsSUFBSUcsS0FBakIsRUFBd0I7QUFDdEIsV0FBS0wsTUFBTCxDQUFZZ0IsR0FBWixDQUFnQmQsU0FBaEIsRUFBMkI7QUFDekJDLFFBQUFBLFFBQVEsRUFBRUUsS0FEZTtBQUt6QlosUUFBQUEsTUFBTSxFQUFFLEtBQUtDLFNBQUwsQ0FBZVEsU0FBZixFQUEwQkcsS0FBMUI7QUFMaUIsT0FBM0I7QUFPRDs7QUFDRCxXQUFPQSxLQUFQO0FBQ0Q7O0FBRURZLEVBQUFBLFdBQVcsQ0FBRWYsU0FBRixFQUFhO0FBQ3RCLFFBQUksS0FBS0YsTUFBTCxDQUFZSSxHQUFaLENBQWdCRixTQUFoQixDQUFKLEVBQWdDO0FBQzlCLFdBQUtGLE1BQUwsQ0FBWU0sR0FBWixDQUFnQkosU0FBaEIsRUFBMkJULE1BQTNCLEdBQW9DLElBQXBDO0FBQ0Q7QUFDRjs7QUFyRGlCOztBQTREcEIsTUFBTXlCLGNBQWMsR0FBRyxJQUFJckIsYUFBSixDQUFrQixHQUFsQixDQUF2QjtlQUVlcUIsYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBQUk9UT0NPTFMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5cbmNvbnN0IEdFTkVSSUNfUFJPVE9DT0wgPSAnR0VORVJJQyc7XG5jb25zdCBtanNvbndwTG9nID0gbG9nZ2VyLmdldExvZ2dlcignTUpTT05XUCcpO1xuY29uc3QgdzNjTG9nID0gbG9nZ2VyLmdldExvZ2dlcignVzNDJyk7XG5jb25zdCBnZW5lcmljUHJvdG9jb2xMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKEdFTkVSSUNfUFJPVE9DT0wpO1xuXG5cbmNsYXNzIFNlc3Npb25zQ2FjaGUge1xuICBjb25zdHJ1Y3RvciAobWF4KSB7XG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgTFJVKHsgbWF4IH0pO1xuICB9XG5cbiAgZ2V0TG9nZ2VyIChzZXNzaW9uSWQsIHByb3RvY29sKSB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgaWYgKHRoaXMuX2NhY2hlLmhhcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fY2FjaGUuZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgIGlmICh2YWx1ZS5sb2dnZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUubG9nZ2VyO1xuICAgICAgICB9XG4gICAgICAgIHByb3RvY29sID0gcHJvdG9jb2wgfHwgdmFsdWUucHJvdG9jb2w7XG4gICAgICB9XG4gICAgICAvLyBBbHdheXMgY3JlYXRlIGEgbmV3IGxvZ2dlciBpbnN0YW5jZSBmb3IgaWRzXG4gICAgICAvLyB0aGF0IGFyZSBub3QgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbnMgbGlzdCxcbiAgICAgIC8vIHNvIHdlIGNhbiBzdGlsbCBzZWUgc3VjaCBpZHMgYXMgcHJlZml4ZXNcbiAgICAgIHJldHVybiBsb2dnZXIuZ2V0TG9nZ2VyKGAke3Byb3RvY29sIHx8IEdFTkVSSUNfUFJPVE9DT0x9IGAgK1xuICAgICAgICBgKCR7c2Vzc2lvbklkLnN1YnN0cmluZygwLCBNYXRoLm1pbihzZXNzaW9uSWQubGVuZ3RoLCA4KSl9KWApO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byBwcm90b2NvbCBuYW1lLW9ubHkgbG9nZ2VyIGlmIHNlc3Npb24gaWQgaXMgdW5rbm93blxuICAgIHN3aXRjaCAocHJvdG9jb2wpIHtcbiAgICAgIGNhc2UgUFJPVE9DT0xTLlczQzpcbiAgICAgICAgcmV0dXJuIHczY0xvZztcbiAgICAgIGNhc2UgUFJPVE9DT0xTLk1KU09OV1A6XG4gICAgICAgIHJldHVybiBtanNvbndwTG9nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGdlbmVyaWNQcm90b2NvbExvZztcbiAgICB9XG4gIH1cblxuICBnZXRQcm90b2NvbCAoc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuICh0aGlzLl9jYWNoZS5nZXQoc2Vzc2lvbklkKSB8fCB7fSkucHJvdG9jb2w7XG4gIH1cblxuICBwdXRTZXNzaW9uIChzZXNzaW9uSWQsIHZhbHVlKSB7XG4gICAgaWYgKHNlc3Npb25JZCAmJiB2YWx1ZSkge1xuICAgICAgdGhpcy5fY2FjaGUuc2V0KHNlc3Npb25JZCwge1xuICAgICAgICBwcm90b2NvbDogdmFsdWUsXG4gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY2FjaGUgdGhlIGxvZ2dlciBpbnN0YW5jZSBmb3IgZWFjaCByYW5kb20gc2Vzc2lvbiBpZCBpbiB0aGUgY2FjaGVcbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gc2F2ZSBtZW1vcnkuIEluc3RlYWQgd2Ugb25seSBjYWNoZSBsb2dnZXJzIGZvciB2YWxpZCBpZHMgdGhhdFxuICAgICAgICAvLyBhcmUgcmV0dXJuZWQgYnkgYGNyZWF0ZVNlc3Npb25gIGNhbGwgYW5kIHJlc2V0IHRoZW0gYWZ0ZXIgYGRlbGV0ZVNlc3Npb25gIGlzIGNhbGxlZFxuICAgICAgICBsb2dnZXI6IHRoaXMuZ2V0TG9nZ2VyKHNlc3Npb25JZCwgdmFsdWUpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJlc2V0TG9nZ2VyIChzZXNzaW9uSWQpIHtcbiAgICBpZiAodGhpcy5fY2FjaGUuaGFzKHNlc3Npb25JZCkpIHtcbiAgICAgIHRoaXMuX2NhY2hlLmdldChzZXNzaW9uSWQpLmxvZ2dlciA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgY2FjaGUgaXMgdXNlZnVsIHdoZW4gYSBzZXNzaW9uIGdldHMgdGVybWluYXRlZFxuLy8gYW5kIHJlbW92ZWQgZnJvbSB0aGUgc2Vzc2lvbnMgbGlzdCBpbiB0aGUgdW1icmVsbGEgZHJpdmVyLFxuLy8gYnV0IHRoZSBjbGllbnQgc3RpbGwgdHJpZXMgdG8gc2VuZCBhIGNvbW1hbmQgdG8gdGhpcyBzZXNzaW9uIGlkLlxuLy8gU28gd2Uga25vdyBob3cgdG8gcHJvcGVybHkgd3JhcCB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgaXRcbmNvbnN0IFNFU1NJT05TX0NBQ0hFID0gbmV3IFNlc3Npb25zQ2FjaGUoMTAwKTtcblxuZXhwb3J0IGRlZmF1bHQgU0VTU0lPTlNfQ0FDSEU7XG4iXSwiZmlsZSI6ImxpYi9wcm90b2NvbC9zZXNzaW9ucy1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|