2022-08-24 16:29:06 +08:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
var obsidian = require('obsidian');
|
|
|
|
|
|
|
|
/*! *****************************************************************************
|
|
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
purpose with or without fee is hereby granted.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
***************************************************************************** */
|
|
|
|
|
|
|
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2023-07-14 11:06:08 +08:00
|
|
|
class Hider extends obsidian.Plugin {
|
|
|
|
constructor() {
|
|
|
|
super(...arguments);
|
2022-08-24 16:29:06 +08:00
|
|
|
// refresh function for when we change settings
|
2023-07-14 11:06:08 +08:00
|
|
|
this.refresh = () => {
|
2022-08-24 16:29:06 +08:00
|
|
|
// re-load the style
|
2023-07-14 11:06:08 +08:00
|
|
|
this.updateStyle();
|
2022-08-24 16:29:06 +08:00
|
|
|
};
|
|
|
|
// update the styles (at the start, or as the result of a settings change)
|
2023-07-14 11:06:08 +08:00
|
|
|
this.updateStyle = () => {
|
|
|
|
document.body.classList.toggle('hider-ribbon', this.settings.hideRibbon);
|
|
|
|
document.body.classList.toggle('hider-status', this.settings.hideStatus);
|
|
|
|
document.body.classList.toggle('hider-tabs', this.settings.hideTabs);
|
|
|
|
document.body.classList.toggle('hider-scroll', this.settings.hideScroll);
|
|
|
|
document.body.classList.toggle('hider-sidebar-buttons', this.settings.hideSidebarButtons);
|
|
|
|
document.body.classList.toggle('hider-tooltips', this.settings.hideTooltips);
|
|
|
|
document.body.classList.toggle('hider-search-suggestions', this.settings.hideSearchSuggestions);
|
|
|
|
document.body.classList.toggle('hider-file-nav-header', this.settings.hideFileNavButtons);
|
|
|
|
document.body.classList.toggle('hider-search-counts', this.settings.hideSearchCounts);
|
|
|
|
document.body.classList.toggle('hider-instructions', this.settings.hideInstructions);
|
2023-09-05 17:29:16 +08:00
|
|
|
document.body.classList.toggle('hider-meta', this.settings.hidePropertiesReading);
|
2023-07-14 11:06:08 +08:00
|
|
|
document.body.classList.toggle('hider-vault', this.settings.hideVault);
|
2022-08-24 16:29:06 +08:00
|
|
|
};
|
|
|
|
}
|
2023-07-14 11:06:08 +08:00
|
|
|
onload() {
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
// load settings
|
|
|
|
yield this.loadSettings();
|
|
|
|
// add the settings tab
|
|
|
|
this.addSettingTab(new HiderSettingTab(this.app, this));
|
|
|
|
// add the toggle on/off command
|
|
|
|
this.addCommand({
|
|
|
|
id: 'toggle-tab-containers',
|
|
|
|
name: 'Toggle tab bar',
|
|
|
|
callback: () => {
|
|
|
|
this.settings.hideTabs = !this.settings.hideTabs;
|
|
|
|
this.saveData(this.settings);
|
|
|
|
this.refresh();
|
2022-08-24 16:29:06 +08:00
|
|
|
}
|
|
|
|
});
|
2023-07-14 11:06:08 +08:00
|
|
|
this.addCommand({
|
|
|
|
id: 'toggle-app-ribbon',
|
|
|
|
name: 'Toggle app ribbon',
|
|
|
|
callback: () => {
|
|
|
|
this.settings.hideRibbon = !this.settings.hideRibbon;
|
|
|
|
this.saveData(this.settings);
|
|
|
|
this.refresh();
|
2022-08-24 16:29:06 +08:00
|
|
|
}
|
|
|
|
});
|
2023-07-14 11:06:08 +08:00
|
|
|
this.addCommand({
|
|
|
|
id: 'toggle-hider-status',
|
|
|
|
name: 'Toggle status bar',
|
|
|
|
callback: () => {
|
|
|
|
this.settings.hideStatus = !this.settings.hideStatus;
|
|
|
|
this.saveData(this.settings);
|
|
|
|
this.refresh();
|
2022-08-24 16:29:06 +08:00
|
|
|
}
|
|
|
|
});
|
2023-07-14 11:06:08 +08:00
|
|
|
this.refresh();
|
2022-08-24 16:29:06 +08:00
|
|
|
});
|
2023-07-14 11:06:08 +08:00
|
|
|
}
|
|
|
|
onunload() {
|
|
|
|
console.log('Unloading Hider plugin');
|
|
|
|
}
|
|
|
|
loadSettings() {
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
this.settings = Object.assign(DEFAULT_SETTINGS, yield this.loadData());
|
|
|
|
});
|
|
|
|
}
|
|
|
|
saveSettings() {
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
yield this.saveData(this.settings);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const DEFAULT_SETTINGS = {
|
2022-08-24 16:29:06 +08:00
|
|
|
hideRibbon: false,
|
|
|
|
hideStatus: false,
|
2022-10-15 17:08:29 +08:00
|
|
|
hideTabs: false,
|
2022-08-24 16:29:06 +08:00
|
|
|
hideScroll: false,
|
2022-10-15 17:08:29 +08:00
|
|
|
hideSidebarButtons: false,
|
2022-08-24 16:29:06 +08:00
|
|
|
hideTooltips: false,
|
2023-07-14 11:06:08 +08:00
|
|
|
hideFileNavButtons: false,
|
2022-08-24 16:29:06 +08:00
|
|
|
hideSearchSuggestions: false,
|
2022-10-15 17:08:29 +08:00
|
|
|
hideSearchCounts: false,
|
2022-08-24 16:29:06 +08:00
|
|
|
hideInstructions: false,
|
2023-09-05 17:29:16 +08:00
|
|
|
hidePropertiesReading: false,
|
2022-08-24 16:29:06 +08:00
|
|
|
hideVault: false
|
|
|
|
};
|
2023-07-14 11:06:08 +08:00
|
|
|
class HiderSettingTab extends obsidian.PluginSettingTab {
|
|
|
|
constructor(app, plugin) {
|
|
|
|
super(app, plugin);
|
|
|
|
this.plugin = plugin;
|
2022-08-24 16:29:06 +08:00
|
|
|
}
|
2023-07-14 11:06:08 +08:00
|
|
|
display() {
|
|
|
|
let { containerEl } = this;
|
2022-08-24 16:29:06 +08:00
|
|
|
containerEl.empty();
|
|
|
|
new obsidian.Setting(containerEl)
|
2022-10-15 17:08:29 +08:00
|
|
|
.setName('Hide app ribbon')
|
|
|
|
.setDesc('Hides the Obsidian menu. Warning: to open Settings you will need use the hotkey (default is CMD + ,)')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideRibbon)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideRibbon = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-08-24 16:29:06 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
2022-10-15 17:08:29 +08:00
|
|
|
.setName('Hide tab bar')
|
|
|
|
.setDesc('Hides the tab container at the top of the window')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideTabs)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideTabs = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-08-24 16:29:06 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
|
|
|
.setName('Hide status bar')
|
|
|
|
.setDesc('Hides word count, character count and backlink count')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideStatus)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideStatus = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-08-24 16:29:06 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
|
|
|
.setName('Hide vault name')
|
|
|
|
.setDesc('Hides the root folder name')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideVault)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideVault = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-08-24 16:29:06 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
|
|
|
.setName('Hide scroll bars')
|
|
|
|
.setDesc('Hides all scroll bars')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideScroll)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideScroll = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-10-15 17:08:29 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
|
|
|
.setName('Hide sidebar toggle buttons')
|
|
|
|
.setDesc('Hides both sidebar buttons')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideSidebarButtons)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideSidebarButtons = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-08-24 16:29:06 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
|
|
|
.setName('Hide tooltips')
|
|
|
|
.setDesc('Hides all tooltips')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideTooltips)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideTooltips = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
|
|
|
new obsidian.Setting(containerEl)
|
|
|
|
.setName('Hide file explorer buttons')
|
|
|
|
.setDesc('Hides buttons at the top of file explorer (new file, new folder, etc)')
|
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideFileNavButtons)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideFileNavButtons = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-08-24 16:29:06 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
|
|
|
.setName('Hide instructions')
|
|
|
|
.setDesc('Hides instructional tips in modals')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideInstructions)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideInstructions = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-08-24 16:29:06 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
|
|
|
.setName('Hide search suggestions')
|
|
|
|
.setDesc('Hides suggestions in search pane')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideSearchSuggestions)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideSearchSuggestions = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-10-15 17:08:29 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
|
|
|
.setName('Hide count of search term matches')
|
|
|
|
.setDesc('Hides the number of matches within each search result')
|
2023-07-14 11:06:08 +08:00
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hideSearchCounts)
|
|
|
|
.onChange((value) => {
|
|
|
|
this.plugin.settings.hideSearchCounts = value;
|
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
2022-08-24 16:29:06 +08:00
|
|
|
new obsidian.Setting(containerEl)
|
2023-09-05 17:29:16 +08:00
|
|
|
.setName('Hide properties in Reading view')
|
|
|
|
.setDesc('Hides the properties section in Reading view')
|
|
|
|
.addToggle(toggle => toggle.setValue(this.plugin.settings.hidePropertiesReading)
|
2023-07-14 11:06:08 +08:00
|
|
|
.onChange((value) => {
|
2023-09-05 17:29:16 +08:00
|
|
|
this.plugin.settings.hidePropertiesReading = value;
|
2023-07-14 11:06:08 +08:00
|
|
|
this.plugin.saveData(this.plugin.settings);
|
|
|
|
this.plugin.refresh();
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
}
|
2022-08-24 16:29:06 +08:00
|
|
|
|
|
|
|
module.exports = Hider;
|
2023-09-05 17:29:16 +08:00
|
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmF
|