matrix-react-sdk
Version:
SDK for matrix.org using React
162 lines (128 loc) • 19 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var sdk = _interopRequireWildcard(require("../../../index"));
var _phonenumber = require("../../../phonenumber");
var _SdkConfig = _interopRequireDefault(require("../../../SdkConfig"));
var _languageHandler = require("../../../languageHandler");
var _replaceableComponent = require("../../../utils/replaceableComponent");
var _dec, _class;
const COUNTRIES_BY_ISO2 = {};
for (const c of _phonenumber.COUNTRIES) {
COUNTRIES_BY_ISO2[c.iso2] = c;
}
function countryMatchesSearchQuery(query, country) {
// Remove '+' if present (when searching for a prefix)
if (query[0] === '+') {
query = query.slice(1);
}
if (country.name.toUpperCase().indexOf(query.toUpperCase()) == 0) return true;
if (country.iso2 == query.toUpperCase()) return true;
if (country.prefix.indexOf(query) !== -1) return true;
return false;
}
let CountryDropdown = (_dec = (0, _replaceableComponent.replaceableComponent)("views.auth.CountryDropdown"), _dec(_class = class CountryDropdown extends _react.default.Component {
constructor(props) {
super(props);
this._onSearchChange = this._onSearchChange.bind(this);
this._onOptionChange = this._onOptionChange.bind(this);
this._getShortOption = this._getShortOption.bind(this);
let defaultCountry = _phonenumber.COUNTRIES[0];
const defaultCountryCode = _SdkConfig.default.get()["defaultCountryCode"];
if (defaultCountryCode) {
const country = _phonenumber.COUNTRIES.find(c => c.iso2 === defaultCountryCode.toUpperCase());
if (country) defaultCountry = country;
}
this.state = {
searchQuery: '',
defaultCountry
};
}
componentDidMount() {
if (!this.props.value) {
// If no value is given, we start with the default
// country selected, but our parent component
// doesn't know this, therefore we do this.
this.props.onOptionChange(this.state.defaultCountry);
}
}
_onSearchChange(search) {
this.setState({
searchQuery: search
});
}
_onOptionChange(iso2) {
this.props.onOptionChange(COUNTRIES_BY_ISO2[iso2]);
}
_flagImgForIso2(iso2) {
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_Dropdown_option_emoji"
}, (0, _phonenumber.getEmojiFlag)(iso2));
}
_getShortOption(iso2) {
if (!this.props.isSmall) {
return undefined;
}
let countryPrefix;
if (this.props.showPrefix) {
countryPrefix = '+' + COUNTRIES_BY_ISO2[iso2].prefix;
}
return /*#__PURE__*/_react.default.createElement("span", {
className: "mx_CountryDropdown_shortOption"
}, this._flagImgForIso2(iso2), countryPrefix);
}
render() {
const Dropdown = sdk.getComponent('elements.Dropdown');
let displayedCountries;
if (this.state.searchQuery) {
displayedCountries = _phonenumber.COUNTRIES.filter(countryMatchesSearchQuery.bind(this, this.state.searchQuery));
if (this.state.searchQuery.length == 2 && COUNTRIES_BY_ISO2[this.state.searchQuery.toUpperCase()]) {
// exact ISO2 country name match: make the first result the matches ISO2
const matched = COUNTRIES_BY_ISO2[this.state.searchQuery.toUpperCase()];
displayedCountries = displayedCountries.filter(c => {
return c.iso2 != matched.iso2;
});
displayedCountries.unshift(matched);
}
} else {
displayedCountries = _phonenumber.COUNTRIES;
}
const options = displayedCountries.map(country => {
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_CountryDropdown_option",
key: country.iso2
}, this._flagImgForIso2(country.iso2), (0, _languageHandler._t)(country.name), " (+", country.prefix, ")");
}); // default value here too, otherwise we need to handle null / undefined
// values between mounting and the initial value propgating
const value = this.props.value || this.state.defaultCountry.iso2;
return /*#__PURE__*/_react.default.createElement(Dropdown, {
id: "mx_CountryDropdown",
className: this.props.className + " mx_CountryDropdown",
onOptionChange: this._onOptionChange,
onSearchChange: this._onSearchChange,
menuWidth: 298,
getShortOption: this._getShortOption,
value: value,
searchEnabled: true,
disabled: this.props.disabled,
label: (0, _languageHandler._t)("Country Dropdown")
}, options);
}
}) || _class);
exports.default = CountryDropdown;
CountryDropdown.propTypes = {
className: _propTypes.default.string,
isSmall: _propTypes.default.bool,
// if isSmall, show +44 in the selected value
showPrefix: _propTypes.default.bool,
onOptionChange: _propTypes.default.func.isRequired,
value: _propTypes.default.string,
disabled: _propTypes.default.bool
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2F1dGgvQ291bnRyeURyb3Bkb3duLmpzIl0sIm5hbWVzIjpbIkNPVU5UUklFU19CWV9JU08yIiwiYyIsIkNPVU5UUklFUyIsImlzbzIiLCJjb3VudHJ5TWF0Y2hlc1NlYXJjaFF1ZXJ5IiwicXVlcnkiLCJjb3VudHJ5Iiwic2xpY2UiLCJuYW1lIiwidG9VcHBlckNhc2UiLCJpbmRleE9mIiwicHJlZml4IiwiQ291bnRyeURyb3Bkb3duIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX29uU2VhcmNoQ2hhbmdlIiwiYmluZCIsIl9vbk9wdGlvbkNoYW5nZSIsIl9nZXRTaG9ydE9wdGlvbiIsImRlZmF1bHRDb3VudHJ5IiwiZGVmYXVsdENvdW50cnlDb2RlIiwiU2RrQ29uZmlnIiwiZ2V0IiwiZmluZCIsInN0YXRlIiwic2VhcmNoUXVlcnkiLCJjb21wb25lbnREaWRNb3VudCIsInZhbHVlIiwib25PcHRpb25DaGFuZ2UiLCJzZWFyY2giLCJzZXRTdGF0ZSIsIl9mbGFnSW1nRm9ySXNvMiIsImlzU21hbGwiLCJ1bmRlZmluZWQiLCJjb3VudHJ5UHJlZml4Iiwic2hvd1ByZWZpeCIsInJlbmRlciIsIkRyb3Bkb3duIiwic2RrIiwiZ2V0Q29tcG9uZW50IiwiZGlzcGxheWVkQ291bnRyaWVzIiwiZmlsdGVyIiwibGVuZ3RoIiwibWF0Y2hlZCIsInVuc2hpZnQiLCJvcHRpb25zIiwibWFwIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJib29sIiwiZnVuYyIsImlzUmVxdWlyZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBZ0JBOztBQUNBOztBQUVBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsRUFBMUI7O0FBQ0EsS0FBSyxNQUFNQyxDQUFYLElBQWdCQyxzQkFB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O0FBS3hCeEIsRUFBQUEsY0FBYyxFQUFFc0IsbUJBQVVHLElBQVYsQ0FBZUMsVUFMUDtBQU14QjNCLEVBQUFBLEtBQUssRUFBRXVCLG1CQUFVQyxNQU5PO0FBT3hCSCxFQUFBQSxRQUFRLEVBQUVFLG1CQUFVRTtBQVBJLENBQTVCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDE3IFZlY3RvciBDcmVhdGlvbnMgTHRkXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCAqIGFzIHNkayBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5cbmltcG9ydCB7Q09VTlRSSUVTLCBnZXRFbW9qaUZsYWd9IGZyb20gJy4uLy4uLy4uL3Bob25lbnVtYmVyJztcbmltcG9ydCBTZGtDb25maWcgZnJvbSBcIi4uLy4uLy4uL1Nka0NvbmZpZ1wiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQge3JlcGxhY2VhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVwbGFjZWFibGVDb21wb25lbnRcIjtcblxuY29uc3QgQ09VTlRSSUVTX0JZX0lTTzIgPSB7fTtcbmZvciAoY29uc3QgYyBvZiBDT1VOVFJJRVMpIHtcbiAgICBDT1VOVFJJRVNfQllfSVNPMltjLmlzbzJdID0gYztcbn1cblxuZnVuY3Rpb24gY291bnRyeU1hdGNoZXNTZWFyY2hRdWVyeShxdWVyeSwgY291bnRyeSkge1xuICAgIC8vIFJlbW92ZSAnKycgaWYgcHJlc2VudCAod2hlbiBzZWFyY2hpbmcgZm9yIGEgcHJlZml4KVxuICAgIGlmIChxdWVyeVswXSA9PT0gJysnKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50cnkubmFtZS50b1VwcGVyQ2FzZSgpLmluZGV4T2YocXVlcnkudG9VcHBlckNhc2UoKSkgPT0gMCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGNvdW50cnkuaXNvMiA9PSBxdWVyeS50b1VwcGVyQ2FzZSgpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY291bnRyeS5wcmVmaXguaW5kZXhPZihxdWVyeSkgIT09IC0xKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLmF1dGguQ291bnRyeURyb3Bkb3duXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3VudHJ5RHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5fb25TZWFyY2hDaGFuZ2UgPSB0aGlzLl9vblNlYXJjaENoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLl9vbk9wdGlvbkNoYW5nZSA9IHRoaXMuX29uT3B0aW9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX2dldFNob3J0T3B0aW9uID0gdGhpcy5fZ2V0U2hvcnRPcHRpb24uYmluZCh0aGlzKTtcblxuICAgICAgICBsZXQgZGVmYXVsdENvdW50cnkgPSBDT1VOVFJJRVNbMF07XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb3VudHJ5Q29kZSA9IFNka0NvbmZpZy5nZXQoKVtcImRlZmF1bHRDb3VudHJ5Q29kZVwiXTtcbiAgICAgICAgaWYgKGRlZmF1bHRDb3VudHJ5Q29kZSkge1xuICAgICAgICAgICAgY29uc3QgY291bnRyeSA9IENPVU5UUklFUy5maW5kKGMgPT4gYy5pc28yID09PSBkZWZhdWx0Q291bnRyeUNvZGUudG9VcHBlckNhc2UoKSk7XG4gICAgICAgICAgICBpZiAoY291bnRyeSkgZGVmYXVsdENvdW50cnkgPSBjb3VudHJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNlYXJjaFF1ZXJ5OiAnJyxcbiAgICAgICAgICAgIGRlZmF1bHRDb3VudHJ5LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBpZiAoIXRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIGdpdmVuLCB3ZSBzdGFydCB3aXRoIHRoZSBkZWZhdWx0XG4gICAgICAgICAgICAvLyBjb3VudHJ5IHNlbGVjdGVkLCBidXQgb3VyIHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgICAgIC8vIGRvZXNuJ3Qga25vdyB0aGlzLCB0aGVyZWZvcmUgd2UgZG8gdGhpcy5cbiAgICAgICAgICAgIHRoaXMucHJvcHMub25PcHRpb25DaGFuZ2UodGhpcy5zdGF0ZS5kZWZhdWx0Q291bnRyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25TZWFyY2hDaGFuZ2Uoc2VhcmNoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2VhcmNoUXVlcnk6IHNlYXJjaCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX29uT3B0aW9uQ2hhbmdlKGlzbzIpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk9wdGlvbkNoYW5nZShDT1VOVFJJRVNfQllfSVNPMltpc28yXSk7XG4gICAgfVxuXG4gICAgX2ZsYWdJbWdGb3JJc28yKGlzbzIpIHtcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibXhfRHJvcGRvd25fb3B0aW9uX2Vtb2ppXCI+eyBnZXRFbW9qaUZsYWcoaXNvMikgfTwvZGl2PjtcbiAgICB9XG5cbiAgICBfZ2V0U2hvcnRPcHRpb24oaXNvMikge1xuICAgICAgICBpZiAoIXRoaXMucHJvcHMuaXNTbWFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY291bnRyeVByZWZpeDtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2hvd1ByZWZpeCkge1xuICAgICAgICAgICAgY291bnRyeVByZWZpeCA9ICcrJyArIENPVU5UUklFU19CWV9JU08yW2lzbzJdLnByZWZpeDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwibXhfQ291bnRyeURyb3Bkb3duX3Nob3J0T3B0aW9uXCI+XG4gICAgICAgICAgICB7IHRoaXMuX2ZsYWdJbWdGb3JJc28yKGlzbzIpIH1cbiAgICAgICAgICAgIHsgY291bnRyeVByZWZpeCB9XG4gICAgICAgIDwvc3Bhbj47XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBEcm9wZG93biA9IHNkay5nZXRDb21wb25lbnQoJ2VsZW1lbnRzLkRyb3Bkb3duJyk7XG5cbiAgICAgICAgbGV0IGRpc3BsYXllZENvdW50cmllcztcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2VhcmNoUXVlcnkpIHtcbiAgICAgICAgICAgIGRpc3BsYXllZENvdW50cmllcyA9IENPVU5UUklFUy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgY291bnRyeU1hdGNoZXNTZWFyY2hRdWVyeS5iaW5kKHRoaXMsIHRoaXMuc3RhdGUuc2VhcmNoUXVlcnkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnNlYXJjaFF1ZXJ5Lmxlbmd0aCA9PSAyICYmXG4gICAgICAgICAgICAgICAgQ09VTlRSSUVTX0JZX0lTTzJbdGhpcy5zdGF0ZS5zZWFyY2hRdWVyeS50b1VwcGVyQ2FzZSgpXVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gZXhhY3QgSVNPMiBjb3VudHJ5IG5hbWUgbWF0Y2g6IG1ha2UgdGhlIGZpcnN0IHJlc3VsdCB0aGUgbWF0Y2hlcyBJU08yXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IENPVU5UUklFU19CWV9JU08yW3RoaXMuc3RhdGUuc2VhcmNoUXVlcnkudG9VcHBlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgZGlzcGxheWVkQ291bnRyaWVzID0gZGlzcGxheWVkQ291bnRyaWVzLmZpbHRlcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5pc28yICE9IG1hdGNoZWQuaXNvMjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkaXNwbGF5ZWRDb3VudHJpZXMudW5zaGlmdChtYXRjaGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpc3BsYXllZENvdW50cmllcyA9IENPVU5UUklFUztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXNwbGF5ZWRDb3VudHJpZXMubWFwKChjb3VudHJ5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJteF9Db3VudHJ5RHJvcGRvd25fb3B0aW9uXCIga2V5PXtjb3VudHJ5LmlzbzJ9PlxuICAgICAgICAgICAgICAgIHsgdGhpcy5fZmxhZ0ltZ0ZvcklzbzIoY291bnRyeS5pc28yKSB9XG4gICAgICAgICAgICAgICAgeyBfdChjb3VudHJ5Lm5hbWUpIH0gKCt7IGNvdW50cnkucHJlZml4IH0pXG4gICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgaGVyZSB0b28sIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGhhbmRsZSBudWxsIC8gdW5kZWZpbmVkXG4gICAgICAgIC8vIHZhbHVlcyBiZXR3ZWVuIG1vdW50aW5nIGFuZCB0aGUgaW5pdGlhbCB2YWx1ZSBwcm9wZ2F0aW5nXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZSB8fCB0aGlzLnN0YXRlLmRlZmF1bHRDb3VudHJ5LmlzbzI7XG5cbiAgICAgICAgcmV0dXJuIDxEcm9wZG93blxuICAgICAgICAgICAgaWQ9XCJteF9Db3VudHJ5RHJvcGRvd25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSArIFwiIG14X0NvdW50cnlEcm9wZG93blwifVxuICAgICAgICAgICAgb25PcHRpb25DaGFuZ2U9e3RoaXMuX29uT3B0aW9uQ2hhbmdlfVxuICAgICAgICAgICAgb25TZWFyY2hDaGFuZ2U9e3RoaXMuX29uU2VhcmNoQ2hhbmdlfVxuICAgICAgICAgICAgbWVudVdpZHRoPXsyOTh9XG4gICAgICAgICAgICBnZXRTaG9ydE9wdGlvbj17dGhpcy5fZ2V0U2hvcnRPcHRpb259XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICBzZWFyY2hFbmFibGVkPXt0cnVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICBsYWJlbD17X3QoXCJDb3VudHJ5IERyb3Bkb3duXCIpfVxuICAgICAgICA+XG4gICAgICAgICAgICB7IG9wdGlvbnMgfVxuICAgICAgICA8L0Ryb3Bkb3duPjtcbiAgICB9XG59XG5cbkNvdW50cnlEcm9wZG93bi5wcm9wVHlwZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlzU21hbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIC8vIGlmIGlzU21hbGwsIHNob3cgKzQ0IGluIHRoZSBzZWxlY3RlZCB2YWx1ZVxuICAgIHNob3dQcmVmaXg6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uT3B0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbn07XG4iXX0=