Maintenance reference: Difference between revisions
No edit summary |
No edit summary |
||
(108 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! General tasks | ||
|- | |- | ||
|[[ | | | ||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! MIGRATION IN PROGRESS: config distro machine migration | |||
|- | |||
|Start to revamp config from [machine]/[distro] to [distro]/[machine] to match scripts. It's not hard even though it's dangerous. You can do each machine separately from others. Get on it! | |||
# DO THIS ALL IN ONE SESSION, do not log out | |||
cd development/config | |||
mkdir -p distro # prolly not needed | |||
git mv machine/distro distro/machine | |||
setup_stow.sh # repeat until it doesn't fail; check each failure to make sure it is a symlink, and simply rm them as you go | |||
|} | |||
[[Maintenance of my music collection]] | |||
[[Restarting everything]] | |||
[[Add a new VM to melange]] - [[Clone a melange VM]] - [[Linux barebones quickstart]] | |||
[[Scripts]] - [[Add a user]] - [[Linux permissions]] - [[DNS]] | |||
[[Tune linux performance]] | |||
[[Turn off ubuntu gnome screenlock]] - [[Set ubuntu default browser]] | |||
[[Add a drive]] - [[Back up drive]] - [[Check disk speed]] | [[Add a drive]] - [[Back up drive]] - [[Check disk]] - [[Check disk speed]] | ||
[[Bash basics]] - [[OS X basics]] - [[DOS basics]] | [[Bash basics]] - [[OS X basics]] - [[DOS basics]] - [[Update gentoo kernel]] | ||
[[udev: Assign unique names to your devices]] | [[SSL certificate instructions]] - [[Networking]] | ||
[[systemd]] - [[udev: Assign unique names to your devices]] | |||
[[Automatically mount and unmount your devices]] | [[Automatically mount and unmount your devices]] | ||
[[udev: Autorun programs when connecting your devices]] | [[udev: Autorun programs when connecting your devices]] | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
Line 29: | Line 49: | ||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! Ubuntu | ! Upgrade Ubuntu | ||
|- | |- | ||
| To update ubuntu from an i3 terminal: | | To update ubuntu from an i3 terminal: | ||
su - | |||
apt-get update # Fetches the list of available updates | |||
apt-get upgrade # Strictly upgrades the current package | |||
apt-get dist-upgrade # Installs updates (new major versions, i think) | |||
update-manager -d # kick off the update manager to migrate to new release when available | |||
Or just call the script that does the same thing: | |||
upgrade_ubuntu | |||
I'm currently migrating everything to 16.04 Xenial Xerus. | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
Line 58: | Line 72: | ||
smartctl -t long /dev/sdf | smartctl -t long /dev/sdf | ||
watch -n 3 smartctl -l selftest /dev/sdf # takes about 5 minutes | watch -n 3 smartctl -l selftest /dev/sdf # takes about 5 minutes | ||
|} | |||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! Increase max open file handles | |||
|- | |||
| I do it here: | |||
~/development/config/common/etc/sysctl.d/20_MDM_sysctl.conf | |||
That basically sets the user max when I do my stow thing. Alternatively, you can set it directly in | |||
/etc/sysctl.conf | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
Line 108: | Line 130: | ||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! Windows route traffic to avoid VPN | ||
|- | |- | ||
| You can use "route" to assign paths to specific traffic. | | You can use "route" to assign paths to specific traffic. | ||
Line 114: | Line 136: | ||
C:\WINDOWS\system32>route add 174.109.14.112 192.168.50.1 | C:\WINDOWS\system32>route add 174.109.14.112 192.168.50.1 | ||
Note that you can do this with [route] in linux too, syntax is a bit diff. | Note that you can do this with [route] in linux too, syntax is a bit diff. | ||
|} | |||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! Windows command prompt FULL SCREEN | |||
|- | |||
|Type cmd in start search box and right-click on the cmd shortcut which appears in the results. Select Run CMD as administrator. | |||
Next, in the command prompt, type wmic and hit Enter. | |||
Now try to maximize it! | |||
Close it and again open it. It will open as a maximized window! | |||
You may have to ensure that the Quick Edit Mode in the Options tab is checked. | |||
|} | |} | ||
|} | |} | ||
Line 123: | Line 154: | ||
--> | --> | ||
=== Boxes === | |||
[[Bitpost]] - [[Melange]] - [[Cast]] - [[Bluto]] - [[Cobra]] - [[Case]] - [[Viper]] - [[Wimpy]] | |||
=== Melange VMs === | |||
[[AbtDev1]] - [[Positronic]] - [[Morosoph]] - [[Glam]] - [[Hive]] - [[Bandit]] - [[Matryoshka]] - [[Hoard]] - [[Tornados]] - [[Matcha]] - [[Windozer]] | |||
=== Devices and Hardware === | |||
[[My server rack]] | |||
Cable Modem - [https://www.sony.com/electronics/support/televisions-projectors-lcd-tvs/xbr-65x800b/specifications Sony 65" TV] - [https://www.tcl.com/us/en/products/home-theater/p-series/tcl-55-class-p-series-4k-uhd-hdr-roku-smart-tv-55p605 TCL 55' TV] - [https://www.asus.com/us/Networking/RT-ACRH13/ProductPrint/ ASUS router] | |||
IOTs: [[lime]] - [[carambola]] - [[Arduino]] | |||
[[Flash Drives]] - [[Stadia controller]] - [[Logitech F710 Controller]] | |||
[[Aeron chair]] - [[Jetson Electric Bike]] | |||
=== Third Party Services === | |||
[[Cloudflare]] | [[LetsEncrypt]] | [[Sendgrid]] | |||
<!-- | |||
=========================================================================================================================================================================================================================================================================================== | |||
--> | |||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! Hardware notes | |||
{| class="wikitable" | |||
! | |||
|- | |- | ||
| | | | ||
| ( | {| class="mw-collapsible mw-collapsed wikitable" | ||
! NO TEARING on Sony driven by nvidia (currently, case) | |||
|- | |- | ||
| | |It's not really about Kodi settings, you have to set up nvidia settings, and they are HARD to get to stick because it's "automatic" but broken. | ||
* Ensure nvidia-settings is set to 4k at 60fps refresh rate - YOU HAVE TO DO THIS ON EVERY REBOOT until we set up an xorg.conf FML | |||
* Ensure Kodi has "sync video to display" turned ON | |||
' | |||
* | |||
* | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! Copy from linux nautilus to android "Operation unsupported" | ||
|- | |- | ||
| | | Weird assed linux prevents "SMB to USB" copies, FUCKOFF. Workaround is to copy to local drive, then copy to phone. Wow that is sickening. | ||
|} | |} | ||
|} | |} | ||
<!-- | |||
=========================================================================================================================================================================================================================================================================================== | |||
--> | |||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! Old notes and dead boxes | ||
|- | |- | ||
| | | | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! Oontz turn on dual pairing | ||
|- | |- | ||
| | | Turn them both on. One should be paired with your phone, the other should be flashing blue, trying to connect. | ||
On the Play Control Speaker (speaker with solid Blue Light) press and hold down the Play/Pause button for 5 seconds until the flashing White Light appears and the speaker says “Dual Pairing”. - The Play Control Speaker will then connect to the second speaker. | |||
There is NO WAY you can guess this. You'll be back here to re-learn... | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
Line 339: | Line 254: | ||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! Fix things after IP changes | ||
|- | |- | ||
| | | Time Warner seems to keep giving the same IP back to my main linux router/server, as long as the NIC card doesn't change. It also happened when they upgraded my service (and started labeling my IP as dynamic to SpamHaus, fuckers...). | ||
If it changes, fix these things: | |||
* Update the IP at 1and1.com for ALL domains, bleh... | |||
* mod evasive has a whitelist, it needs the actual IP, bleh... | |||
-rw-r--r-- 1 m m 1.1K Mar 28 22:13 /home/m/config/etc/apache2/modules.d/10_mod_evasive.conf | |||
* reset cable modem (see specific steps) | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! Reset 1020 cable modem so it grants a real IP address (not private) | ||
|- | |- | ||
| | | Resetting things sometimes has to be done in this precise order: | ||
* | * cable modem -> blue cable -> **ONBOARD** bitpost NIC | ||
** | * LAN switch -> yellow cable -> **ADDON CARD** bitpost NIC | ||
** | * power off bitpost and cable modem | ||
** | * power up cable modem | ||
* | * wait 5 minutes | ||
** | * power up bitpost | ||
* | * verify that you can ping google.com, LAN works, etc. | ||
* | |||
* | |||
* | |||
* | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! BOX: bitpost | ||
|- | |- | ||
| | |[[Update gentoo kernel]] | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! drives | ||
|- | |- | ||
| | | My primary server at Blount St | ||
bitpost ~ # df | |||
Filesystem 1G-blocks Used Available Use% Mounted on | |||
/dev/sda7 171G 143G 19G 89% / | |||
/dev/sdb1 3668G 3343G 326G 92% /spiceflow/tvmind-4g-mel | |||
/dev/sdc1 5545G 3585G 1681G 69% /spiceflow/film-6tb-bp | |||
/dev/md0 3668G 1578G 1904G 46% /spiceflow/softraid | |||
(^sdd+sde) | |||
/dev/sdf1 3667G 1G 3667G 1% /spiceflow/hare-s3-4t | |||
bitpost ~ # lsblk | |||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT | |||
sda 8:0 0 232.9G 0 disk | |||
├─sda1 8:1 0 190M 0 part | |||
├─sda5 8:5 0 3.8G 0 part [SWAP] | |||
├─sda6 8:6 0 55.9G 0 part | |||
└─sda7 8:7 0 173G 0 part / | |||
sdb 8:16 0 3.7T 0 disk | |||
└─sdb1 8:17 0 3.7T 0 part /spiceflow/tvmind-4g-mel | |||
sdc 8:32 0 5.5T 0 disk | |||
└─sdc1 8:33 0 5.5T 0 part /spiceflow/film-6tb-bp | |||
sdd 8:48 0 3.7T 0 disk | |||
└─md0 9:0 0 3.7T 0 raid1 /spiceflow/softraid | |||
sde 8:64 0 3.7T 0 disk | |||
└─md0 9:0 0 3.7T 0 raid1 /spiceflow/softraid | |||
sdf 8:80 0 3.7T 0 disk | |||
└─sdf1 8:81 0 3.7T 0 part /spiceflow/hare-s3-4t | |||
2019/06/01 spicey-3g died just as its replacement arrived, cest la vie. lost a bit of everything, move on. replaced with hare-s3-4t: | |||
Jun 2 17:40:54 bitpost kernel: ata8: hard resetting link | |||
Jun 2 17:40:55 bitpost kernel: ata8: SATA link up 6.0 Gbps (SStatus 133 SControl 300) | |||
Jun 2 17:40:55 bitpost kernel: ata8.00: supports DRM functions and may not be fully accessible | |||
Jun 2 17:40:55 bitpost kernel: ata8.00: ATA-11: Samsung SSD 860 QVO 4TB, RVQ01B6Q, max UDMA/133 | |||
Jun 2 17:40:55 bitpost kernel: ata8.00: 7814037168 sectors, multi 1: LBA48 NCQ (depth 31/32), AA | |||
Jun 2 17:40:55 bitpost kernel: ata8.00: supports DRM functions and may not be fully accessible | |||
Jun 2 17:40:55 bitpost kernel: ata8.00: configured for UDMA/133 | |||
Jun 2 17:40:55 bitpost kernel: ata8: EH complete | |||
Jun 2 17:40:55 bitpost kernel: scsi 7:0:0:0: Direct-Access ATA Samsung SSD 860 1B6Q PQ: 0 ANSI: 5 | |||
Jun 2 17:40:55 bitpost kernel: ata8.00: Enabling discard_zeroes_data | |||
Jun 2 17:40:55 bitpost kernel: sd 7:0:0:0: Attached scsi generic sg5 type 0 | |||
Jun 2 17:40:55 bitpost kernel: sd 7:0:0:0: [sdf] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB) | |||
Jun 2 17:40:55 bitpost kernel: sd 7:0:0:0: [sdf] Write Protect is off | |||
Jun 2 17:40:55 bitpost kernel: sd 7:0:0:0: [sdf] Mode Sense: 00 3a 00 00 | |||
Jun 2 17:40:55 bitpost kernel: sd 7:0:0:0: [sdf] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA | |||
Jun 2 17:40:55 bitpost kernel: ata8.00: Enabling discard_zeroes_data | |||
Jun 2 17:40:55 bitpost kernel: ata8.00: Enabling discard_zeroes_data | |||
Jun 2 17:40:55 bitpost kernel: sd 7:0:0:0: [sdf] Attached SCSI disk | |||
Before, at Peace Street... | |||
I had to stuff the goddamned drives right into the case since the rosewill was giving me such shit. | I had to stuff the goddamned drives right into the case since the rosewill was giving me such shit. | ||
In hindsight, it might not have been the rosewill at all... | In hindsight, it might not have been the rosewill at all... | ||
Line 537: | Line 409: | ||
** create a symlink: ln -s .music/Fresh/ELO-Secret\ Messages ELO-Secret\ Messages | ** create a symlink: ln -s .music/Fresh/ELO-Secret\ Messages ELO-Secret\ Messages | ||
** close the torrent files (ctrl-k), move the destination (ctrl-o), start again (ctrl-s) | ** close the torrent files (ctrl-k), move the destination (ctrl-o), start again (ctrl-s) | ||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
Line 626: | Line 488: | ||
| | | | ||
cat /var/lib/misc/dnsmasq.leases | cat /var/lib/misc/dnsmasq.leases | ||
|} | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
! | ! BOX: viper | ||
|- | |||
| 2016 ASUS Republic of Gaming laptop | |||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! Boot from USB | |||
|- | |||
| I had to flip bios switches: | |||
* Disable secure boot | |||
* Enable CSM (some compatibility bullshit) | |||
* Reboot, THEN USB will show in boot options, just hit del to enter bios, go to save page, and select the USB you want to override on next boot. PITA! | |||
|} | |||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! Trackpad | |||
|- | |- | ||
| | | | ||
* Toggle on/off: | |||
toggle_trackpad.sh | |||
* Dynamically adjust: | |||
xinput list # recently, "Elan Touchpad" is #14 | |||
xinput list-props 14 | |||
xinput --set-prop 14 "Trackpad Sensitivity" 55 # speed (55 good, 75 faster) | |||
xinput --set-prop 14 "Trackpad Touch Pressure" 6 1 # finger (6 1) vs thumb (12 1) | |||
* Persist settings here (note they kinda match up but diff names, sigh): | |||
/etc/X11/xorg.conf.d/60-synaptics.conf | |||
|} | |||
|} | |||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! BOX: wimpy | |||
|- | |||
| My main gaming machine | |||
P8P67LE mobo Intel i5 quad core | |||
[http://www.asus.com/Motherboards/P8P67_LE/ website] | |||
* HARDWARE: | |||
** Plug keyboard/mouse hub into TOP USB SLOT in back or BIOS won't recognize it | |||
** Make sure you plug Vive usb into a USB 3.0 slot | |||
* ON BOOT: | |||
** REMOVE USB KVM or the keyboard won't work - most of the time that's ok because we let it go through | |||
** IF you boot into ubuntu, the USB hub didn't seem to work, i had to plug right into mobo | |||
* had to install from iso after windows update got stuck FUCK OFF | |||
it TOTALLY WENT ON A DIET | |||
my 148GB drive was only using 34GB AFTER the install and cleanup | |||
WAY better than before | |||
took the time to move EVERYTHING I COULD to fatboy | |||
steam base install, plus games | |||
origin base install, plus games | |||
visual studio ce, plus mobile, c++, game dev | |||
but it sucked up 36GB on "system drive", assholes | |||
they dump android stuff, ios stuff, all this bullshit there | |||
cest la vie | |||
installing: | |||
chrome (like pulling teeth to get it set as default) | |||
steam, games | |||
origin, games | |||
vs ce 2017 edition w/xamarin,c++,games,unity | |||
OLD NOTES: | |||
drives and partitions: | |||
* sda HDD, OLD OSes, need to wipe and reformat to ntfs; sda2 ntfs 1.1TB old?? | |||
* sdb | |||
** sdb1 fat32 300MB wimpy-efi | |||
** sdb2 ntfs 147GB windows10??? | |||
** sdb3 fat32 287MB /boot/efi | |||
** sdb4 linux-swap 7GB | |||
** sdb5 ext4 wimpy-ubuntu-ssd 216GB | |||
** sdb6 ext4 wimpy-gentoo-ssd 54GB | |||
** sdb7 ext4 wimpy-openelec 19GB | |||
** sdb9 fat32 "boot, esp" | |||
check in windows: | |||
wmic baseboard get product,Manufacturer,version,serialnumber | |||
boot is in /ubuntu/boot | |||
|} | |||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! BOX: case | |||
|- | |||
| | |||
''' Fixing boot ''' | |||
Windows Updates tend to clobber the EFI boot setup. | |||
THen you have to set BIOS to boot with "UEFI+Legacy", and put the UEFI "USB" drive first in front of the "Windows Boot Manager" one. | |||
THen reboot, you should get grub. | |||
Go into Ubuntu and reinstall refind. | |||
Boot back into bios, and set back to UEFI boot. Leave the USB drive first. Reboot and yhou should get refind again. FU Bill. | |||
''' Install Ubuntu ''' | |||
To originally install ubuntu, I had to add [... --- nomodeset] to the boot line in the grub booter. | |||
Then I had to use a desktop 1080p monitor - the 4k Sony would not come up for some reason. | |||
The Seiki is working fine now, go figure. | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | |||
! BOX: Raspberry Pi 2 and 4k | |||
|- | |||
|You can override settings in /flash/config.txt; here's how, from [http://wiki.openelec.tv/index.php/Config.txt here]: | |||
mount -o remount,rw /flash | |||
nano /flash/config.txt | |||
# Make your changes, then ctrl+x to save. | |||
mount -o remount,ro /flash | |||
reboot | |||
Settings for 4k (from [https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=79330&start=25 here])... | |||
disable_overscan=1 | |||
hdmi_ignore_edid=0xa5000080 | |||
hdmi_cvt 3840 2160 30 | |||
framebuffer_width=3840 | |||
framebuffer_height=2160 | |||
hdmi_group=2 | |||
hdmi_mode=87 | |||
hdmi_pixel_freq_limit=400000000 | |||
max_framebuffer_width=3840 | |||
max_framebuffer_height=2160 | |||
I couldn't get 4K to stick in OpenELEC tho (except for the splash screen(!))... | |||
Settings->System->System->Video->Refresh->30Hz | |||
Settings->System->System->Video->Resolution->3840x2160 | |||
(it won't come up, just drops back to 1080p.. just as well, video at 30fps sucks...) | |||
And to overclock the Pi 2 (from [http://haydenjames.io/raspberry-pi-2-overclock/ here]): | |||
# OVERCLOCKING TO 1.1 GHz, EXTREME | |||
# default is 700 | |||
# this will NOT void the warranty :-) | |||
arm_freq=1000 | |||
sdram_freq=500 | |||
core_freq=500 | |||
over_voltage=6 | |||
temp_limit=80 #Will throttle to default clock speed if hit. | |||
# | |||
# there is also the "turbo" thingee (that "voids warranty", hot!!) | |||
#force_turbo=1 | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
Line 690: | Line 680: | ||
** keyboard driver to get function key working: /spiceflow/softraid/software/OS/windows/macbook_windows10_drivers/AppleKeyboardInstaller64.exe | ** keyboard driver to get function key working: /spiceflow/softraid/software/OS/windows/macbook_windows10_drivers/AppleKeyboardInstaller64.exe | ||
Then one day... it just stopped booting... Ten-Plus says the main board has a bad power circuit or something... sad day, MOVE ON. | |||
Then | |||
|} | |} | ||
{| class="mw-collapsible mw-collapsed wikitable" | {| class="mw-collapsible mw-collapsed wikitable" | ||
Line 797: | Line 734: | ||
eselect opengl set xorg-x11 | eselect opengl set xorg-x11 | ||
reboot | reboot | ||
|} | |} |
Latest revision as of 14:59, 31 August 2024
General tasks | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Maintenance of my music collection Add a new VM to melange - Clone a melange VM - Linux barebones quickstart Scripts - Add a user - Linux permissions - DNS Turn off ubuntu gnome screenlock - Set ubuntu default browser Add a drive - Back up drive - Check disk - Check disk speed Bash basics - OS X basics - DOS basics - Update gentoo kernel SSL certificate instructions - Networking systemd - udev: Assign unique names to your devices Automatically mount and unmount your devices udev: Autorun programs when connecting your devices
|
Boxes
Bitpost - Melange - Cast - Bluto - Cobra - Case - Viper - Wimpy
Melange VMs
AbtDev1 - Positronic - Morosoph - Glam - Hive - Bandit - Matryoshka - Hoard - Tornados - Matcha - Windozer
Devices and Hardware
Cable Modem - Sony 65" TV - TCL 55' TV - ASUS router
IOTs: lime - carambola - Arduino
Flash Drives - Stadia controller - Logitech F710 Controller
Aeron chair - Jetson Electric Bike
Third Party Services
Cloudflare | LetsEncrypt | Sendgrid
Hardware notes | ||||
---|---|---|---|---|
|
Old notes and dead boxes | ||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|