jazzure 0.1.0__py3-none-any.whl
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.
- jazzure/__init__.py +3 -0
- jazzure/__main__.py +9 -0
- jazzure/assets/jazzure_terminal_detailed_clean.ansi +20 -0
- jazzure/az_cli/README.md +55 -0
- jazzure/az_cli/__init__.py +0 -0
- jazzure/az_cli/azcli.py +346 -0
- jazzure/config/ToolConfig.py +6 -0
- jazzure/config/__init__.py +0 -0
- jazzure/entra/__init__.py +0 -0
- jazzure/entra/resource_providers.py +11 -0
- jazzure/imds/README.md +96 -0
- jazzure/imds/__init__.py +0 -0
- jazzure/imds/imds.py +279 -0
- jazzure/imds/templates/curl.sh.j2 +77 -0
- jazzure/imds/templates/powershell.ps1.j2 +60 -0
- jazzure/imds/templates/python.py.j2 +0 -0
- jazzure/main.py +91 -0
- jazzure/powershell/Dockerfile +36 -0
- jazzure/powershell/README.md +82 -0
- jazzure/powershell/__init__.py +0 -0
- jazzure/powershell/pwsh_manager.py +315 -0
- jazzure/python_sdk/README.md +22 -0
- jazzure/python_sdk/__init__.py +0 -0
- jazzure/python_sdk/pypi_manager.py +65 -0
- jazzure/utils.py +89 -0
- jazzure-0.1.0.dist-info/METADATA +97 -0
- jazzure-0.1.0.dist-info/RECORD +30 -0
- jazzure-0.1.0.dist-info/WHEEL +4 -0
- jazzure-0.1.0.dist-info/entry_points.txt +5 -0
- jazzure-0.1.0.dist-info/licenses/LICENSE.md +29 -0
jazzure/__init__.py
ADDED
jazzure/__main__.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[38;2;0;9;21m[48;2;0;10;21m▀[38;2;0;10;21m▀▀▀[38;2;0;9;20m▀[38;2;0;10;20m▀[38;2;0;9;20m▀[38;2;0;10;21m▀▀[38;2;0;9;20m[48;2;1;10;21m▀[38;2;0;9;21m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;10;21m▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀[48;2;0;9;20m▀[48;2;0;7;19m▀[48;2;0;9;20m▀[38;2;1;10;21m[48;2;0;8;20m▀[38;2;0;10;21m[48;2;1;10;21m▀[48;2;0;10;21m▀▀▀▀▀[38;2;0;10;20m▀[38;2;0;10;21m▀▀▀▀▀▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀[48;2;0;9;21m▀[48;2;0;10;21m▀[38;2;0;9;20m▀[38;2;0;10;21m▀[48;2;0;9;21m▀▀[38;2;0;9;21m[48;2;0;10;21m▀[38;2;0;10;21m▀[48;2;0;9;21m▀[38;2;0;9;20m[48;2;0;10;21m▀[38;2;0;10;21m▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀[48;2;0;9;21m▀[48;2;0;10;21m▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀▀▀[48;2;0;9;20m▀[48;2;0;10;21m▀▀[38;2;0;10;20m[48;2;0;10;20m▀[38;2;0;9;21m[48;2;0;10;21m▀[38;2;0;10;21m▀[38;2;0;9;21m▀[38;2;0;9;20m▀[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;10;21m▀▀▀▀[38;2;0;9;21m▀[38;2;0;9;20m▀▀▀[38;2;0;10;21m▀▀[38;2;0;9;20m▀[38;2;0;10;21m▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀[0m
|
|
2
|
+
[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;10;21m▀[38;2;0;9;21m▀[38;2;0;10;21m[48;2;0;9;20m▀[48;2;0;10;21m▀▀[48;2;1;10;21m▀[48;2;0;8;20m▀[38;2;0;8;20m[48;2;12;17;23m▀[38;2;0;7;20m[48;2;24;25;25m▀[38;2;0;8;20m[48;2;9;14;21m▀[38;2;0;9;20m[48;2;1;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀[38;2;1;11;21m[48;2;0;6;19m▀[48;2;0;5;19m▀[38;2;0;10;21m[48;2;0;9;20m▀[48;2;0;10;21m▀▀▀▀▀[48;2;0;9;20m▀[38;2;1;10;21m[48;2;0;7;20m▀[38;2;0;8;20m[48;2;10;17;25m▀[38;2;2;11;21m[48;2;0;3;16m▀[38;2;1;11;21m[48;2;0;7;19m▀[38;2;0;8;19m[48;2;5;16;26m▀[38;2;0;7;18m[48;2;12;27;39m▀[38;2;2;13;23m[48;2;15;30;41m▀[38;2;10;21;30m[48;2;23;41;52m▀[38;2;7;14;23m[48;2;36;60;73m▀[38;2;11;17;24m[48;2;56;71;75m▀[38;2;0;6;18m[48;2;24;29;34m▀[38;2;1;10;21m[48;2;0;5;17m▀[38;2;0;9;20m[48;2;1;11;22m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀▀▀▀▀▀▀[48;2;0;9;21m▀[38;2;1;10;21m[48;2;0;5;18m▀[38;2;0;10;21m[48;2;0;8;19m▀[38;2;0;9;20m[48;2;0;10;21m▀[48;2;1;10;21m▀[48;2;1;11;21m▀[38;2;0;10;21m[48;2;1;10;21m▀[48;2;0;10;21m▀▀▀[48;2;0;9;20m▀[48;2;0;9;21m▀[48;2;0;9;20m▀▀[38;2;0;9;21m[48;2;0;9;21m▀[38;2;0;9;20m[48;2;0;9;20m▀[38;2;0;10;20m▀[38;2;0;9;20m[48;2;0;10;21m▀[38;2;0;10;20m▀[38;2;0;10;21m▀▀[38;2;0;9;20m[48;2;0;10;20m▀[38;2;0;9;21m[48;2;0;10;21m▀[38;2;0;9;20m▀[38;2;0;10;21m▀▀▀▀▀▀▀[38;2;0;9;20m▀[38;2;0;10;21m▀▀▀▀▀[38;2;0;9;21m[48;2;0;9;21m▀[38;2;0;9;20m[48;2;0;9;20m▀▀▀[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;10;21m▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀▀▀▀▀▀▀▀▀[48;2;0;10;20m▀[38;2;0;9;20m[48;2;0;10;21m▀[38;2;0;10;21m▀[38;2;0;9;21m[48;2;0;9;21m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀▀▀▀▀[48;2;0;9;21m▀[48;2;0;10;21m▀▀▀▀▀▀▀[0m
|
|
3
|
+
[38;2;0;9;21m[48;2;0;9;21m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀▀[38;2;1;10;21m▀[38;2;0;9;21m▀[38;2;13;18;23m[48;2;0;7;20m▀[38;2;16;20;23m[48;2;0;8;20m▀[38;2;0;9;19m[48;2;11;19;25m▀[38;2;0;6;19m[48;2;16;21;27m▀[38;2;4;12;21m[48;2;10;15;23m▀[38;2;30;32;32m[48;2;17;21;26m▀[38;2;32;34;32m[48;2;21;25;28m▀[38;2;11;17;23m[48;2;4;11;21m▀[38;2;0;9;20m[48;2;1;10;21m▀[38;2;0;10;21m[48;2;0;10;21m▀▀[38;2;1;10;21m[48;2;2;12;22m▀[48;2;0;4;18m▀[38;2;5;11;21m[48;2;57;48;39m▀[38;2;76;62;46m[48;2;181;129;83m▀[38;2;106;84;58m[48;2;105;73;48m▀[38;2;110;89;62m[48;2;122;94;60m▀[38;2;14;21;29m[48;2;120;94;58m▀[38;2;10;24;37m[48;2;0;3;16m▀[38;2;6;17;28m[48;2;0;14;27m▀[38;2;2;20;36m[48;2;3;22;38m▀[38;2;0;29;51m[48;2;43;52;55m▀[38;2;8;46;68m[48;2;78;82;77m▀[38;2;14;54;75m[48;2;71;84;87m▀[38;2;38;53;60m[48;2;40;59;67m▀[38;2;9;14;22m[48;2;30;37;41m▀[38;2;0;8;20m[48;2;4;10;21m▀[38;2;0;10;21m[48;2;2;11;21m▀[48;2;0;8;19m▀[38;2;1;11;22m[48;2;0;5;17m▀[38;2;0;10;21m[48;2;0;9;20m▀[48;2;0;10;21m▀▀▀[48;2;1;10;20m▀[38;2;0;8;20m[48;2;10;17;25m▀[48;2;4;12;22m▀[38;2;14;20;26m[48;2;6;13;21m▀[38;2;42;42;38m[48;2;12;19;25m▀[38;2;25;28;29m[48;2;4;12;22m▀[38;2;2;10;20m[48;2;5;12;21m▀[38;2;0;6;18m[48;2;32;34;34m▀[38;2;0;4;17m[48;2;36;38;38m▀[38;2;0;7;19m[48;2;25;28;31m▀[38;2;0;10;21m[48;2;3;11;21m▀[48;2;0;9;20m▀[48;2;0;10;21m▀[38;2;0;9;21m▀▀[38;2;0;10;21m▀[38;2;0;10;20m▀▀[38;2;0;10;21m▀[38;2;0;10;20m▀[38;2;0;9;20m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀[38;2;0;9;20m[48;2;0;9;20m▀[48;2;0;10;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀[48;2;0;9;21m▀[48;2;0;10;21m▀▀[38;2;0;9;21m[48;2;0;9;21m▀[38;2;0;10;21m▀[48;2;0;10;21m▀▀▀[38;2;0;10;20m▀[38;2;0;10;21m▀▀▀▀▀▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;10;21m▀▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀▀▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀[48;2;0;9;21m▀[48;2;0;10;21m▀▀▀▀▀▀▀▀[0m
|
|
4
|
+
[38;2;0;10;21m[48;2;0;9;20m▀[48;2;0;10;21m▀▀▀[48;2;1;10;21m▀[48;2;0;9;21m▀[38;2;0;9;21m[48;2;10;16;23m▀[38;2;0;10;21m[48;2;29;30;27m▀[38;2;4;11;21m[48;2;19;22;24m▀[38;2;5;11;21m[48;2;1;9;20m▀[38;2;37;39;35m[48;2;0;5;18m▀[38;2;45;45;39m[48;2;0;4;18m▀[38;2;11;17;23m[48;2;15;19;24m▀[38;2;0;4;18m[48;2;19;22;25m▀[38;2;0;6;19m[48;2;4;11;21m▀[38;2;0;9;20m[48;2;0;10;21m▀[38;2;0;10;21m▀▀▀[38;2;2;11;22m[48;2;2;11;22m▀[38;2;0;5;18m[48;2;0;3;17m▀[38;2;117;89;61m[48;2;86;67;49m▀[38;2;195;137;88m[48;2;181;126;79m▀[38;2;136;96;61m[48;2;88;61;39m▀[38;2;40;29;22m[48;2;24;19;17m▀[38;2;113;78;35m[48;2;63;50;35m▀[38;2;37;31;23m[48;2;57;52;42m▀[38;2;9;21;34m[48;2;36;39;42m▀[38;2;27;37;43m[48;2;28;34;39m▀[38;2;50;57;57m[48;2;7;17;28m▀[38;2;46;62;68m[48;2;0;12;24m▀[38;2;31;50;60m[48;2;1;10;19m▀[38;2;23;42;54m[48;2;0;6;15m▀[38;2;19;38;50m[48;2;0;7;15m▀[38;2;23;36;46m[48;2;0;6;18m▀[38;2;35;42;48m[48;2;0;5;20m▀[38;2;40;46;49m[48;2;5;13;23m▀[38;2;31;36;40m[48;2;19;27;34m▀[38;2;6;13;23m[48;2;34;39;41m▀[38;2;0;8;20m[48;2;2;9;20m▀[38;2;1;10;21m[48;2;0;10;21m▀[38;2;0;10;21m▀[38;2;2;9;20m▀[38;2;31;34;34m[48;2;0;7;19m▀[38;2;48;47;41m[48;2;0;10;21m▀[38;2;12;18;24m[48;2;0;8;20m▀[38;2;0;6;18m[48;2;4;13;22m▀[38;2;0;9;20m[48;2;0;9;20m▀[38;2;1;9;20m[48;2;3;12;22m▀[38;2;15;21;26m[48;2;0;9;20m▀[38;2;39;41;39m[48;2;0;3;17m▀[38;2;8;14;23m[48;2;0;8;20m▀[38;2;1;10;21m[48;2;0;10;21m▀[38;2;0;10;21m▀▀▀▀▀[38;2;0;9;21m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀▀▀▀▀▀▀▀▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀▀▀▀▀▀▀▀[38;2;0;9;20m▀[38;2;0;10;21m▀▀[38;2;0;9;21m[48;2;0;9;21m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀▀▀▀▀▀▀[0m
|
|
5
|
+
[38;2;0;9;20m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀[48;2;2;12;22m▀[48;2;0;10;21m▀[38;2;2;12;22m[48;2;0;5;17m▀[38;2;3;12;22m[48;2;0;0;13m▀[38;2;1;10;21m▀[38;2;2;11;21m[48;2;0;2;14m▀[38;2;2;12;22m[48;2;0;4;16m▀[38;2;2;11;21m[48;2;0;10;21m▀[38;2;9;16;23m[48;2;0;9;21m▀[38;2;11;17;23m[48;2;0;8;20m▀[38;2;1;10;21m[48;2;0;10;21m▀[38;2;0;10;21m▀▀▀▀[38;2;1;10;21m[48;2;0;9;21m▀[38;2;1;9;20m[48;2;0;9;20m▀[38;2;8;12;20m[48;2;4;17;30m▀[38;2;88;62;42m[48;2;8;22;33m▀[38;2;70;54;37m[48;2;11;19;28m▀[38;2;32;35;37m[48;2;2;9;19m▀[38;2;18;26;35m[48;2;24;17;12m▀[38;2;12;15;23m[48;2;58;37;14m▀[38;2;31;23;15m[48;2;74;53;27m▀[38;2;68;43;17m[48;2;70;56;35m▀[38;2;101;64;21m[48;2;64;50;32m▀[38;2;130;84;28m[48;2;83;61;35m▀[38;2;136;88;33m[48;2;125;90;43m▀[38;2;113;72;28m[48;2;173;117;47m▀[38;2;102;64;24m[48;2;182;123;49m▀[38;2;98;63;24m[48;2;179;126;55m▀[38;2;52;38;21m[48;2;142;102;47m▀[38;2;0;5;17m[48;2;32;28;24m▀[38;2;0;6;19m[48;2;14;23;32m▀[38;2;27;32;35m[48;2;7;15;25m▀[38;2;3;11;21m[48;2;0;8;19m▀[38;2;0;9;21m[48;2;0;10;21m▀[38;2;0;10;21m▀▀[38;2;1;11;21m▀[38;2;1;10;21m▀[38;2;1;8;20m▀[38;2;19;22;27m[48;2;0;7;19m▀[38;2;60;57;49m[48;2;7;14;23m▀[38;2;36;38;37m[48;2;0;10;20m▀[38;2;9;14;23m[48;2;0;9;20m▀[38;2;2;10;21m[48;2;0;10;21m▀[38;2;1;10;21m▀[38;2;0;10;21m▀[38;2;1;10;21m[48;2;0;7;20m▀▀[48;2;0;6;20m▀[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;10;21m▀[48;2;0;9;20m▀[48;2;0;10;21m▀[38;2;1;10;21m[48;2;0;8;20m▀[38;2;1;11;21m[48;2;0;6;20m▀[48;2;0;7;20m▀▀[38;2;0;10;21m[48;2;0;8;20m▀[48;2;0;10;21m▀▀▀▀[38;2;1;10;21m[48;2;0;6;19m▀[38;2;1;11;21m[48;2;0;6;20m▀[48;2;0;7;20m▀▀[48;2;0;6;20m▀[38;2;1;10;21m[48;2;0;6;19m▀[48;2;0;6;20m▀[38;2;1;10;20m▀[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;10;21m▀[38;2;1;10;21m[48;2;0;7;19m▀[48;2;0;6;19m▀[48;2;0;6;20m▀[48;2;0;7;20m▀▀[38;2;1;11;21m▀[38;2;1;10;21m[48;2;0;6;20m▀[48;2;0;6;19m▀[38;2;0;10;21m[48;2;0;8;20m▀[48;2;0;10;21m▀[38;2;1;10;21m[48;2;0;8;20m▀[38;2;1;11;21m[48;2;0;6;20m▀[38;2;1;10;21m▀[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;10;21m▀[38;2;1;10;21m[48;2;0;8;21m▀[38;2;1;11;21m[48;2;0;6;20m▀[38;2;1;10;21m▀[48;2;0;8;20m▀[38;2;0;10;21m[48;2;0;10;21m▀[48;2;0;9;20m▀[38;2;1;11;21m[48;2;0;6;19m▀[38;2;1;10;21m[48;2;0;7;20m▀▀[38;2;1;11;21m[48;2;0;6;20m▀[48;2;0;7;20m▀[38;2;1;10;21m▀[38;2;0;10;21m[48;2;1;10;21m▀▀[48;2;0;10;21m▀▀[38;2;1;10;21m[48;2;0;7;20m▀[38;2;1;11;21m[48;2;0;6;20m▀[38;2;1;10;21m▀▀[38;2;1;11;21m▀[38;2;1;10;21m▀[48;2;0;7;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀[0m
|
|
6
|
+
[38;2;0;9;20m[48;2;0;9;20m▀[38;2;0;10;20m[48;2;1;11;21m▀[38;2;1;10;21m[48;2;0;8;20m▀[38;2;1;11;21m[48;2;0;4;15m▀[38;2;0;2;15m[48;2;45;48;50m▀[38;2;0;7;19m[48;2;114;112;100m▀[38;2;20;26;33m[48;2;149;145;128m▀[38;2;57;60;59m[48;2;152;146;128m▀[38;2;78;80;75m[48;2;67;73;73m▀[38;2;54;59;59m[48;2;59;67;72m▀[38;2;28;34;39m[48;2;111;111;103m▀[38;2;0;6;17m[48;2;78;79;75m▀[38;2;0;7;19m[48;2;14;19;28m▀[38;2;2;11;22m[48;2;0;3;16m▀[38;2;0;10;21m[48;2;0;9;20m▀[48;2;0;10;21m▀▀▀[48;2;0;9;20m▀[38;2;1;9;20m[48;2;2;12;24m▀[38;2;8;23;36m[48;2;9;25;38m▀[38;2;5;19;32m[48;2;2;8;18m▀[38;2;1;9;19m[48;2;42;31;19m▀[38;2;13;13;16m[48;2;65;41;14m▀[38;2;42;29;15m[48;2;113;71;19m▀[38;2;75;49;17m[48;2;147;95;29m▀[38;2;79;53;23m[48;2;159;101;30m▀[38;2;36;29;21m[48;2;64;41;14m▀[38;2;19;23;26m[48;2;36;34;30m▀[38;2;46;43;38m[48;2;33;32;29m▀[38;2;23;26;31m[48;2;4;11;20m▀[38;2;0;8;21m[48;2;0;0;15m▀[38;2;42;37;26m[48;2;72;56;34m▀[38;2;80;61;33m[48;2;177;130;68m▀[38;2;47;41;29m[48;2;57;46;30m▀[38;2;33;34;33m[48;2;30;28;28m▀[38;2;40;36;31m[48;2;16;20;24m▀[38;2;32;32;31m[48;2;0;9;20m▀[38;2;39;37;32m[48;2;25;28;28m▀[38;2;0;7;19m[48;2;0;7;19m▀[38;2;1;10;21m[48;2;0;10;20m▀[38;2;0;10;21m[48;2;0;9;20m▀[48;2;0;10;20m▀[38;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀[38;2;1;11;21m▀[38;2;0;8;20m▀[38;2;0;10;21m[48;2;0;10;20m▀[48;2;0;10;21m▀▀▀[38;2;0;9;20m[48;2;0;8;19m▀[38;2;15;20;23m[48;2;83;68;37m▀[38;2;18;22;25m[48;2;100;82;45m▀[38;2;19;23;25m[48;2;98;80;43m▀[38;2;6;14;21m[48;2;29;29;24m▀[38;2;0;9;20m[48;2;0;5;19m▀[38;2;1;10;20m[48;2;3;12;21m▀[38;2;0;9;20m[48;2;0;4;17m▀[38;2;10;17;23m[48;2;57;50;31m▀[38;2;19;24;25m[48;2;107;88;45m▀[38;2;18;23;25m[48;2;99;81;43m▀[38;2;18;22;24m[48;2;110;88;43m▀[38;2;9;16;22m[48;2;51;45;31m▀[38;2;0;9;20m[48;2;0;4;19m▀[38;2;0;10;21m[48;2;3;11;21m▀[38;2;0;9;20m[48;2;0;8;20m▀[38;2;2;11;21m[48;2;10;16;22m▀[38;2;18;22;25m[48;2;96;79;43m▀[38;2;18;22;24m[48;2;95;77;40m▀[38;2;17;21;24m[48;2;96;78;42m▀[48;2;97;79;43m▀[38;2;17;22;24m[48;2;101;84;46m▀[38;2;18;22;25m[48;2;99;82;46m▀[38;2;18;23;25m[48;2;97;78;41m▀[38;2;18;22;24m[48;2;105;85;43m▀[38;2;3;12;21m[48;2;20;23;23m▀[38;2;0;9;20m[48;2;0;8;19m▀[38;2;15;21;25m[48;2;89;72;38m▀[38;2;18;22;25m[48;2;100;82;46m▀[38;2;18;23;25m[48;2;99;81;43m▀[48;2;99;82;44m▀[38;2;18;22;25m[48;2;94;76;41m▀[38;2;17;22;25m[48;2;99;81;42m▀[38;2;17;22;24m[48;2;98;80;43m▀[38;2;18;23;24m[48;2;106;86;46m▀[38;2;6;14;21m[48;2;33;34;29m▀[38;2;0;8;20m[48;2;0;3;16m▀[38;2;13;19;22m[48;2;78;66;37m▀[38;2;19;24;25m[48;2;108;87;44m▀[38;2;20;24;25m[48;2;106;86;44m▀[38;2;8;15;22m[48;2;44;40;28m▀[38;2;0;9;20m[48;2;0;2;17m▀[38;2;9;16;22m[48;2;52;47;31m▀[38;2;18;23;25m[48;2;106;84;43m▀[38;2;18;22;24m[48;2;103;83;44m▀[38;2;12;17;23m[48;2;69;58;35m▀[38;2;0;8;19m[48;2;0;2;17m▀[38;2;6;14;22m[48;2;33;33;27m▀[38;2;19;23;25m[48;2;104;83;44m▀[38;2;17;22;24m[48;2;102;84;45m▀[48;2;101;83;45m▀[38;2;18;22;25m[48;2;100;81;43m▀[38;2;18;23;25m[48;2;103;84;43m▀[38;2;12;18;23m[48;2;97;79;42m▀[38;2;0;6;19m[48;2;58;50;30m▀[38;2;0;8;20m[48;2;8;13;20m▀[38;2;0;10;21m[48;2;0;8;20m▀[48;2;4;11;20m▀[38;2;16;22;25m[48;2;91;75;41m▀[38;2;19;23;25m[48;2;103;85;46m▀[38;2;17;21;24m[48;2;99;80;43m▀[38;2;18;23;25m[48;2;97;80;43m▀[38;2;19;24;26m[48;2;98;81;43m▀[38;2;17;22;24m[48;2;97;80;43m▀[48;2;99;80;42m▀[38;2;3;12;21m[48;2;17;22;23m▀[38;2;0;9;21m[48;2;0;7;20m▀[38;2;0;10;21m[48;2;1;10;21m▀[0m
|
|
7
|
+
[38;2;2;12;22m[48;2;0;3;15m▀[38;2;0;5;17m[48;2;18;22;29m▀[38;2;7;12;22m[48;2;111;108;97m▀[38;2;98;96;88m[48;2;161;152;133m▀[38;2;159;154;134m[48;2;88;92;89m▀[38;2;136;135;119m[48;2;62;74;78m▀[38;2;87;92;88m[48;2;101;105;99m▀[38;2;84;93;93m[48;2;57;66;69m▀[38;2;99;104;102m[48;2;36;43;49m▀[38;2;37;52;61m[48;2;120;123;115m▀[38;2;39;55;65m[48;2;109;115;111m▀[38;2;52;57;59m[48;2;62;69;72m▀[38;2;37;42;45m[48;2;62;66;65m▀[38;2;31;35;40m[48;2;28;31;35m▀[38;2;9;17;25m[48;2;20;27;34m▀[38;2;0;6;18m[48;2;7;15;24m▀[38;2;1;11;22m[48;2;0;8;19m▀[38;2;1;10;21m[48;2;0;7;19m▀[38;2;0;10;21m[48;2;1;10;21m▀[38;2;1;9;20m[48;2;0;9;21m▀[38;2;3;13;27m[48;2;6;12;19m▀[38;2;44;36;25m[48;2;75;51;20m▀[38;2;83;52;16m[48;2;89;55;16m▀[38;2;100;61;17m[48;2;112;70;18m▀[38;2;146;93;30m[48;2;154;98;29m▀[38;2;148;99;35m[48;2;180;127;59m▀[38;2;161;111;46m[48;2;190;146;91m▀[38;2;158;109;48m[48;2;184;153;107m▀[38;2;79;59;32m[48;2;178;147;102m▀[38;2;34;33;29m[48;2;158;135;99m▀[38;2;22;24;25m[48;2;156;135;101m▀[38;2;49;42;32m[48;2;194;165;122m▀[38;2;173;130;77m[48;2;184;157;116m▀[38;2;210;163;102m[48;2;101;76;55m▀[38;2;176;140;89m[48;2;116;83;56m▀[38;2;42;35;27m[48;2;142;116;81m▀[38;2;2;4;12m[48;2;147;116;74m▀[38;2;43;37;26m[48;2;177;138;85m▀[38;2;45;39;30m[48;2;137;104;59m▀[38;2;0;3;17m[48;2;22;23;26m▀[38;2;5;13;22m[48;2;21;23;26m▀[38;2;2;11;21m[48;2;24;27;28m▀[38;2;0;8;19m[48;2;24;27;29m▀[38;2;0;9;20m[48;2;7;13;22m▀[38;2;0;10;20m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀[48;2;0;10;20m▀[48;2;0;10;21m▀[38;2;0;9;19m[48;2;2;9;19m▀[38;2;88;70;37m[48;2;95;75;39m▀[38;2;103;83;45m[48;2;114;88;45m▀[38;2;109;85;44m[48;2;117;89;43m▀[38;2;32;31;25m[48;2;34;32;26m▀[38;2;0;5;19m[48;2;0;5;19m▀[38;2;2;10;21m[48;2;0;8;20m▀[38;2;5;10;19m[48;2;14;19;22m▀[38;2;84;68;36m[48;2;103;82;40m▀[38;2;114;88;42m[48;2;113;89;43m▀[38;2;112;88;43m[48;2;108;84;41m▀[38;2;116;93;47m[48;2;110;86;43m▀[38;2;80;64;35m[48;2;103;81;40m▀[38;2;4;10;20m[48;2;12;17;22m▀[38;2;1;10;20m[48;2;0;7;19m▀[38;2;0;8;20m[48;2;0;8;20m▀[38;2;10;16;22m[48;2;9;16;23m▀[38;2;105;83;46m[48;2;84;68;38m▀[38;2;106;83;44m[48;2;83;67;38m▀[38;2;108;85;45m[48;2;75;59;34m▀[38;2;113;89;46m[48;2;66;51;31m▀[38;2;108;86;46m[48;2;82;64;35m▀[38;2;104;82;45m[48;2;117;91;43m▀[38;2;105;83;44m[48;2;115;90;45m▀[38;2;109;87;44m[48;2;110;86;43m▀[38;2;22;24;23m[48;2;18;20;21m▀[38;2;0;7;18m[48;2;1;9;20m▀[38;2;100;79;42m[48;2;79;64;37m▀[38;2;110;88;47m[48;2;85;68;37m▀[38;2;110;87;45m[48;2;85;68;36m▀[38;2;110;88;47m[48;2;66;52;32m▀[38;2;101;79;42m[48;2;66;53;32m▀[38;2;99;79;43m[48;2;124;95;48m▀[38;2;107;85;44m[48;2;120;93;46m▀[38;2;110;87;45m[48;2;111;86;42m▀[38;2;35;34;28m[48;2;27;27;23m▀[38;2;0;3;17m[48;2;0;2;18m▀[38;2;79;66;38m[48;2;83;67;35m▀[38;2;114;91;45m[48;2;121;95;45m▀[38;2;112;89;45m[48;2;120;93;44m▀[38;2;47;42;30m[48;2;51;46;30m▀[38;2;0;2;15m[48;2;0;1;16m▀[38;2;54;47;31m[48;2;59;50;30m▀[38;2;108;86;45m[48;2;119;92;46m▀[38;2;106;84;43m[48;2;119;91;43m▀[38;2;69;59;36m[48;2;71;58;33m▀[38;2;0;2;17m[48;2;0;2;17m▀[38;2;32;31;26m[48;2;36;34;26m▀[38;2;109;86;45m[48;2;123;96;47m▀[38;2;106;85;46m[48;2;115;89;43m▀[38;2;106;84;44m[48;2;96;75;37m▀[38;2;108;86;45m[48;2;40;34;25m▀[38;2;107;85;46m[48;2;84;67;36m▀[38;2;105;83;44m[48;2;122;92;45m▀[38;2;116;92;45m[48;2;108;86;44m▀[38;2;74;61;34m[48;2;106;83;41m▀[38;2;3;7;19m[48;2;12;17;21m▀[38;2;3;11;19m[48;2;1;9;19m▀[38;2;96;76;40m[48;2;103;81;41m▀[38;2;110;87;45m[48;2;115;90;45m▀[38;2;104;81;42m[48;2;102;79;41m▀[38;2;107;84;43m[48;2;79;62;35m▀[38;2;111;90;46m[48;2;79;63;37m▀[38;2;116;92;47m[48;2;74;62;34m▀[38;2;120;95;47m[48;2;70;59;32m▀[38;2;21;24;24m[48;2;11;17;22m▀[38;2;0;6;20m[48;2;0;8;20m▀[38;2;1;10;21m[48;2;1;10;21m▀[0m
|
|
8
|
+
[38;2;26;28;33m[48;2;142;140;123m▀[38;2;127;125;111m[48;2;156;152;134m▀[38;2;148;144;127m[48;2;108;112;106m▀[38;2;89;96;93m[48;2;76;86;88m▀[38;2;94;101;99m[48;2;58;63;64m▀[38;2;49;58;63m[48;2;81;83;79m▀[38;2;9;16;27m[48;2;55;57;57m▀[38;2;49;54;56m[48;2;1;13;25m▀[38;2;0;6;18m[48;2;2;24;40m▀[38;2;58;65;68m[48;2;2;12;23m▀[38;2;91;92;85m[48;2;1;6;16m▀[38;2;113;115;110m[48;2;46;55;59m▀[38;2;87;91;89m[48;2;93;98;97m▀[38;2;55;60;62m[48;2;60;69;74m▀[38;2;50;54;53m[48;2;47;53;57m▀[38;2;32;36;40m[48;2;38;41;44m▀[38;2;15;19;27m[48;2;14;21;28m▀[38;2;17;23;30m[48;2;18;23;30m▀[38;2;1;8;19m[48;2;1;8;19m▀[38;2;0;8;21m[48;2;0;9;21m▀[38;2;18;20;21m[48;2;7;13;21m▀[38;2;88;59;22m[48;2;58;41;20m▀[38;2;71;44;14m[48;2;65;42;15m▀[38;2;108;67;16m[48;2;94;61;20m▀[38;2;168;109;39m[48;2;162;108;42m▀[38;2;195;143;75m[48;2;177;132;76m▀[38;2;194;158;107m[48;2;169;142;103m▀[38;2;178;156;119m[48;2;171;149;116m▀[38;2;174;155;121m[48;2;180;158;121m▀[38;2;170;150;117m[48;2;179;158;121m▀[38;2;181;159;122m[48;2;128;111;84m▀[38;2;207;182;141m[48;2;153;133;103m▀[38;2;221;195;151m[48;2;155;136;108m▀[38;2;142;124;95m[48;2;64;57;43m▀[38;2;124;108;85m[48;2;94;82;60m▀[38;2;210;184;142m[48;2;140;120;89m▀[38;2;202;176;133m[48;2;162;143;109m▀[38;2;205;175;129m[48;2;204;177;134m▀[38;2;160;129;84m[48;2;163;135;92m▀[38;2;29;29;24m[48;2;18;20;21m▀[38;2;16;20;26m[48;2;18;21;26m▀[38;2;3;11;20m[48;2;28;30;30m▀[38;2;2;10;21m[48;2;16;20;25m▀[38;2;3;12;22m[48;2;1;8;20m▀[38;2;0;9;20m[48;2;0;10;21m▀[38;2;0;10;21m▀▀▀▀▀▀▀[38;2;0;9;19m[48;2;1;9;20m▀[38;2;86;69;36m[48;2;83;66;34m▀[38;2;106;85;43m[48;2;99;76;38m▀[38;2;101;81;41m[48;2;98;77;38m▀[38;2;29;29;24m[48;2;29;29;24m▀[38;2;0;6;19m[48;2;0;6;19m▀[38;2;0;7;19m▀[38;2;25;26;24m[48;2;51;44;27m▀[38;2;110;88;44m[48;2;107;83;39m▀[38;2;101;81;42m[48;2;89;72;38m▀[38;2;101;81;40m[48;2;59;49;29m▀[38;2;106;84;41m[48;2;101;80;39m▀[38;2;109;86;41m[48;2;108;84;40m▀[38;2;24;26;25m[48;2;43;40;30m▀[38;2;0;6;19m[48;2;0;5;18m▀[38;2;1;10;21m[48;2;1;10;21m▀[38;2;0;9;20m[48;2;0;10;21m▀[38;2;0;7;20m[48;2;1;10;21m▀[38;2;0;8;20m[48;2;2;11;21m▀[38;2;0;6;19m[48;2;0;4;18m▀[38;2;5;11;19m[48;2;61;54;33m▀[38;2;95;77;39m[48;2;116;91;44m▀[38;2;103;81;40m[48;2;108;85;43m▀[38;2;103;80;37m[48;2;79;64;33m▀[38;2;44;39;27m[48;2;1;9;19m▀[38;2;0;5;19m[48;2;0;9;20m▀[38;2;1;10;20m[48;2;0;10;21m▀[38;2;0;8;20m[48;2;1;10;21m▀[48;2;2;11;21m▀[38;2;0;6;19m[48;2;0;4;19m▀[38;2;2;8;18m[48;2;42;39;26m▀[38;2;92;73;37m[48;2;112;87;42m▀[38;2;111;87;44m[48;2;102;79;40m▀[38;2;110;86;43m[48;2;100;79;38m▀[38;2;54;47;29m[48;2;10;15;20m▀[38;2;0;6;18m[48;2;1;8;20m▀[48;2;0;6;18m▀[38;2;70;57;32m[48;2;71;58;33m▀[38;2;106;84;42m[48;2;107;85;42m▀[38;2;107;85;40m[48;2;111;88;42m▀[38;2;41;38;26m[48;2;49;43;28m▀[38;2;0;2;17m[48;2;0;2;16m▀[38;2;52;46;29m[48;2;50;44;28m▀[38;2;107;85;42m[48;2;104;82;41m▀[38;2;104;83;40m[48;2;104;81;38m▀[38;2;69;57;32m[48;2;69;57;31m▀[38;2;0;3;17m[48;2;0;3;17m▀[38;2;32;33;27m[48;2;30;31;26m▀[38;2;106;85;40m[48;2;103;82;41m▀[38;2;102;81;41m[48;2;102;80;40m▀[38;2;89;72;36m[48;2;86;71;37m▀[38;2;0;5;18m[48;2;0;3;18m▀[38;2;7;13;21m[48;2;0;8;17m▀[38;2;93;73;37m[48;2;86;69;35m▀[38;2;102;82;42m[48;2;104;81;40m▀[38;2;105;83;40m[48;2;101;81;40m▀[38;2;19;22;21m[48;2;13;17;20m▀[38;2;0;8;20m[48;2;1;8;19m▀[38;2;87;71;38m[48;2;92;73;36m▀[38;2;98;78;39m[48;2;104;81;40m▀[38;2;101;79;39m[48;2;103;80;40m▀[38;2;23;24;22m[48;2;39;35;25m▀[38;2;0;0;16m[48;2;16;17;23m▀[38;2;0;3;18m[48;2;18;23;24m▀[48;2;8;15;22m▀[38;2;0;9;21m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀[0m
|
|
9
|
+
[38;2;149;147;132m[48;2;112;117;112m▀[38;2;131;130;118m[48;2;43;56;61m▀[38;2;88;94;93m[48;2;114;117;109m▀[38;2;2;13;25m[48;2;82;83;78m▀[38;2;0;0;9m[48;2;68;70;67m▀[38;2;4;19;32m[48;2;36;45;52m▀[38;2;34;42;47m[48;2;0;12;26m▀[38;2;4;22;38m[48;2;1;32;52m▀[38;2;3;23;39m[48;2;1;11;22m▀[38;2;1;11;22m[48;2;3;25;40m▀[38;2;3;30;49m[48;2;3;24;39m▀[38;2;5;19;32m[48;2;0;6;16m▀[38;2;51;55;56m[48;2;6;11;20m▀[38;2;59;66;69m[48;2;33;36;37m▀[38;2;61;68;70m[48;2;34;38;40m▀[38;2;36;42;45m[48;2;19;23;30m▀[38;2;24;28;34m[48;2;30;36;40m▀[38;2;0;3;15m[48;2;1;6;18m▀[38;2;1;11;22m[48;2;1;9;19m▀[38;2;0;8;19m[48;2;3;17;30m▀[38;2;3;22;38m[48;2;5;25;39m▀[38;2;7;20;34m[48;2;0;12;26m▀[38;2;45;30;15m[48;2;1;22;41m▀[38;2;79;48;14m[48;2;28;30;30m▀[38;2;125;80;29m[48;2;76;48;17m▀[38;2;156;115;62m[48;2;115;80;36m▀[38;2;167;141;103m[48;2;145;114;73m▀[38;2;173;150;116m[48;2;157;132;96m▀[38;2;178;155;119m[48;2;172;149;112m▀[38;2;189;164;125m[48;2;182;158;120m▀[38;2;162;142;108m[48;2;191;166;126m▀[38;2;131;116;91m[48;2;201;176;135m▀[38;2;133;114;90m[48;2;155;133;100m▀[38;2;54;43;29m[48;2;92;80;59m▀[38;2;30;22;9m[48;2;151;132;98m▀[38;2;69;52;18m[48;2;117;102;77m▀[38;2;102;76;24m[48;2;84;64;24m▀[38;2;140;116;77m[48;2;112;87;33m▀[38;2;112;94;65m[48;2;3;9;18m▀[38;2;13;15;19m[48;2;0;6;18m▀[38;2;20;23;26m[48;2;18;22;26m▀[38;2;0;7;19m[48;2;17;21;25m▀[38;2;10;16;23m[48;2;0;6;18m▀[38;2;2;10;20m[48;2;0;10;21m▀[38;2;0;10;21m▀▀▀[48;2;0;9;20m▀[38;2;0;9;21m[48;2;0;10;20m▀[38;2;0;10;21m▀[38;2;1;10;21m[48;2;0;9;21m▀[38;2;0;10;21m[48;2;0;10;21m▀[38;2;0;8;19m[48;2;0;9;19m▀[38;2;80;65;36m[48;2;87;70;38m▀[38;2;91;70;37m[48;2;105;82;41m▀[38;2;100;78;40m[48;2;99;78;39m▀[38;2;31;31;26m[48;2;31;29;24m▀[38;2;0;5;19m[48;2;0;2;18m▀[38;2;1;9;19m[48;2;23;25;23m▀[38;2;84;69;37m[48;2;100;78;36m▀[38;2;106;82;39m[48;2;107;82;39m▀[38;2;73;58;32m[48;2;63;52;30m▀[38;2;18;19;20m[48;2;0;4;17m▀[38;2;96;76;38m[48;2;91;70;34m▀[38;2;98;78;38m[48;2;113;87;41m▀[38;2;70;59;34m[48;2;84;68;36m▀[38;2;0;6;18m[48;2;6;11;20m▀[38;2;1;10;21m[48;2;1;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀[38;2;1;11;21m[48;2;2;10;21m▀[38;2;0;7;20m[48;2;2;6;19m▀[38;2;23;25;24m[48;2;71;58;32m▀[38;2;114;90;44m[48;2;109;87;42m▀[38;2;106;83;41m[48;2;108;86;43m▀[38;2;106;84;41m[48;2;74;61;34m▀[38;2;27;27;23m[48;2;1;6;19m▀[38;2;0;6;19m[48;2;2;10;20m▀[38;2;1;10;21m[48;2;0;10;21m▀[38;2;0;10;21m▀[38;2;1;11;21m[48;2;2;11;21m▀[38;2;1;8;20m[48;2;0;3;18m▀[38;2;16;19;22m[48;2;63;53;31m▀[38;2;101;80;39m[48;2;116;88;41m▀[38;2;108;84;40m[48;2;108;84;41m▀[38;2;111;86;42m[48;2;89;71;35m▀[38;2;41;37;27m[48;2;1;8;19m▀[38;2;0;5;19m[48;2;0;9;20m▀[38;2;3;11;21m[48;2;1;10;21m▀[38;2;0;6;19m[48;2;0;5;19m▀[38;2;73;60;34m[48;2;72;59;33m▀[38;2;102;80;40m[48;2;110;87;44m▀[38;2;108;86;42m[48;2;109;86;44m▀[38;2;45;40;27m[48;2;44;38;26m▀[38;2;0;3;18m[48;2;0;3;17m▀[38;2;48;44;30m[48;2;49;43;28m▀[38;2;106;85;42m[48;2;110;86;44m▀[38;2;103;82;41m[48;2;107;84;41m▀[38;2;66;56;32m[48;2;70;58;33m▀[38;2;0;3;18m[48;2;0;2;17m▀[38;2;30;31;27m[48;2;35;35;28m▀[38;2;106;85;42m[48;2;122;97;46m▀[38;2;97;77;39m[48;2;104;82;39m▀[38;2;92;75;37m[48;2;112;88;42m▀[38;2;54;46;30m[48;2;111;87;41m▀[38;2;70;58;32m[48;2;105;82;39m▀[38;2;109;85;41m[48;2;99;77;38m▀[38;2;112;88;43m[48;2;92;72;35m▀[38;2;77;63;34m[48;2;12;16;20m▀[38;2;1;6;18m[48;2;0;7;20m▀[38;2;3;11;21m[48;2;4;12;21m▀[38;2;85;67;34m[48;2;99;77;37m▀[38;2;101;79;39m[48;2;112;87;39m▀[38;2;93;73;40m[48;2;108;84;43m▀[38;2;93;74;39m[48;2;112;88;43m▀[38;2;107;86;43m[48;2;114;89;42m▀[38;2;109;87;42m[48;2;125;96;41m▀[38;2;48;42;29m[48;2;58;49;29m▀[38;2;0;4;19m[48;2;0;3;18m▀[38;2;2;11;21m[48;2;2;11;21m▀[38;2;0;10;21m[48;2;0;10;21m▀[0m
|
|
10
|
+
[38;2;80;89;93m[48;2;90;97;97mâ–€[38;2;69;77;80m[48;2;77;88;91mâ–€[38;2;119;122;115m[48;2;59;73;79mâ–€[38;2;114;116;107m[48;2;4;13;25mâ–€[38;2;91;95;90m[48;2;0;8;21mâ–€[38;2;111;111;101m[48;2;25;32;40mâ–€[38;2;54;57;58m[48;2;65;65;62mâ–€[38;2;18;33;45m[48;2;27;30;34mâ–€[38;2;2;12;23m[48;2;3;16;30mâ–€[38;2;5;38;57m[48;2;6;37;57mâ–€[38;2;0;11;23m[48;2;0;10;21mâ–€[38;2;0;9;20m[48;2;0;9;20mâ–€[38;2;0;8;20m[48;2;1;11;21mâ–€[38;2;16;24;31m[48;2;0;7;19mâ–€[38;2;4;11;21m[48;2;0;8;19mâ–€[38;2;3;11;20m[48;2;15;24;31mâ–€[38;2;4;12;23m[48;2;6;15;25mâ–€[38;2;0;9;21m[48;2;0;5;16mâ–€[38;2;1;10;20m[48;2;3;16;28mâ–€[38;2;6;29;45m[48;2;5;26;42mâ–€[38;2;3;23;40m[48;2;1;19;36mâ–€[38;2;4;24;42m[48;2;7;39;62mâ–€[38;2;2;21;36m[48;2;8;39;60mâ–€[38;2;0;30;54m[48;2;5;23;38mâ–€[38;2;4;29;46m[48;2;5;39;60mâ–€[38;2;52;44;33m[48;2;7;36;57mâ–€[38;2;93;69;41m[48;2;81;83;79mâ–€[38;2;93;77;55m[48;2;105;95;78mâ–€[38;2;116;98;74m[48;2;23;39;49mâ–€[38;2;134;113;80m[48;2;25;48;60mâ–€[38;2;149;125;92m[48;2;78;71;58mâ–€[38;2;142;122;93m[48;2;80;70;54mâ–€[38;2;121;103;77m[48;2;55;54;48mâ–€[38;2;111;93;68m[48;2;39;47;50mâ–€[38;2;143;123;92m[48;2;55;50;42mâ–€[38;2;90;79;59m[48;2;43;35;15mâ–€[38;2;80;62;23m[48;2;86;64;18mâ–€[38;2;75;59;23m[48;2;35;39;35mâ–€[38;2;0;4;18m[48;2;9;17;26mâ–€[38;2;1;11;21m[48;2;0;7;18mâ–€[38;2;0;7;19m[48;2;1;11;21mâ–€[38;2;3;11;21m[48;2;0;9;20mâ–€[38;2;0;10;21mâ–€[48;2;0;10;21mâ–€[38;2;0;9;21mâ–€[38;2;0;10;21mâ–€[48;2;1;10;21mâ–€[48;2;0;7;20mâ–€[38;2;0;9;20m[48;2;20;22;24mâ–€[38;2;0;10;21m[48;2;97;76;39mâ–€[38;2;4;12;22m[48;2;110;86;41mâ–€[38;2;0;9;20m[48;2;29;29;25mâ–€[38;2;0;8;18m[48;2;1;5;18mâ–€[38;2;81;64;35m[48;2;81;65;36mâ–€[38;2;104;82;43m[48;2;102;80;40mâ–€[38;2;102;81;41m[48;2;101;81;40mâ–€[38;2;31;30;25m[48;2;31;30;24mâ–€[38;2;0;2;17m[48;2;0;2;16mâ–€[38;2;37;34;25m[48;2;45;40;28mâ–€[38;2;94;74;36m[48;2;110;87;42mâ–€[38;2;94;74;38m[48;2;95;74;35mâ–€[38;2;61;49;27m[48;2;95;75;37mâ–€[38;2;13;14;21m[48;2;86;69;36mâ–€[38;2;77;63;35m[48;2;90;72;37mâ–€[38;2;99;77;37m[48;2;95;76;37mâ–€[38;2;101;81;41m[48;2;100;79;39mâ–€[38;2;37;35;26m[48;2;38;34;24mâ–€[38;2;0;4;18m[48;2;0;4;18mâ–€[38;2;3;11;21m[48;2;2;11;21mâ–€[38;2;0;6;20m[48;2;0;5;18mâ–€[38;2;23;26;23m[48;2;80;64;34mâ–€[38;2;115;89;41m[48;2;106;83;41mâ–€[38;2;106;85;42m[48;2;108;84;40mâ–€[38;2;112;90;43m[48;2;65;53;29mâ–€[38;2;26;27;24m[48;2;3;8;19mâ–€[38;2;0;6;19m[48;2;3;11;21mâ–€[38;2;1;10;21m[48;2;2;11;21mâ–€[38;2;0;10;21m[48;2;0;10;21mâ–€[38;2;1;10;21m[48;2;2;11;21mâ–€[38;2;0;7;20m[48;2;0;4;18mâ–€[38;2;18;23;23m[48;2;62;52;31mâ–€[38;2;109;86;43m[48;2;110;86;41mâ–€[38;2;108;85;43m[48;2;109;85;40mâ–€[38;2;101;80;40m[48;2;77;63;33mâ–€[38;2;28;28;23m[48;2;6;10;19mâ–€[38;2;0;5;18m[48;2;3;10;20mâ–€[38;2;1;10;20m[48;2;2;11;20mâ–€[38;2;1;10;21m[48;2;2;11;21mâ–€[38;2;0;5;18m[48;2;0;6;19mâ–€[38;2;89;72;38m[48;2;70;58;34mâ–€[38;2;122;96;46m[48;2;105;84;42mâ–€[38;2;122;95;47m[48;2;102;80;39mâ–€[38;2;53;45;29m[48;2;43;39;27mâ–€[38;2;0;2;15m[48;2;1;3;17mâ–€[38;2;60;51;32m[48;2;51;45;30mâ–€[38;2;125;97;48m[48;2;105;84;43mâ–€[38;2;120;94;46m[48;2;102;80;39mâ–€[38;2;76;63;35m[48;2;68;57;32mâ–€[38;2;0;3;17m[48;2;0;3;18mâ–€[38;2;31;31;25m[48;2;29;30;26mâ–€[38;2;104;82;40m[48;2;102;82;41mâ–€[38;2;96;77;41m[48;2;104;82;42mâ–€[38;2;103;81;40m[48;2;73;61;36mâ–€[38;2;99;78;39m[48;2;45;40;27mâ–€[38;2;106;84;43m[48;2;97;77;39mâ–€[38;2;103;81;40m[48;2;98;76;36mâ–€[38;2;23;24;22m[48;2;69;56;31mâ–€[38;2;0;5;19m[48;2;0;6;19mâ–€[38;2;1;10;20m[48;2;0;10;21mâ–€[38;2;3;11;20m[48;2;2;10;19mâ–€[38;2;80;65;35m[48;2;84;68;37mâ–€[38;2;102;80;41m[48;2;99;79;42mâ–€[38;2;91;73;39m[48;2;101;80;41mâ–€[38;2;62;50;29m[48;2;26;27;24mâ–€[38;2;67;55;33m[48;2;0;1;18mâ–€[38;2;73;60;33m[48;2;0;6;19mâ–€[38;2;31;30;24m[48;2;0;8;20mâ–€[38;2;0;6;19m[48;2;0;10;21mâ–€[38;2;1;11;21mâ–€[38;2;0;10;21m[48;2;0;9;21mâ–€[0m
|
|
11
|
+
[38;2;123;127;121m[48;2;39;47;54m▀[38;2;59;68;71m[48;2;59;64;65m▀[38;2;75;81;81m[48;2;65;70;70m▀[38;2;57;59;60m[48;2;55;58;59m▀[38;2;8;15;25m[48;2;73;72;67m▀[38;2;0;1;13m[48;2;12;17;23m▀[38;2;6;21;35m[48;2;1;23;40m▀[38;2;2;16;29m[48;2;3;26;44m▀[38;2;0;9;20m[48;2;0;10;22m▀[38;2;8;36;56m[48;2;7;35;54m▀[38;2;1;13;25m[48;2;6;27;42m▀[38;2;0;9;19m[48;2;1;8;17m▀[38;2;0;9;20m[48;2;0;3;16m▀[38;2;4;12;23m[48;2;41;46;47m▀[38;2;8;16;26m▀[38;2;25;29;33m[48;2;0;0;7m▀[38;2;41;45;45m[48;2;0;9;20m▀[38;2;15;19;26m[48;2;17;23;29m▀[38;2;1;15;28m[48;2;1;13;25m▀[38;2;3;18;32m[48;2;2;18;32m▀[38;2;1;15;28m[48;2;1;13;26m▀[38;2;5;30;49m[48;2;4;27;44m▀[38;2;9;44;66m[48;2;7;38;60m▀[38;2;13;47;66m[48;2;15;48;67m▀[38;2;5;20;32m[48;2;15;39;54m▀[38;2;5;33;53m[48;2;5;28;45m▀[38;2;20;52;69m[48;2;10;51;76m▀[38;2;111;101;84m[48;2;11;39;56m▀[38;2;23;43;56m[48;2;13;24;35m▀[38;2;0;31;55m[48;2;6;25;42m▀[38;2;0;11;29m[48;2;45;47;47m▀[38;2;0;23;42m[48;2;60;60;55m▀[38;2;0;19;39m[48;2;21;30;38m▀[38;2;1;32;55m[48;2;16;26;31m▀[38;2;55;51;38m[48;2;68;55;24m▀[38;2;86;67;27m[48;2;87;69;24m▀[38;2;68;49;13m[48;2;64;52;38m▀[38;2;13;25;29m[48;2;109;84;61m▀[38;2;26;38;46m[48;2;46;50;50m▀[38;2;2;8;18m[48;2;22;32;40m▀[38;2;0;9;20m[48;2;1;8;19m▀[48;2;0;9;20m▀▀[48;2;0;10;21m▀[38;2;0;10;20m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;8;19m▀[38;2;1;10;21m[48;2;1;10;21m▀[38;2;0;6;20m[48;2;1;7;20m▀[38;2;26;27;24m[48;2;22;24;23m▀[38;2;107;83;40m[48;2;103;81;42m▀[38;2;114;88;44m[48;2;96;76;40m▀[38;2;57;48;30m[48;2;94;73;35m▀[38;2;0;2;17m[48;2;73;58;32m▀[38;2;79;63;35m[48;2;99;77;38m▀[38;2;98;77;39m[48;2;105;83;41m▀[38;2;104;82;40m[48;2;94;74;36m▀[38;2;32;31;24m[48;2;15;19;23m▀[38;2;0;2;17m[48;2;5;12;20m▀[38;2;73;60;33m[48;2;98;77;37m▀[38;2;116;91;41m[48;2;95;75;38m▀[38;2;111;88;42m[48;2;75;60;32m▀[38;2;118;93;45m[48;2;65;55;33m▀[38;2;119;92;42m[48;2;74;61;35m▀[38;2;115;92;43m[48;2;67;56;33m▀[38;2;103;82;42m[48;2;91;71;37m▀[38;2;102;81;41m[48;2;105;82;40m▀[38;2;57;48;31m[48;2;83;67;34m▀[38;2;1;8;19m[48;2;3;11;20m▀[38;2;0;6;19m[48;2;6;12;21m▀[38;2;32;30;24m[48;2;99;79;38m▀[38;2;103;80;39m[48;2;98;77;41m▀[38;2;109;85;41m[48;2;104;80;40m▀[38;2;102;81;40m[48;2;90;74;38m▀[38;2;12;15;20m[48;2;72;61;35m▀[38;2;0;1;18m[48;2;77;64;34m▀[38;2;0;5;19m[48;2;76;63;35m▀[48;2;78;65;35m▀[38;2;0;10;21m[48;2;15;21;22m▀[38;2;0;7;20m[48;2;0;6;19m▀[38;2;18;21;24m[48;2;88;71;38m▀[38;2;108;85;42m[48;2;116;93;46m▀[38;2;108;83;39m[48;2;108;85;43m▀[38;2;88;70;37m[48;2;99;79;39m▀[38;2;18;21;23m[48;2;75;61;30m▀[38;2;0;0;17m[48;2;83;68;36m▀[38;2;0;5;18m[48;2;78;65;37m▀[38;2;0;5;19m[48;2;79;65;36m▀[38;2;0;9;21m[48;2;23;26;25m▀[38;2;0;6;19m[48;2;0;3;17m▀[38;2;74;62;35m[48;2;69;58;35m▀[38;2;102;83;42m[48;2;130;103;49m▀[38;2;107;87;46m[48;2;108;85;44m▀[38;2;49;44;31m[48;2;100;80;41m▀[38;2;0;0;16m[48;2;58;48;29m▀[38;2;55;48;30m[48;2;93;75;39m▀[38;2;101;81;42m[48;2;104;83;44m▀[38;2;94;75;38m[48;2;104;81;40m▀[38;2;73;60;33m[48;2;58;49;29m▀[38;2;0;4;18m[48;2;0;2;17m▀[38;2;28;30;26m[48;2;35;34;26m▀[38;2;105;84;42m[48;2;115;91;43m▀[38;2;104;81;42m[48;2;99;79;42m▀[38;2;86;71;40m[48;2;85;69;38m▀[38;2;11;17;22m[48;2;0;6;18m▀[38;2;86;69;36m[48;2;63;52;31m▀[38;2;91;71;36m[48;2;107;83;38m▀[38;2;97;77;40m[48;2;115;91;42m▀[38;2;27;28;24m[48;2;64;54;31m▀[38;2;0;6;19m[48;2;0;4;19m▀[38;2;3;11;20m[48;2;3;12;20m▀[38;2;88;71;38m[48;2;90;73;39m▀[38;2;104;83;45m[48;2;110;87;45m▀[38;2;103;81;41m[48;2;107;84;43m▀[38;2;25;26;23m[48;2;86;70;37m▀[38;2;0;1;18m[48;2;81;65;35m▀[38;2;0;7;20m[48;2;78;65;36m▀[38;2;0;5;19m[48;2;77;65;37m▀[38;2;0;9;21m[48;2;15;21;24m▀[38;2;0;10;21m[48;2;0;7;20m▀[48;2;1;10;21m▀[0m
|
|
12
|
+
[38;2;0;5;17m[48;2;1;11;21mâ–€[38;2;4;13;23m[48;2;1;15;27mâ–€[38;2;63;65;61m[48;2;0;18;35mâ–€[38;2;0;4;14m[48;2;1;7;17mâ–€[38;2;28;40;48m[48;2;3;29;45mâ–€[38;2;13;21;30m[48;2;7;33;51mâ–€[38;2;1;15;31m[48;2;0;6;16mâ–€[38;2;10;41;61m[48;2;7;29;44mâ–€[38;2;2;15;27m[48;2;3;27;44mâ–€[38;2;0;14;28m[48;2;16;20;27mâ–€[38;2;4;26;43m[48;2;124;121;105mâ–€[38;2;0;7;18m[48;2;47;50;51mâ–€[38;2;1;8;19m[48;2;0;1;13mâ–€[38;2;13;18;26m[48;2;0;8;20mâ–€[38;2;45;49;50m[48;2;7;14;23mâ–€[38;2;38;40;43m[48;2;37;43;47mâ–€[38;2;26;31;37m[48;2;28;33;38mâ–€[38;2;3;11;21m[48;2;28;34;38mâ–€[38;2;2;18;32m[48;2;1;14;27mâ–€[48;2;2;15;27mâ–€[38;2;1;11;22mâ–€[38;2;3;23;39m[48;2;1;15;29mâ–€[38;2;6;33;51m[48;2;3;25;41mâ–€[38;2;7;34;53m[48;2;5;33;51mâ–€[38;2;13;34;48m[48;2;22;51;66mâ–€[38;2;9;20;29m[48;2;41;64;72mâ–€[38;2;2;21;38m[48;2;39;50;54mâ–€[38;2;7;46;71m[48;2;6;20;33mâ–€[38;2;24;44;55m[48;2;0;26;47mâ–€[38;2;143;127;98m[48;2;104;102;87mâ–€[38;2;168;152;121m[48;2;176;159;126mâ–€[38;2;137;125;104m[48;2;118;109;92mâ–€[38;2;110;102;86m[48;2;60;55;41mâ–€[38;2;47;39;20m[48;2;73;57;22mâ–€[38;2;94;73;28m[48;2;75;60;23mâ–€[38;2;54;42;16m[48;2;45;37;17mâ–€[38;2;80;60;46m[48;2;70;52;36mâ–€[38;2;180;134;90m[48;2;142;101;64mâ–€[38;2;155;112;70m[48;2;95;65;37mâ–€[38;2;52;57;55m[48;2;47;55;52mâ–€[38;2;9;18;28m[48;2;13;23;31mâ–€[38;2;0;8;19m[48;2;0;7;18mâ–€[38;2;1;10;21m[48;2;2;11;22mâ–€[48;2;0;7;19mâ–€[38;2;2;11;22m[48;2;6;14;23mâ–€[38;2;8;16;25m[48;2;24;28;32mâ–€[38;2;1;10;21m[48;2;11;16;24mâ–€[38;2;0;7;19m[48;2;33;38;40mâ–€[38;2;0;4;18m[48;2;4;9;19mâ–€[38;2;60;51;30m[48;2;10;13;19mâ–€[38;2;107;85;43m[48;2;78;61;30mâ–€[38;2;94;76;39m[48;2;112;85;35mâ–€[38;2;106;84;42m[48;2;94;70;30mâ–€[38;2;102;81;40m[48;2;95;71;32mâ–€[38;2;121;96;45m[48;2;62;50;28mâ–€[38;2;76;61;33m[48;2;4;10;19mâ–€[38;2;0;1;17m[48;2;0;4;18mâ–€[38;2;23;25;23m[48;2;53;45;26mâ–€[38;2;102;80;38m[48;2;96;73;32mâ–€[38;2;107;83;40m[48;2;101;77;35mâ–€[38;2;82;66;34m[48;2;53;45;29mâ–€[38;2;1;8;19m[48;2;1;5;17mâ–€[38;2;0;0;18m[48;2;2;10;20mâ–€[38;2;20;22;23m[48;2;9;14;19mâ–€[38;2;107;82;39m[48;2;92;70;35mâ–€[38;2;104;80;38m[48;2;102;79;36mâ–€[38;2;101;79;39m[48;2;102;80;38mâ–€[38;2;10;16;21m[48;2;41;37;26mâ–€[38;2;7;14;20m[48;2;4;12;22mâ–€[38;2;101;78;39m[48;2;93;73;36mâ–€[38;2;107;83;41m[48;2;95;73;35mâ–€[38;2;104;83;42m[48;2;91;72;37mâ–€[38;2;112;88;43m[48;2;82;65;33mâ–€[38;2;121;95;45m[48;2;90;69;35mâ–€[38;2;118;94;44m[48;2;94;73;35mâ–€[38;2;118;93;45m[48;2;96;74;34mâ–€[38;2;117;92;43m[48;2;103;81;37mâ–€[38;2;22;25;24m[48;2;19;22;22mâ–€[38;2;0;7;20m[48;2;0;7;20mâ–€[38;2;94;73;37m[48;2;85;66;33mâ–€[38;2;101;81;42m[48;2;101;77;36mâ–€[38;2;107;86;43m[48;2;98;76;37mâ–€[38;2;109;86;41m[48;2;101;77;36mâ–€[38;2;108;84;39m[48;2;101;78;37mâ–€[38;2;117;92;42m[48;2;94;71;33mâ–€[38;2;118;94;47m[48;2;101;78;37mâ–€[38;2;124;96;45m[48;2;103;79;38mâ–€[38;2;34;33;26m[48;2;31;31;25mâ–€[38;2;0;4;19m[48;2;0;4;18mâ–€[38;2;11;16;22m[48;2;1;8;19mâ–€[38;2;101;79;38m[48;2;21;22;22mâ–€[38;2;108;85;42m[48;2;83;64;30mâ–€[38;2;105;84;42m[48;2;103;79;36mâ–€[38;2;99;78;38m[48;2;98;76;35mâ–€[38;2;99;79;40m[48;2;103;78;33mâ–€[38;2;111;88;43m[48;2;82;63;30mâ–€[38;2;104;81;39m[48;2;20;21;22mâ–€[38;2;11;16;21m[48;2;1;8;19mâ–€[38;2;0;4;19m[48;2;0;5;18mâ–€[38;2;32;33;27m[48;2;30;30;25mâ–€[38;2;104;82;39m[48;2;99;77;36mâ–€[38;2;104;82;41m[48;2;93;71;34mâ–€[38;2;92;73;38m[48;2;86;68;33mâ–€[38;2;0;8;19m[48;2;3;11;19mâ–€[38;2;14;17;21m[48;2;1;6;18mâ–€[38;2;102;79;37m[48;2;57;46;26mâ–€[38;2;104;83;42m[48;2;104;79;36mâ–€[38;2;107;83;40m[48;2;98;77;37mâ–€[38;2;18;20;22m[48;2;53;46;29mâ–€[38;2;1;9;21m[48;2;0;8;20mâ–€[38;2;93;75;40m[48;2;85;67;35mâ–€[38;2;110;86;42m[48;2;94;73;36mâ–€[38;2;105;82;40m[48;2;93;71;33mâ–€[38;2;111;87;41m[48;2;94;72;35mâ–€[38;2;112;90;44m[48;2;101;79;36mâ–€[38;2;112;89;44m[48;2;99;76;37mâ–€[38;2;114;89;42m[48;2;105;82;39mâ–€[38;2;22;24;24m[48;2;20;23;22mâ–€[38;2;0;6;20m[48;2;0;6;20mâ–€[38;2;1;10;21m[48;2;1;11;21mâ–€[0m
|
|
13
|
+
[38;2;2;16;30m[48;2;1;13;25mâ–€[38;2;1;13;25m[48;2;5;30;47mâ–€[38;2;8;34;50m[48;2;5;20;34mâ–€[38;2;3;18;31m[48;2;18;47;66mâ–€[38;2;1;8;18m[48;2;4;16;28mâ–€[38;2;14;42;60m[48;2;2;11;21mâ–€[38;2;10;31;45m[48;2;6;24;41mâ–€[38;2;0;7;19m[48;2;3;15;29mâ–€[38;2;4;17;30m[48;2;111;107;96mâ–€[38;2;120;119;108m[48;2;140;138;127mâ–€[38;2;125;125;112m[48;2;56;70;78mâ–€[38;2;118;115;101m[48;2;84;92;92mâ–€[38;2;18;23;30m[48;2;119;117;107mâ–€[38;2;0;0;12m[48;2;26;28;33mâ–€[38;2;16;22;29m[48;2;24;32;38mâ–€[38;2;41;47;50m[48;2;35;46;53mâ–€[38;2;0;9;21m[48;2;2;14;27mâ–€[38;2;1;16;30m[48;2;7;26;40mâ–€[38;2;3;22;38m[48;2;2;16;29mâ–€[38;2;0;8;19m[48;2;0;9;20mâ–€[38;2;2;19;33m[48;2;0;10;20mâ–€[38;2;1;12;23m[48;2;2;16;29mâ–€[38;2;1;16;30m[48;2;1;12;22mâ–€[38;2;3;26;44m[48;2;0;12;24mâ–€[38;2;9;42;61m[48;2;3;23;41mâ–€[38;2;15;54;75m[48;2;0;30;52mâ–€[38;2;40;64;75m[48;2;43;63;71mâ–€[38;2;64;70;69m[48;2;127;117;97mâ–€[38;2;28;35;41m[48;2;114;86;60mâ–€[38;2;18;27;34m[48;2;164;121;84mâ–€[38;2;101;95;82m[48;2;103;82;61mâ–€[38;2;69;65;54m[48;2;34;32;24mâ–€[38;2;55;44;21m[48;2;84;65;26mâ–€[38;2;88;69;26m[48;2;69;53;21mâ–€[38;2;50;42;19m[48;2;44;36;17mâ–€[38;2;41;33;17m[48;2;56;49;27mâ–€[38;2;11;13;19m[48;2;60;52;29mâ–€[38;2;28;27;29m[48;2;11;18;23mâ–€[38;2;36;39;38m[48;2;0;11;27mâ–€[38;2;17;33;44m[48;2;1;14;26mâ–€[38;2;3;17;29m[48;2;0;9;20mâ–€[38;2;1;9;19m[48;2;0;7;19mâ–€[38;2;0;7;19m[48;2;8;16;25mâ–€[38;2;10;18;27m[48;2;27;32;35mâ–€[38;2;24;30;34m[48;2;11;15;23mâ–€[38;2;8;15;23m[48;2;16;22;29mâ–€[38;2;5;12;21m[48;2;16;23;30mâ–€[38;2;15;22;28m[48;2;0;8;20mâ–€[38;2;8;21;32m[48;2;1;10;21mâ–€[38;2;0;9;22m[48;2;19;37;48mâ–€[38;2;9;30;46m[48;2;39;60;71mâ–€[38;2;33;53;60m[48;2;38;59;73mâ–€[38;2;39;57;63m[48;2;43;65;77mâ–€[38;2;27;49;60m[48;2;44;65;78mâ–€[38;2;7;29;46m[48;2;51;74;86mâ–€[38;2;3;15;26m[48;2;25;43;55mâ–€[38;2;1;10;20m[48;2;1;7;17mâ–€[38;2;14;30;42m[48;2;11;27;39mâ–€[38;2;19;43;57m[48;2;35;59;73mâ–€[38;2;22;47;61m[48;2;37;63;80mâ–€[38;2;10;26;38m[48;2;28;50;63mâ–€[38;2;5;16;28m[48;2;0;5;16mâ–€[38;2;8;24;36m[48;2;0;1;12mâ–€[38;2;3;15;28m[48;2;0;10;21mâ–€[38;2;17;36;50m[48;2;45;65;76mâ–€[38;2;21;41;53m[48;2;55;76;86mâ–€[38;2;23;43;55m[48;2;46;71;85mâ–€[38;2;13;28;40m[48;2;14;32;47mâ–€[38;2;1;12;23m[48;2;1;9;20mâ–€[38;2;20;41;53m[48;2;34;57;71mâ–€[38;2;17;39;53m[48;2;48;73;85mâ–€[38;2;18;40;55m[48;2;39;65;78mâ–€[38;2;20;42;55m[48;2;23;49;66mâ–€[38;2;20;42;56m[48;2;28;53;70mâ–€[38;2;19;41;54m[48;2;38;64;79mâ–€[38;2;14;36;52m[48;2;35;64;80mâ–€[38;2;21;44;59m[48;2;40;69;83mâ–€[38;2;5;17;29m[48;2;12;27;38mâ–€[38;2;0;8;19m[48;2;0;7;18mâ–€[38;2;21;41;53m[48;2;24;47;62mâ–€[38;2;19;41;54m[48;2;37;64;80mâ–€[38;2;17;39;52m[48;2;43;69;84mâ–€[38;2;15;39;55m[48;2;37;63;78mâ–€[38;2;18;42;57m[48;2;26;51;67mâ–€[38;2;19;42;57m[48;2;29;52;66mâ–€[38;2;18;40;54m[48;2;36;59;73mâ–€[38;2;18;39;55m[48;2;40;66;82mâ–€[38;2;6;19;32m[48;2;11;27;40mâ–€[38;2;7;24;39m[48;2;1;8;19mâ–€[38;2;4;15;27m[48;2;4;14;27mâ–€[38;2;0;10;23m[48;2;32;53;64mâ–€[38;2;12;33;49m[48;2;36;60;72mâ–€[38;2;26;47;58m[48;2;32;55;69mâ–€[38;2;27;48;59m[48;2;33;62;78mâ–€[38;2;30;53;63m[48;2;33;57;73mâ–€[38;2;11;34;52m[48;2;42;65;77mâ–€[38;2;0;8;21m[48;2;28;49;61mâ–€[38;2;4;16;28m[48;2;3;12;24mâ–€[38;2;3;16;29m[48;2;1;9;20mâ–€[38;2;7;20;31m[48;2;10;24;36mâ–€[38;2;24;46;59m[48;2;31;58;74mâ–€[38;2;22;45;59m[48;2;27;58;76mâ–€[38;2;21;42;54m[48;2;27;56;73mâ–€[38;2;2;12;24m[48;2;2;12;22mâ–€[38;2;6;21;34m[48;2;0;9;20mâ–€[38;2;8;23;35m[48;2;34;54;65mâ–€[38;2;17;41;57m[48;2;40;64;78mâ–€[38;2;15;39;55m[48;2;43;68;82mâ–€[38;2;16;33;45m[48;2;19;41;58mâ–€[38;2;0;9;20m[48;2;0;6;16mâ–€[38;2;19;37;50m[48;2;23;42;54mâ–€[38;2;21;42;56m[48;2;36;62;75mâ–€[38;2;17;39;54m[48;2;39;64;77mâ–€[38;2;19;41;55m[48;2;35;62;77mâ–€[38;2;19;41;56m[48;2;32;59;75mâ–€[38;2;14;36;51m[48;2;33;60;77mâ–€[38;2;18;41;55m[48;2;34;65;81mâ–€[38;2;6;18;30m[48;2;19;42;57mâ–€[38;2;0;8;19m[48;2;0;8;18mâ–€[38;2;0;10;22m[48;2;1;10;21mâ–€[0m
|
|
14
|
+
[38;2;1;11;22m[48;2;0;8;20mâ–€[38;2;4;22;37m[48;2;1;18;33mâ–€[38;2;4;23;38m[48;2;2;22;39mâ–€[38;2;8;26;42m[48;2;0;11;27mâ–€[38;2;12;40;59m[48;2;0;2;12mâ–€[38;2;0;10;25m[48;2;37;43;47mâ–€[38;2;4;6;15m[48;2;112;113;103mâ–€[38;2;108;107;96m[48;2;123;127;117mâ–€[38;2;138;135;124m[48;2;69;80;84mâ–€[38;2;42;56;64m[48;2;65;76;80mâ–€[38;2;19;33;43m[48;2;53;59;63mâ–€[38;2;49;59;64m[48;2;41;45;47mâ–€[38;2;75;85;87m[48;2;29;34;40mâ–€[38;2;130;128;114m[48;2;36;40;43mâ–€[38;2;67;71;71m[48;2;95;96;90mâ–€[38;2;3;15;27m[48;2;59;65;66mâ–€[38;2;7;21;32m[48;2;50;58;61mâ–€[38;2;8;33;51m[48;2;4;25;43mâ–€[38;2;0;15;29m[48;2;1;11;22mâ–€[38;2;1;13;25m[48;2;1;12;23mâ–€[38;2;2;18;32m[48;2;1;16;28mâ–€[38;2;1;11;23m[48;2;1;14;27mâ–€[38;2;1;17;31m[48;2;0;9;20mâ–€[38;2;4;18;29m[48;2;2;14;27mâ–€[38;2;9;21;32m[48;2;3;20;36mâ–€[38;2;3;18;34m[48;2;10;25;37mâ–€[38;2;96;95;86m[48;2;69;68;62mâ–€[38;2;86;68;49m[48;2;41;33;26mâ–€[38;2;168;114;69m[48;2;108;74;48mâ–€[38;2;187;135;91m[48;2;136;98;66mâ–€[38;2;136;100;70m[48;2;94;70;53mâ–€[38;2;76;60;36m[48;2;68;54;26mâ–€[38;2;91;70;25m[48;2;70;54;20mâ–€[38;2;46;36;17m[48;2;20;18;15mâ–€[38;2;66;54;24m[48;2;80;63;27mâ–€[38;2;111;86;31m[48;2;59;47;20mâ–€[38;2;78;58;20m[48;2;3;2;11mâ–€[38;2;102;78;30m[48;2;55;36;12mâ–€[38;2;42;37;25m[48;2;117;88;31mâ–€[38;2;0;2;17m[48;2;31;29;22mâ–€[38;2;5;13;22m[48;2;12;15;24mâ–€[38;2;7;14;24m[48;2;30;35;37mâ–€[38;2;21;29;35m[48;2;0;0;14mâ–€[38;2;10;17;26m[48;2;15;19;27mâ–€[38;2;0;0;10m[48;2;76;78;74mâ–€[38;2;15;22;30m[48;2;106;108;97mâ–€[38;2;21;27;34m[48;2;115;117;107mâ–€[38;2;0;5;16m[48;2;86;88;84mâ–€[38;2;0;4;16m[48;2;29;32;37mâ–€[38;2;15;27;38m[48;2;9;15;24mâ–€[38;2;43;57;66m[48;2;0;10;22mâ–€[38;2;23;33;41m[48;2;0;11;23mâ–€[38;2;4;10;18m[48;2;3;13;24mâ–€[38;2;42;49;55m[48;2;33;47;56mâ–€[38;2;59;70;77m[48;2;59;72;78mâ–€[38;2;42;54;61m[48;2;38;51;59mâ–€[38;2;7;15;25m[48;2;5;15;26mâ–€[38;2;2;8;18m[48;2;0;7;17mâ–€[38;2;52;60;65m[48;2;8;17;27mâ–€[38;2;64;76;82m[48;2;39;50;59mâ–€[38;2;51;62;70m[48;2;44;56;64mâ–€[38;2;39;49;57m[48;2;41;53;61mâ–€[38;2;44;57;66m[48;2;35;46;53mâ–€[38;2;42;56;64m[48;2;43;54;60mâ–€[38;2;44;58;66m[48;2;42;54;62mâ–€[38;2;42;54;63m[48;2;50;62;70mâ–€[38;2;29;43;52m[48;2;17;26;36mâ–€[38;2;4;15;27m[48;2;0;6;16mâ–€[38;2;0;7;18m[48;2;1;11;22mâ–€[38;2;19;29;39m[48;2;0;5;16mâ–€[38;2;42;55;63m[48;2;5;12;23mâ–€[38;2;57;72;80m[48;2;38;50;57mâ–€[38;2;46;58;66m[48;2;55;67;75mâ–€[38;2;21;34;44m[48;2;39;53;61mâ–€[38;2;23;33;42m[48;2;9;17;27mâ–€[38;2;27;42;51m[48;2;0;1;13mâ–€[38;2;30;43;51m[48;2;0;10;24mâ–€[38;2;13;25;36m[48;2;0;7;17mâ–€[38;2;0;8;19m[48;2;0;11;21mâ–€[38;2;13;21;30m[48;2;0;7;18mâ–€[38;2;39;51;58m[48;2;3;10;21mâ–€[38;2;58;72;79m[48;2;32;43;52mâ–€[38;2;54;65;71m[48;2;49;62;71mâ–€[38;2;34;45;53m[48;2;38;50;59mâ–€[38;2;22;31;39m[48;2;15;26;36mâ–€[38;2;31;43;51m[48;2;0;0;10mâ–€[38;2;32;44;52m[48;2;4;21;35mâ–€[38;2;10;20;30m[48;2;3;15;27mâ–€[38;2;0;5;15m[48;2;0;5;15mâ–€[38;2;15;27;37m[48;2;36;48;56mâ–€[38;2;54;71;78m[48;2;51;64;70mâ–€[38;2;65;81;87m[48;2;58;71;77mâ–€[38;2;35;46;54m[48;2;26;36;44mâ–€[38;2;6;12;22m[48;2;0;0;9mâ–€[38;2;30;40;48m[48;2;20;30;39mâ–€[38;2;56;70;78m[48;2;52;67;76mâ–€[38;2;44;60;69m[48;2;46;60;67mâ–€[38;2;16;28;39m[48;2;36;47;55mâ–€[38;2;0;7;17m[48;2;0;4;15mâ–€[38;2;6;14;25m[48;2;10;19;29mâ–€[38;2;40;54;61m[48;2;49;63;71mâ–€[38;2;57;76;85m[48;2;53;68;75mâ–€[38;2;50;66;75m[48;2;53;67;74mâ–€[38;2;0;2;12m[48;2;47;61;70mâ–€[38;2;23;33;41m[48;2;63;80;88mâ–€[38;2;56;70;78m[48;2;65;80;86mâ–€[38;2;47;61;70m[48;2;39;53;61mâ–€[38;2;33;45;52m[48;2;4;12;21mâ–€[38;2;5;18;29m[48;2;4;17;29mâ–€[38;2;1;8;20m[48;2;3;16;28mâ–€[38;2;8;18;27m[48;2;5;14;25mâ–€[38;2;48;61;70m[48;2;31;45;55mâ–€[38;2;53;67;75m[48;2;57;69;77mâ–€[38;2;39;51;60m[48;2;52;66;73mâ–€[38;2;16;31;42m[48;2;34;47;57mâ–€[38;2;20;31;40m[48;2;17;26;36mâ–€[38;2;29;43;52m[48;2;0;5;17mâ–€[38;2;11;26;37m[48;2;0;4;15mâ–€[38;2;0;8;19m[48;2;0;10;22mâ–€[38;2;0;10;21m[48;2;0;10;21mâ–€[0m
|
|
15
|
+
[38;2;19;25;31m[48;2;103;108;102mâ–€[38;2;2;13;25m[48;2;100;100;93mâ–€[38;2;8;18;28m[48;2;108;108;101mâ–€[38;2;48;51;54m[48;2;115;119;113mâ–€[38;2;87;87;82m[48;2;97;106;105mâ–€[38;2;106;106;97m[48;2;81;93;95mâ–€[38;2;77;87;86m[48;2;75;85;87mâ–€[38;2;34;51;61m[48;2;70;78;80mâ–€[38;2;71;79;81m[48;2;44;57;64mâ–€[38;2;100;102;98m[48;2;19;29;38mâ–€[38;2;87;90;86m[48;2;6;12;20mâ–€[38;2;44;50;54m[48;2;0;5;15mâ–€[38;2;71;73;70m[48;2;16;28;37mâ–€[38;2;10;13;21m[48;2;19;45;60mâ–€[38;2;21;27;35m[48;2;0;8;21mâ–€[38;2;35;42;47m[48;2;3;19;33mâ–€[38;2;32;44;52m[48;2;6;24;40mâ–€[38;2;0;20;40m[48;2;20;20;22mâ–€[38;2;0;17;34m[48;2;27;24;20mâ–€[38;2;0;15;30m[48;2;15;19;24mâ–€[38;2;0;15;29m[48;2;9;20;31mâ–€[38;2;2;16;29m[48;2;1;21;39mâ–€[38;2;1;12;23m[48;2;0;22;41mâ–€[38;2;0;7;17m[48;2;1;19;35mâ–€[38;2;1;11;22m[48;2;1;15;28mâ–€[38;2;1;15;29m[48;2;1;12;22mâ–€[38;2;13;21;28m[48;2;0;10;22mâ–€[38;2;12;20;27m[48;2;0;9;22mâ–€[38;2;0;6;18m[48;2;6;14;22mâ–€[38;2;54;41;34m[48;2;30;28;17mâ–€[38;2;46;38;24m[48;2;101;80;28mâ–€[38;2;88;69;25m[48;2;73;56;20mâ–€[38;2;43;36;18m[48;2;24;21;16mâ–€[38;2;24;23;16m[48;2;84;68;23mâ–€[38;2;72;56;23m[48;2;60;47;17mâ–€[38;2;80;66;30m[48;2;95;75;32mâ–€[38;2;0;0;17m[48;2;45;41;24mâ–€[38;2;32;24;15m[48;2;0;3;14mâ–€[38;2;61;43;13m[48;2;29;20;11mâ–€[38;2;104;81;32m[48;2;113;86;26mâ–€[38;2;0;4;15m[48;2;34;37;34mâ–€[38;2;0;0;12m[48;2;61;64;64mâ–€[38;2;47;48;48m[48;2;74;80;80mâ–€[38;2;100;102;95m[48;2;54;67;73mâ–€[38;2;77;84;83m[48;2;20;27;35mâ–€[38;2;7;18;30m[48;2;6;17;27mâ–€[38;2;12;22;32m[48;2;31;44;51mâ–€[38;2;115;118;110m[48;2;83;87;82mâ–€[38;2;117;119;111m[48;2;103;107;104mâ–€[38;2;38;43;46m[48;2;81;88;87mâ–€[38;2;23;27;33m[48;2;51;56;56mâ–€[38;2;12;19;27m[48;2;34;38;40mâ–€[38;2;0;8;19m[48;2;6;11;18mâ–€[38;2;19;32;42m[48;2;16;29;39mâ–€[38;2;33;50;61m[48;2;31;51;62mâ–€[38;2;20;34;45m[48;2;15;35;50mâ–€[38;2;1;8;19m[48;2;3;17;30mâ–€[38;2;1;10;21m[48;2;1;9;20mâ–€[38;2;0;7;17m[48;2;1;10;21mâ–€[38;2;27;39;48m[48;2;4;13;24mâ–€[38;2;56;69;77m[48;2;23;36;46mâ–€[38;2;39;52;62m[48;2;42;59;69mâ–€[38;2;6;14;24m[48;2;28;41;52mâ–€[38;2;39;53;61m[48;2;33;50;61mâ–€[38;2;49;63;71m[48;2;22;41;53mâ–€[38;2;29;42;52m[48;2;4;15;26mâ–€[38;2;4;13;23m[48;2;0;8;19mâ–€[38;2;0;9;20m[48;2;1;10;21mâ–€[38;2;0;10;21m[48;2;1;9;20mâ–€[38;2;1;11;21m[48;2;19;34;45mâ–€[38;2;0;8;19m[48;2;38;54;64mâ–€[38;2;0;7;17m[48;2;40;57;68mâ–€[38;2;38;51;60m[48;2;25;41;52mâ–€[38;2;54;69;78m[48;2;26;39;49mâ–€[38;2;53;66;74m[48;2;28;46;58mâ–€[38;2;19;29;38m[48;2;19;40;54mâ–€[38;2;1;7;18m[48;2;9;24;37mâ–€[38;2;1;11;22m[48;2;2;12;24mâ–€[38;2;0;10;21m[48;2;0;8;19mâ–€[38;2;1;11;23m[48;2;13;29;41mâ–€[38;2;0;9;21m[48;2;29;50;62mâ–€[38;2;0;7;17m[48;2;38;57;68mâ–€[38;2;24;37;46m[48;2;29;48;60mâ–€[38;2;57;72;81m[48;2;29;44;55mâ–€[38;2;52;66;74m[48;2;18;33;45mâ–€[38;2;31;43;52m[48;2;17;34;46mâ–€[38;2;4;12;23m[48;2;9;25;39mâ–€[38;2;1;10;21m[48;2;3;14;26mâ–€[38;2;0;7;18m[48;2;0;7;17mâ–€[38;2;13;25;35m[48;2;10;27;40mâ–€[38;2;42;58;68m[48;2;28;51;67mâ–€[38;2;41;58;68m[48;2;33;58;72mâ–€[38;2;17;27;37m[48;2;13;29;41mâ–€[38;2;0;6;17m[48;2;0;2;11mâ–€[38;2;9;18;28m[48;2;13;29;40mâ–€[38;2;41;57;67m[48;2;35;59;73mâ–€[38;2;45;64;75m[48;2;27;48;62mâ–€[38;2;16;32;44m[48;2;7;21;33mâ–€[38;2;0;5;15m[48;2;0;8;18mâ–€[38;2;13;24;34m[48;2;5;16;28mâ–€[38;2;36;53;63m[48;2;22;41;54mâ–€[38;2;40;55;64m[48;2;26;49;64mâ–€[38;2;47;63;71m[48;2;25;42;55mâ–€[38;2;35;52;61m[48;2;0;3;14mâ–€[38;2;38;52;59m[48;2;0;0;8mâ–€[38;2;40;58;67m[48;2;14;30;43mâ–€[38;2;47;67;77m[48;2;28;56;72mâ–€[38;2;31;46;56m[48;2;22;55;74mâ–€[38;2;3;11;22m[48;2;12;33;48mâ–€[38;2;0;7;18m[48;2;0;7;16mâ–€[38;2;14;28;39m[48;2;2;13;25mâ–€[38;2;19;34;45m[48;2;10;31;47mâ–€[38;2;31;45;55m[48;2;18;40;54mâ–€[38;2;34;51;63m[48;2;22;43;56mâ–€[38;2;35;53;64m[48;2;14;35;49mâ–€[38;2;35;51;61m[48;2;16;34;47mâ–€[38;2;24;42;54m[48;2;19;35;46mâ–€[38;2;8;20;32m[48;2;7;20;31mâ–€[38;2;0;9;20m[48;2;0;9;20mâ–€[38;2;0;10;21m[48;2;0;9;21mâ–€[0m
|
|
16
|
+
[38;2;62;75;81m[48;2;74;87;91mâ–€[38;2;73;85;90m[48;2;44;55;62mâ–€[38;2;68;81;85m[48;2;39;49;56mâ–€[38;2;18;34;47m[48;2;0;6;18mâ–€[38;2;42;61;71m[48;2;19;43;58mâ–€[38;2;50;62;71m[48;2;25;39;49mâ–€[38;2;65;77;83m[48;2;35;40;44mâ–€[38;2;92;96;94m[48;2;35;41;44mâ–€[38;2;94;98;97m[48;2;45;51;54mâ–€[38;2;102;106;101m[48;2;29;34;40mâ–€[38;2;51;54;54m[48;2;66;70;70mâ–€[38;2;2;9;21m[48;2;22;28;35mâ–€[38;2;0;12;26m[48;2;0;12;27mâ–€[38;2;5;31;49m[48;2;3;18;31mâ–€[38;2;12;41;60m[48;2;6;23;37mâ–€[38;2;3;17;29m[48;2;9;25;38mâ–€[38;2;0;2;22m[48;2;45;39;33mâ–€[38;2;34;26;18m[48;2;73;52;28mâ–€[38;2;55;36;18m[48;2;43;28;13mâ–€[38;2;41;29;18m[48;2;30;20;13mâ–€[38;2;41;27;15m[48;2;56;37;19mâ–€[38;2;39;27;18m[48;2;65;43;20mâ–€[38;2;29;25;21m[48;2;79;51;22mâ–€[38;2;10;21;31m[48;2;78;51;23mâ–€[38;2;4;23;38m[48;2;42;29;17mâ–€[38;2;0;18;37m[48;2;39;38;36mâ–€[38;2;0;18;35m[48;2;25;33;38mâ–€[38;2;0;14;30m[48;2;18;24;29mâ–€[38;2;20;22;21m[48;2;45;37;18mâ–€[38;2;81;64;25m[48;2;106;80;26mâ–€[38;2;97;75;26m[48;2;58;43;16mâ–€[38;2;32;26;15m[48;2;54;45;21mâ–€[38;2;85;65;27m[48;2;88;69;27mâ–€[38;2;123;97;35m[48;2;107;83;25mâ–€[38;2;100;73;18m[48;2;84;59;15mâ–€[38;2;28;23;14m[48;2;33;26;14mâ–€[38;2;89;71;30m[48;2;19;17;15mâ–€[38;2;78;62;29m[48;2;56;45;21mâ–€[38;2;98;73;23m[48;2;44;40;23mâ–€[38;2;88;67;23m[48;2;0;8;20mâ–€[38;2;35;41;50m[48;2;1;15;30mâ–€[38;2;29;42;51m[48;2;26;41;51mâ–€[38;2;0;7;21m[48;2;28;48;59mâ–€[38;2;34;44;50m[48;2;25;48;61mâ–€[38;2;59;68;71m[48;2;16;38;52mâ–€[38;2;6;32;49m[48;2;2;18;32mâ–€[38;2;5;21;34m[48;2;0;1;15mâ–€[38;2;0;0;9m[48;2;38;41;43mâ–€[38;2;89;90;86m[48;2;88;91;88mâ–€[38;2;97;103;104m[48;2;60;65;66mâ–€[38;2;62;66;66m[48;2;80;80;76mâ–€[38;2;32;35;38m[48;2;65;67;65mâ–€[38;2;16;20;27m[48;2;2;8;20mâ–€[38;2;0;6;18m[48;2;1;9;20mâ–€[38;2;1;20;36m[48;2;3;18;31mâ–€[38;2;3;22;38m[48;2;4;17;31mâ–€[38;2;5;20;34m[48;2;0;9;20mâ–€[38;2;4;16;27mâ–€[38;2;14;39;55m[48;2;0;11;21mâ–€[38;2;3;16;29m[48;2;1;11;22mâ–€[38;2;0;13;25m[48;2;3;15;27mâ–€[38;2;7;30;47m[48;2;6;21;34mâ–€[38;2;10;34;51m[48;2;6;22;37mâ–€[48;2;6;22;35mâ–€[38;2;7;27;43m[48;2;5;21;34mâ–€[38;2;6;22;36m[48;2;5;19;31mâ–€[38;2;0;9;20m[48;2;0;9;20mâ–€[38;2;0;10;21mâ–€[38;2;0;7;18m[48;2;5;18;31mâ–€[38;2;2;13;24m[48;2;8;26;41mâ–€[38;2;12;32;47m[48;2;4;21;35mâ–€[38;2;13;34;47m[48;2;5;21;33mâ–€[38;2;9;30;45m[48;2;10;32;49mâ–€[38;2;11;41;61m[48;2;12;36;53mâ–€[38;2;9;35;53m[48;2;12;38;57mâ–€[38;2;9;34;51m[48;2;9;34;52mâ–€[38;2;7;28;43m[48;2;9;32;49mâ–€[38;2;1;12;23m[48;2;3;15;27mâ–€[38;2;0;9;19m[48;2;0;8;18mâ–€[38;2;3;15;27m[48;2;1;13;24mâ–€[38;2;11;32;47m[48;2;5;20;34mâ–€[38;2;11;29;44m[48;2;11;33;50mâ–€[38;2;13;32;48m[48;2;11;35;52mâ–€[38;2;8;34;51m[48;2;8;28;44mâ–€[38;2;10;36;53m[48;2;8;29;45mâ–€[38;2;9;35;53m[48;2;7;27;43mâ–€[38;2;10;32;48m[48;2;7;25;40mâ–€[38;2;2;12;24m[48;2;1;11;22mâ–€[38;2;0;8;19m[48;2;0;8;19mâ–€[38;2;4;19;32m[48;2;5;23;38mâ–€[38;2;6;23;36m[48;2;10;30;46mâ–€[38;2;11;33;49m[48;2;4;20;34mâ–€[38;2;16;46;65m[48;2;3;16;29mâ–€[38;2;9;27;42m[48;2;7;27;42mâ–€[38;2;12;37;54m[48;2;9;31;47mâ–€[38;2;16;42;59m[48;2;4;17;29mâ–€[38;2;16;44;61m[48;2;5;18;30mâ–€[38;2;7;23;36m[48;2;6;21;34mâ–€[38;2;0;8;18m[48;2;2;12;24mâ–€[38;2;1;12;24m[48;2;1;9;20mâ–€[38;2;10;31;47m[48;2;7;25;39mâ–€[38;2;16;42;58m[48;2;11;32;47mâ–€[38;2;19;48;66m[48;2;7;23;36mâ–€[38;2;21;50;68m[48;2;7;22;34mâ–€[38;2;22;54;74m[48;2;4;18;31mâ–€[38;2;18;48;67m[48;2;3;18;31mâ–€[38;2;11;31;45m[48;2;4;22;37mâ–€[38;2;8;28;43m[48;2;1;11;23mâ–€[38;2;2;14;27m[48;2;0;10;21mâ–€[38;2;0;9;20mâ–€[38;2;2;14;26m[48;2;2;17;31mâ–€[38;2;6;23;37m[48;2;2;16;29mâ–€[38;2;10;32;48m[48;2;4;18;30mâ–€[38;2;13;34;49m[48;2;9;30;46mâ–€[38;2;13;36;50mâ–€[38;2;9;32;48m[48;2;6;21;34mâ–€[38;2;1;17;31m[48;2;5;20;32mâ–€[38;2;0;8;19m[48;2;1;11;23mâ–€[38;2;0;10;21m[48;2;0;9;20mâ–€[48;2;0;10;21mâ–€[0m
|
|
17
|
+
[38;2;52;69;76m[48;2;6;18;29m▀[38;2;7;16;27m[48;2;0;17;33m▀[38;2;5;19;33m[48;2;2;24;40m▀[38;2;2;14;27m[48;2;1;13;26m▀[38;2;2;29;48m[48;2;2;24;40m▀[38;2;6;33;52m[48;2;8;43;64m▀[38;2;5;15;26m[48;2;1;14;26m▀[38;2;13;25;36m[48;2;0;14;30m▀[38;2;11;26;36m[48;2;0;16;32m▀[38;2;3;18;33m[48;2;9;41;61m▀[38;2;22;34;44m[48;2;8;34;52m▀[38;2;79;86;85m[48;2;12;33;46m▀[38;2;19;26;35m[48;2;60;69;72m▀[38;2;0;12;27m[48;2;39;44;50m▀[38;2;0;9;22m[48;2;10;20;32m▀[38;2;11;14;20m[48;2;0;8;20m▀[38;2;83;62;38m[48;2;0;5;18m▀[38;2;50;35;21m[48;2;32;36;41m▀[38;2;36;34;31m[48;2;116;118;108m▀[38;2;57;53;45m[48;2;127;126;115m▀[38;2;38;22;11m[48;2;30;30;30m▀[38;2;58;39;21m[48;2;30;17;9m▀[38;2;73;49;24m[48;2;55;37;19m▀[38;2;102;70;31m[48;2;59;40;19m▀[38;2;86;60;28m[48;2;64;45;23m▀[38;2;74;60;41m[48;2;64;52;35m▀[38;2;98;85;65m[48;2;83;70;53m▀[38;2;48;41;32m[48;2;47;40;34m▀[38;2;86;64;17m[48;2;82;60;15m▀[38;2;107;83;29m[48;2;139;106;31m▀[38;2;16;15;13m[48;2;87;67;25m▀[38;2;84;67;27m[48;2;83;63;23m▀[38;2;87;68;26m[48;2;102;76;23m▀[38;2;91;66;15m[48;2;66;46;13m▀[38;2;53;39;13m[48;2;33;29;15m▀[38;2;43;35;17m[48;2;27;21;16m▀[38;2;47;33;19m[48;2;42;28;16m▀[38;2;39;28;18m[48;2;6;14;23m▀[38;2;0;6;26m[48;2;4;19;32m▀[38;2;5;21;35m[48;2;3;21;35m▀[38;2;10;30;44m[48;2;5;23;37m▀[38;2;19;41;55m[48;2;7;36;56m▀[38;2;21;43;58m[48;2;0;21;39m▀[38;2;2;22;39m[48;2;10;18;28m▀[38;2;0;14;29m[48;2;70;67;63m▀[38;2;7;13;24m[48;2;66;70;70m▀[38;2;69;73;71m[48;2;47;58;63m▀[38;2;71;77;76m[48;2;39;57;66m▀[38;2;7;11;19m[48;2;3;13;24m▀[38;2;15;22;29m[48;2;1;10;21m▀[38;2;8;14;22m[48;2;0;10;21m▀[38;2;52;55;53m[48;2;0;8;20m▀[38;2;8;15;23m[48;2;3;24;40m▀[38;2;0;7;18m[48;2;3;19;34m▀[38;2;0;11;21m[48;2;0;9;19m▀[38;2;1;11;22m[48;2;0;9;20m▀▀[38;2;0;10;21m▀[38;2;0;10;20m[48;2;0;10;20m▀[38;2;0;9;20m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀[38;2;9;27;42m▀[38;2;11;31;47m[48;2;1;10;22m▀[38;2;6;22;35m[48;2;0;10;21m▀[38;2;0;7;17m▀[38;2;0;8;19m▀[38;2;0;10;21m▀[38;2;0;9;20m▀[38;2;2;14;25m[48;2;0;9;20m▀[38;2;2;15;27m[48;2;0;9;19m▀[38;2;0;8;18m[48;2;0;10;21m▀[38;2;0;7;17m▀[38;2;1;12;23m[48;2;0;8;19m▀[38;2;2;15;27m[48;2;5;19;32m▀[38;2;6;23;38m[48;2;7;23;37m▀[38;2;5;22;37m[48;2;0;9;20m▀[38;2;1;12;23m[48;2;0;8;19m▀[38;2;1;10;21m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀[38;2;0;9;20m▀[38;2;0;8;18m▀[38;2;2;13;25m[48;2;0;8;19m▀[38;2;4;18;31m[48;2;0;10;21m▀[38;2;4;21;37m[48;2;1;14;26m▀[38;2;1;12;23m[48;2;0;9;20m▀[38;2;0;10;20m▀[38;2;0;11;22m▀[38;2;0;9;20m[48;2;0;10;21m▀[38;2;0;10;21m▀[38;2;0;9;20m▀[38;2;3;16;28m[48;2;0;8;19m▀[38;2;1;11;22m[48;2;0;10;21m▀[38;2;0;9;20m[48;2;0;10;22m▀[38;2;7;23;37m[48;2;0;10;21m▀[38;2;0;11;22m[48;2;0;9;20m▀[38;2;0;9;19m[48;2;0;10;21m▀[38;2;0;8;19m▀[38;2;2;14;25m[48;2;0;9;20m▀[38;2;1;11;22m[48;2;0;10;21m▀[38;2;0;9;20m▀[38;2;1;12;24m[48;2;0;9;20m▀[38;2;3;14;26m[48;2;0;8;19m▀[38;2;5;20;33m▀[38;2;11;31;45m[48;2;0;7;17m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀[0m
|
|
18
|
+
[38;2;0;8;18m[48;2;1;12;24m▀[38;2;2;18;32m[48;2;0;11;23m▀[38;2;4;34;54m[48;2;2;21;37m▀[38;2;3;26;43m[48;2;5;38;61m▀[38;2;0;8;19m[48;2;4;29;47m▀[38;2;5;36;56m[48;2;0;8;18m▀[38;2;8;45;66m[48;2;2;19;34m▀[38;2;4;19;32m[48;2;8;42;64m▀[38;2;0;9;19m[48;2;5;32;51m▀[38;2;2;18;32m[48;2;2;17;30m▀[38;2;13;44;64m[48;2;1;12;25m▀[38;2;6;28;45m[48;2;4;25;42m▀[38;2;2;17;31m[48;2;5;29;47m▀[38;2;27;41;51m[48;2;23;40;53m▀[38;2;50;55;58m[48;2;35;53;63m▀[38;2;59;63;65m[48;2;21;45;61m▀[38;2;70;75;77m[48;2;6;34;53m▀[38;2;89;97;94m[48;2;22;37;49m▀[38;2;41;52;56m[48;2;8;27;41m▀[38;2;47;57;62m[48;2;9;21;32m▀[38;2;106;106;97m[48;2;30;42;50m▀[38;2;42;44;44m[48;2;82;89;89m▀[38;2;17;13;14m[48;2;72;74;71m▀[38;2;60;42;30m[48;2;80;63;50m▀[38;2;61;45;33m[48;2;93;67;48m▀[38;2;42;34;28m[48;2;56;41;32m▀[38;2;33;29;25m[48;2;3;11;21m▀[38;2;29;27;26m[48;2;0;9;23m▀[38;2;50;38;14m[48;2;9;13;19m▀[38;2;74;53;15m[48;2;32;24;13m▀[38;2;120;89;25m[48;2;42;29;11m▀[38;2;117;85;22m[48;2;33;26;13m▀[38;2;66;47;14m[48;2;37;28;13m▀[38;2;40;31;12m[48;2;13;15;18m▀[38;2;37;29;22m[48;2;32;24;22m▀[38;2;54;39;29m[48;2;78;54;38m▀[38;2;32;28;29m[48;2;65;47;36m▀[38;2;2;10;22m[48;2;10;16;25m▀[38;2;2;15;28m[48;2;0;16;30m▀[38;2;2;19;34m[48;2;3;16;29m▀[38;2;1;17;32m[48;2;17;30;42m▀[38;2;5;12;23m[48;2;34;58;71m▀[38;2;33;37;41m[48;2;42;58;67m▀[38;2;55;64;67m[48;2;2;17;31m▀[38;2;58;69;72m[48;2;0;10;27m▀[38;2;38;65;78m[48;2;7;40;60m▀[38;2;0;3;15m[48;2;12;47;68m▀[38;2;19;34;44m[48;2;0;16;30m▀[38;2;19;52;70m[48;2;1;16;31m▀[38;2;7;32;51m[48;2;4;27;44m▀[38;2;3;21;36m[48;2;3;25;41m▀[38;2;3;22;36m[48;2;3;19;33m▀[38;2;2;16;29m[48;2;2;16;30m▀[38;2;1;13;25m[48;2;1;11;23m▀[38;2;4;20;35m[48;2;0;9;20m▀[38;2;2;15;27m[48;2;0;10;21m▀[38;2;0;9;20m[48;2;0;9;21m▀[38;2;0;10;21m[48;2;0;10;21m▀[38;2;0;9;20m▀[38;2;0;10;20m[48;2;0;9;20m▀[38;2;0;9;20m[48;2;0;10;21m▀▀[38;2;0;10;20m▀[38;2;0;9;20m[48;2;0;9;21m▀[38;2;0;10;21m▀[48;2;0;10;21m▀[38;2;0;10;20m▀[38;2;0;9;21m[48;2;0;9;21m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀[48;2;0;9;21m▀[48;2;0;10;21m▀[38;2;1;11;22m[48;2;0;9;20m▀[38;2;1;12;23m▀[38;2;0;10;21m▀[38;2;0;9;21m▀[38;2;0;10;21m[48;2;0;10;21m▀[38;2;0;9;21m▀[38;2;0;10;21m▀▀▀▀[38;2;0;9;20m▀[38;2;0;10;21m▀▀▀▀[38;2;1;10;21m▀[38;2;0;10;21m▀▀▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m▀[38;2;0;9;21m▀[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;10;21m▀▀[38;2;0;9;21m▀[38;2;0;10;21m[48;2;0;9;19m▀[38;2;1;10;22m[48;2;0;6;17m▀[38;2;1;11;22m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀[0m
|
|
19
|
+
[38;2;0;9;20m[48;2;0;9;19m▀[38;2;0;13;26m[48;2;1;13;25m▀[38;2;1;13;26m[48;2;1;16;31m▀[38;2;0;14;28m[48;2;1;13;27m▀[38;2;3;28;46m[48;2;0;13;26m▀[38;2;4;36;58m[48;2;1;16;30m▀[38;2;3;23;39m[48;2;4;28;45m▀[38;2;1;12;25m[48;2;6;33;52m▀[38;2;2;24;41m[48;2;3;23;39m▀[38;2;5;31;49m[48;2;2;17;31m▀[38;2;6;31;50m[48;2;2;18;33m▀[38;2;2;23;39m[48;2;2;21;36m▀[38;2;1;15;29m[48;2;4;26;42m▀[38;2;0;11;22m[48;2;3;22;37m▀[38;2;0;8;19m[48;2;2;17;31m▀[38;2;0;13;28m[48;2;2;16;30m▀[38;2;4;40;65m[48;2;0;11;23m▀[38;2;3;32;52m[48;2;5;29;45m▀[38;2;3;19;32m[48;2;6;33;51m▀[38;2;3;25;42m[48;2;5;26;43m▀[38;2;2;20;35m[48;2;5;27;43m▀[38;2;6;28;45m[48;2;4;21;35m▀[38;2;32;49;59m[48;2;2;28;46m▀[38;2;47;59;66m[48;2;3;24;39m▀[38;2;50;59;62m[48;2;13;30;43m▀[38;2;26;34;43m[48;2;27;42;53m▀[38;2;10;23;35m[48;2;29;45;55m▀[38;2;2;18;31m[48;2;11;32;48m▀[38;2;1;16;31m[48;2;5;24;41m▀[38;2;3;16;29m[48;2;3;22;37m▀[38;2;11;17;22m[48;2;0;19;35m▀[38;2;13;18;20m[48;2;0;18;34m▀[38;2;3;12;23m[48;2;2;22;39m▀[38;2;0;13;28m[48;2;4;24;40m▀[38;2;0;19;36m[48;2;3;20;34m▀[38;2;0;15;32m[48;2;4;24;39m▀[38;2;0;16;32m[48;2;6;31;49m▀[38;2;3;24;40m[48;2;7;34;52m▀[38;2;9;32;50m[48;2;6;28;44m▀[38;2;11;39;57m[48;2;2;19;34m▀[38;2;17;39;55m[48;2;0;17;32m▀[38;2;3;22;36m[48;2;3;27;44m▀[38;2;0;13;30m[48;2;6;34;53m▀[38;2;5;36;58m[48;2;3;24;40m▀[38;2;6;42;65m[48;2;2;20;35m▀[38;2;1;13;26m[48;2;6;32;49m▀[38;2;3;22;37m[48;2;4;22;38m▀[38;2;8;39;59m[48;2;1;14;27m▀[38;2;7;33;51m[48;2;2;20;35m▀[38;2;3;24;40m[48;2;3;22;37m▀[38;2;2;15;27m[48;2;3;19;32m▀[38;2;1;12;24m[48;2;2;15;28m▀[38;2;2;18;32m[48;2;0;9;19m▀[38;2;2;17;30m[48;2;0;9;20m▀[38;2;0;10;20m[48;2;0;10;21m▀[38;2;0;10;21m▀▀▀▀[38;2;0;9;21m▀[38;2;0;10;20m▀[48;2;0;9;21m▀[48;2;0;10;20m▀▀[38;2;0;9;20m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀[48;2;0;9;21m▀[48;2;0;10;20m▀[48;2;0;10;21m▀[38;2;0;9;21m▀[38;2;0;9;20m[48;2;0;9;20m▀[38;2;0;9;21m[48;2;0;10;20m▀[38;2;0;10;21m[48;2;0;10;21m▀[38;2;0;10;20m▀[38;2;0;10;21m▀▀▀▀[48;2;0;9;21m▀[38;2;0;9;21m[48;2;0;10;20m▀[38;2;0;10;20m▀[38;2;0;9;21m[48;2;0;9;20m▀[48;2;0;9;21m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀[48;2;0;9;21m▀[48;2;0;10;21m▀▀▀▀▀▀▀▀▀[38;2;1;11;22m[48;2;1;10;21m▀[38;2;0;7;17m[48;2;0;8;19m▀[38;2;11;26;39m[48;2;6;19;32m▀[38;2;24;48;64m[48;2;17;37;52m▀[38;2;11;27;41m[48;2;19;39;54m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀[0m
|
|
20
|
+
[38;2;0;9;21m[48;2;0;9;21m▀[38;2;0;9;20m[48;2;0;10;21m▀[38;2;0;10;22m[48;2;0;9;20m▀[38;2;0;13;26m[48;2;0;9;19m▀[38;2;0;10;21m[48;2;0;10;21m▀[38;2;0;11;22m[48;2;0;9;20m▀[38;2;0;8;19m[48;2;0;10;22m▀[38;2;0;9;21m[48;2;0;10;21m▀[38;2;1;15;28m[48;2;0;8;19m▀[38;2;2;22;37m[48;2;0;7;18m▀[38;2;3;22;37m▀[38;2;1;14;26m[48;2;0;9;20m▀[38;2;0;11;23m[48;2;0;9;21m▀[38;2;0;10;22m[48;2;0;9;20m▀[38;2;0;13;26m[48;2;0;9;19m▀[38;2;1;13;25m[48;2;0;9;20m▀[38;2;0;11;23m▀[38;2;0;6;16m[48;2;0;11;22m▀[38;2;0;9;20m[48;2;0;10;21m▀[38;2;2;16;29m[48;2;0;8;19m▀[38;2;3;20;34m[48;2;0;7;18m▀[38;2;3;22;37m[48;2;0;8;18m▀[38;2;3;16;29m[48;2;0;10;21m▀[38;2;3;19;32m[48;2;0;7;18m▀[38;2;1;19;35m[48;2;0;8;19m▀[38;2;0;13;27m[48;2;1;10;21m▀[38;2;0;17;33m[48;2;0;8;19m▀[38;2;4;27;45m[48;2;0;7;17m▀[38;2;3;27;44m▀[38;2;3;23;39m[48;2;0;8;19m▀[38;2;2;16;30m[48;2;0;9;20m▀[38;2;1;12;23m▀[38;2;1;16;30m[48;2;0;8;19m▀[38;2;2;19;34m▀[38;2;2;21;36m▀[38;2;1;18;32m[48;2;0;9;20m▀[38;2;1;15;29m▀[38;2;0;9;20m▀[38;2;0;13;26m▀[38;2;2;19;34m[48;2;0;9;19m▀[38;2;4;27;44m[48;2;0;6;16m▀[38;2;2;23;40m[48;2;0;7;17m▀[38;2;0;12;24m[48;2;0;9;20m▀[38;2;1;14;28m[48;2;0;8;19m▀[38;2;1;12;24m[48;2;0;9;20m▀[38;2;0;7;17m[48;2;0;10;21m▀[38;2;2;17;31m[48;2;0;7;18m▀[38;2;1;18;32m▀[38;2;2;16;30m[48;2;0;8;19m▀[38;2;0;9;20m[48;2;0;9;20m▀[38;2;0;7;18m[48;2;0;10;21m▀[38;2;0;9;19m▀[38;2;0;10;21m▀▀[48;2;0;10;20m▀[48;2;0;9;20m▀[48;2;0;10;21m▀▀▀[48;2;0;9;21m▀[48;2;0;10;21m▀▀[38;2;0;9;20m▀▀[38;2;0;9;21m[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀[38;2;0;9;20m▀[38;2;0;10;21m▀▀▀[48;2;0;9;21m▀[48;2;0;10;21m▀[48;2;0;10;20m▀[38;2;0;10;20m[48;2;0;9;21m▀[48;2;0;9;20m▀[38;2;0;10;21m[48;2;0;9;21m▀[38;2;0;9;20m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀▀[38;2;0;10;20m[48;2;0;9;20m▀▀[38;2;0;10;21m[48;2;0;10;21m▀[48;2;0;9;20m▀[48;2;0;9;21m▀[48;2;0;10;21m▀▀[48;2;0;9;20m▀[48;2;0;9;21m▀[48;2;0;10;21m▀▀▀[38;2;0;9;21m▀[38;2;0;10;21m[48;2;0;9;21m▀[48;2;0;9;20m▀▀[48;2;0;10;21m▀▀[38;2;0;9;19m▀[38;2;0;6;16m[48;2;0;10;22m▀[38;2;0;6;17m[48;2;1;10;22m▀[38;2;0;10;21m[48;2;0;10;21m▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀[0m
|
jazzure/az_cli/README.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# General information
|
|
2
|
+
|
|
3
|
+
As python SDK is not suitable for Azure environment actions discovery, I decided to parse Azure CLI which is quite well when using CLI (but can trigger headache to parse it 😅)
|
|
4
|
+
The idea is to map every service and functions/actions we can interrogate to perform some upper discovery logic.
|
|
5
|
+
|
|
6
|
+
# Technical information
|
|
7
|
+
|
|
8
|
+
## AZ CLI versions
|
|
9
|
+
|
|
10
|
+
There are several version of this tool and some older ones can reveal more information.
|
|
11
|
+
So there is a function `azcli.AzCLI.retrieve_online_versions()` that can list every documented versions.
|
|
12
|
+
This is not used yet in the tool but in the future I will try to handle them.
|
|
13
|
+
|
|
14
|
+
## AZ CLI crawler
|
|
15
|
+
|
|
16
|
+
The recon of all `az` has been done in version `2.90.0`.
|
|
17
|
+
The class `azcli.AzureCliCrawler` handles the parsing of `az`. It's quite long as we need to parse recursively all CLI possibilities with the `--help` arg.
|
|
18
|
+
The function `crawl()` is the main entrance of parsing and added some asyncio strategy to avoid long time running, even though it takes about 40min to complete 😅
|
|
19
|
+
A file in JSON format is created and contains every mapping of `az` commands with all information (see bellow a little extract):
|
|
20
|
+
```json
|
|
21
|
+
{ "command": "az rest",
|
|
22
|
+
"subgroups": [],
|
|
23
|
+
"commands": [],
|
|
24
|
+
"arguments": [
|
|
25
|
+
{
|
|
26
|
+
"name": "--uri",
|
|
27
|
+
"aliases": [
|
|
28
|
+
"--url",
|
|
29
|
+
"-u"
|
|
30
|
+
],
|
|
31
|
+
"required": true,
|
|
32
|
+
"special_mode": "",
|
|
33
|
+
"description": "Request URL. If it doesn't start with a host, CLI assumes it as an Azure resource ID and prefixes it with the ARM endpoint of the current cloud shown by `az cloud show --query endpoints.resourceManager`. Common token {subscriptionId} will be replaced with the current subscription ID specified by `az account set`."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "--body",
|
|
37
|
+
"aliases": [
|
|
38
|
+
"-b"
|
|
39
|
+
],
|
|
40
|
+
"required": false,
|
|
41
|
+
"special_mode": "",
|
|
42
|
+
"description": "Request body. Use @{file} to load from a file. For quoting issues in different terminals, see https://github.com/Azure/azure- cli/blob/dev/doc/use_cli_effectively.md#quoting-issues."
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Technical bonus detail :
|
|
49
|
+
- While parsing the output I discovered that ANSI chars were dropped randomly in some help and caused my parsing to fails for no reason...
|
|
50
|
+
- As it was quite painful some unit tests have been written to ensure good parsing of `az` inside `tests/test_AZCLI.py`
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
File without changes
|
jazzure/az_cli/azcli.py
ADDED
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import json
|
|
3
|
+
import subprocess
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import List, Union, Any
|
|
6
|
+
|
|
7
|
+
import requests
|
|
8
|
+
from bs4 import BeautifulSoup
|
|
9
|
+
from R2Log import logger
|
|
10
|
+
from strip_ansi import strip_ansi
|
|
11
|
+
|
|
12
|
+
from jazzure.utils import binary_installed, add_suffix_to_filename
|
|
13
|
+
|
|
14
|
+
class AzCLI:
|
|
15
|
+
|
|
16
|
+
RELEASE_NOTES_URL = "https://learn.microsoft.com/en-us/cli/azure/release-notes-azure-cli?view=azure-cli-latest"
|
|
17
|
+
|
|
18
|
+
@staticmethod
|
|
19
|
+
def run(*args: str) -> Any:
|
|
20
|
+
cmd = ["az", *args, "--output", "json"]
|
|
21
|
+
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
|
22
|
+
if result.returncode != 0:
|
|
23
|
+
if "Insufficient privileges" in result.stderr:
|
|
24
|
+
logger.error(f"Insufficient privileges to perform : \n{' '.join(cmd)}")
|
|
25
|
+
return None
|
|
26
|
+
#raise RuntimeError(f"Azure CLI command failed:\n$ {' '.join(cmd)}\n\n{result.stderr}")
|
|
27
|
+
return result.returncode, result.stderr
|
|
28
|
+
if not result.stdout.strip():
|
|
29
|
+
return None
|
|
30
|
+
return json.loads(result.stdout)
|
|
31
|
+
|
|
32
|
+
@staticmethod
|
|
33
|
+
def retrieve_local_version() -> Union[None|str]:
|
|
34
|
+
res = None
|
|
35
|
+
result = subprocess.run(["az", "--version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
|
36
|
+
if result.returncode != 0:
|
|
37
|
+
if "Insufficient privileges" in result.stderr:
|
|
38
|
+
logger.error(f"Insufficient privileges to perform : az version")
|
|
39
|
+
return res
|
|
40
|
+
if not result.stdout.strip():
|
|
41
|
+
return res
|
|
42
|
+
for line in result.stdout.splitlines():
|
|
43
|
+
if line.startswith("azure-cli"):
|
|
44
|
+
single_sep_line = " ".join(line.split()).strip()
|
|
45
|
+
res = single_sep_line.split()[-1]
|
|
46
|
+
break
|
|
47
|
+
return res
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def retrieve_online_versions(cls):
|
|
51
|
+
res = []
|
|
52
|
+
r = requests.get(cls.RELEASE_NOTES_URL, timeout=30)
|
|
53
|
+
r.raise_for_status()
|
|
54
|
+
|
|
55
|
+
soup = BeautifulSoup(r.text, "html.parser")
|
|
56
|
+
|
|
57
|
+
for p in soup.find_all("p"):
|
|
58
|
+
if p.text.startswith("Version "):
|
|
59
|
+
res.append(p.text.split(' ')[-1])
|
|
60
|
+
logger.debug(f"Found all versions of az CLI : {','.join(res)}")
|
|
61
|
+
return res
|
|
62
|
+
|
|
63
|
+
@staticmethod
|
|
64
|
+
def is_installed() -> bool:
|
|
65
|
+
return binary_installed("az")
|
|
66
|
+
|
|
67
|
+
class AzureCliCrawler:
|
|
68
|
+
|
|
69
|
+
OUTPUT_FILE = Path(__file__).parent / "azure_cli_commands.json"
|
|
70
|
+
|
|
71
|
+
def __init__(self):
|
|
72
|
+
self.commands = {}
|
|
73
|
+
self.version = AzCLI.retrieve_local_version()
|
|
74
|
+
self.visited = set()
|
|
75
|
+
self.stats = { "groups": 0, "commands": 0, "errors": 0 }
|
|
76
|
+
|
|
77
|
+
@staticmethod
|
|
78
|
+
async def run_az_help(path) -> tuple[int, str]:
|
|
79
|
+
"""
|
|
80
|
+
Execute : az <path> --help
|
|
81
|
+
:return return code & text from help
|
|
82
|
+
"""
|
|
83
|
+
async with asyncio.Semaphore(10):
|
|
84
|
+
command = ["az"] + path + ["--help"]
|
|
85
|
+
# synchronous method
|
|
86
|
+
# proc = subprocess.run( command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, encoding="utf-8", errors="replace")
|
|
87
|
+
|
|
88
|
+
#async method
|
|
89
|
+
proc = await asyncio.create_subprocess_exec(*command, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
|
|
90
|
+
stdout, stderr = await proc.communicate()
|
|
91
|
+
|
|
92
|
+
return proc.returncode, stdout.decode()
|
|
93
|
+
|
|
94
|
+
@staticmethod
|
|
95
|
+
def get_sections(lines: str):
|
|
96
|
+
"""
|
|
97
|
+
Transform help in dict :
|
|
98
|
+
{
|
|
99
|
+
"Subgroups": [...],
|
|
100
|
+
"Commands": [...],
|
|
101
|
+
"Arguments": [...],
|
|
102
|
+
"Examples": [...],
|
|
103
|
+
...
|
|
104
|
+
}
|
|
105
|
+
"""
|
|
106
|
+
sections = {}
|
|
107
|
+
current_section = None
|
|
108
|
+
current_lines = []
|
|
109
|
+
|
|
110
|
+
for line in lines.splitlines():
|
|
111
|
+
if line and line[0].isalpha():
|
|
112
|
+
# save previous part
|
|
113
|
+
if current_lines:
|
|
114
|
+
sections[current_section] = "\n".join(current_lines)
|
|
115
|
+
current_lines = []
|
|
116
|
+
current_section = line.strip().replace(':','')
|
|
117
|
+
elif current_section is not None:
|
|
118
|
+
current_lines.append(line)
|
|
119
|
+
# save previous part
|
|
120
|
+
if current_lines:
|
|
121
|
+
sections[current_section] = "\n".join(current_lines)
|
|
122
|
+
return sections
|
|
123
|
+
|
|
124
|
+
@staticmethod
|
|
125
|
+
def parse_section(content: Union[List[str] | str]) -> List[str]:
|
|
126
|
+
"""
|
|
127
|
+
Generic parser for section content
|
|
128
|
+
"""
|
|
129
|
+
result = []
|
|
130
|
+
content = content.splitlines() if isinstance(content, str) else content
|
|
131
|
+
# Find first non-empty line
|
|
132
|
+
first_line = next((line for line in content if line.strip()), None)
|
|
133
|
+
if first_line is None:
|
|
134
|
+
return []
|
|
135
|
+
command_indent = len(first_line) - len(first_line.lstrip())
|
|
136
|
+
commands = []
|
|
137
|
+
for line in content:
|
|
138
|
+
if not line.strip():
|
|
139
|
+
continue
|
|
140
|
+
indentation = len(line) - len(line.lstrip())
|
|
141
|
+
if indentation == command_indent:
|
|
142
|
+
# because Az CLI return some colors and ANSI strings, we need to remove it for effective parsing
|
|
143
|
+
command = strip_ansi(line.strip().split(":", 1)[0]).strip()
|
|
144
|
+
# remove every [Preview] or whatever
|
|
145
|
+
if "[" in command:
|
|
146
|
+
command = strip_ansi(command.split("[")[0]).strip()
|
|
147
|
+
commands.append(command)
|
|
148
|
+
return commands
|
|
149
|
+
|
|
150
|
+
@staticmethod
|
|
151
|
+
def parse_subgroups(content: str) -> List[str]:
|
|
152
|
+
"""
|
|
153
|
+
Example :
|
|
154
|
+
Subgroups:
|
|
155
|
+
app : Manage applications.
|
|
156
|
+
credential: Manage credentials.
|
|
157
|
+
:return ["app", "credential"]
|
|
158
|
+
"""
|
|
159
|
+
return AzureCliCrawler.parse_section(content=content.splitlines())
|
|
160
|
+
|
|
161
|
+
@staticmethod
|
|
162
|
+
def parse_commands(content: str) -> List[str]:
|
|
163
|
+
"""
|
|
164
|
+
Example :
|
|
165
|
+
Commands:
|
|
166
|
+
create : Create something.
|
|
167
|
+
delete : Delete something.
|
|
168
|
+
:return ["create", "delete"]
|
|
169
|
+
"""
|
|
170
|
+
return AzureCliCrawler.parse_section(content=content.splitlines())
|
|
171
|
+
|
|
172
|
+
@staticmethod
|
|
173
|
+
def parse_arguments(content: Union[List[str]|str]):
|
|
174
|
+
arguments = []
|
|
175
|
+
current = None
|
|
176
|
+
|
|
177
|
+
def save_current():
|
|
178
|
+
#TODO parse description to retrieve "Allowed values"
|
|
179
|
+
nonlocal current
|
|
180
|
+
if current is None:
|
|
181
|
+
return
|
|
182
|
+
current["description"] = " ".join( line.strip() for line in current["description"] if line.strip() )
|
|
183
|
+
arguments.append(current)
|
|
184
|
+
current = None
|
|
185
|
+
|
|
186
|
+
content = content.splitlines() if isinstance(content, str) else content
|
|
187
|
+
|
|
188
|
+
for line in content:
|
|
189
|
+
if not line.strip():
|
|
190
|
+
continue
|
|
191
|
+
|
|
192
|
+
# Number of spaces before text
|
|
193
|
+
indentation = len(line) - len(line.lstrip())
|
|
194
|
+
stripped = line.strip()
|
|
195
|
+
|
|
196
|
+
# Arg is a line beginning with "--" AND is not necessary indented
|
|
197
|
+
if stripped.startswith("--") and indentation < 20:
|
|
198
|
+
save_current()
|
|
199
|
+
# Separate options & description parts
|
|
200
|
+
if ":" in stripped:
|
|
201
|
+
option_part, description = stripped.split(":", 1)
|
|
202
|
+
else:
|
|
203
|
+
option_part = stripped
|
|
204
|
+
description = ""
|
|
205
|
+
|
|
206
|
+
tokens = option_part.split()
|
|
207
|
+
|
|
208
|
+
option_names = []
|
|
209
|
+
required = False
|
|
210
|
+
special_mode = ""
|
|
211
|
+
|
|
212
|
+
for token in tokens:
|
|
213
|
+
if token == "[Required]":
|
|
214
|
+
required = True
|
|
215
|
+
elif token == "[Preview]":
|
|
216
|
+
special_mode = "preview"
|
|
217
|
+
elif token == "[Deprecated]":
|
|
218
|
+
special_mode = "deprecated"
|
|
219
|
+
elif token.startswith("-"):
|
|
220
|
+
option_names.append(token)
|
|
221
|
+
|
|
222
|
+
if not option_names:
|
|
223
|
+
continue
|
|
224
|
+
|
|
225
|
+
current = {
|
|
226
|
+
"name": option_names[0],
|
|
227
|
+
"aliases": option_names[1:],
|
|
228
|
+
"required": required,
|
|
229
|
+
"special_mode": special_mode,
|
|
230
|
+
"description": [],
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
if description.strip():
|
|
234
|
+
current["description"].append(description.strip())
|
|
235
|
+
|
|
236
|
+
# Line that continue the description
|
|
237
|
+
elif current is not None:
|
|
238
|
+
current["description"].append(stripped)
|
|
239
|
+
save_current()
|
|
240
|
+
return arguments
|
|
241
|
+
|
|
242
|
+
@staticmethod
|
|
243
|
+
def parse_examples(lines: Union[List[str]|str]) -> List[str]:
|
|
244
|
+
""" Keep examples as text """
|
|
245
|
+
examples = []
|
|
246
|
+
current = []
|
|
247
|
+
lines = lines.splitlines() if isinstance(lines, str) else lines
|
|
248
|
+
for line in lines:
|
|
249
|
+
# Keep orginal indentation
|
|
250
|
+
if line.strip():
|
|
251
|
+
current.append(line.rstrip())
|
|
252
|
+
elif current:
|
|
253
|
+
examples.append("\n".join(current))
|
|
254
|
+
current = []
|
|
255
|
+
if current:
|
|
256
|
+
examples.append("\n".join(current))
|
|
257
|
+
return examples
|
|
258
|
+
|
|
259
|
+
@staticmethod
|
|
260
|
+
def parse_help(path: List[str], help_text: str) -> dict:
|
|
261
|
+
sections = AzureCliCrawler.get_sections(help_text)
|
|
262
|
+
subgroups = AzureCliCrawler.parse_subgroups(sections.get("Subgroups", ""))
|
|
263
|
+
commands = AzureCliCrawler.parse_commands(sections.get("Commands", ""))
|
|
264
|
+
arguments_id = AzureCliCrawler.parse_arguments(sections.get("Id Arguments", ""))
|
|
265
|
+
arguments = AzureCliCrawler.parse_arguments(sections.get("Arguments", ""))
|
|
266
|
+
global_policy_arguments = AzureCliCrawler.parse_arguments(sections.get("Global Policy Arguments", ""))
|
|
267
|
+
global_arguments = AzureCliCrawler.parse_arguments(sections.get("Global Arguments", ""))
|
|
268
|
+
# find maybe other types of args
|
|
269
|
+
other_args = []
|
|
270
|
+
for section_name in list(sections.keys()):
|
|
271
|
+
if not section_name in ["Subgroups", "Commands", "Arguments", "Id Arguments", "Global Policy Arguments", "Global Arguments"]:
|
|
272
|
+
other_args.extend(AzureCliCrawler.parse_arguments(sections.get(section_name, [])))
|
|
273
|
+
|
|
274
|
+
examples = AzureCliCrawler.parse_examples(sections.get("Examples", []))
|
|
275
|
+
return {
|
|
276
|
+
"path": path,
|
|
277
|
+
"command": "az " + " ".join(path),
|
|
278
|
+
"subgroups": subgroups,
|
|
279
|
+
"commands": commands,
|
|
280
|
+
"arguments": arguments,
|
|
281
|
+
"arguments_id": arguments_id,
|
|
282
|
+
"global_policy_arguments": global_policy_arguments,
|
|
283
|
+
"global_arguments": global_arguments,
|
|
284
|
+
"other_args" : other_args,
|
|
285
|
+
"examples": examples,
|
|
286
|
+
# Useful later to parse again without parsing az cli again
|
|
287
|
+
"raw_help": help_text
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
async def crawl(self, path: Union[None|List[str]] = None):
|
|
291
|
+
path = [] if path is None else path
|
|
292
|
+
path_tuple = tuple(path)
|
|
293
|
+
|
|
294
|
+
if path_tuple in self.visited:
|
|
295
|
+
return
|
|
296
|
+
self.visited.add(path_tuple)
|
|
297
|
+
command_string = ("az" if not path else "az " + " ".join(path) )
|
|
298
|
+
logger.info(f"{command_string}")
|
|
299
|
+
returncode, help_text = await AzureCliCrawler.run_az_help(path)
|
|
300
|
+
if returncode != 0:
|
|
301
|
+
logger.error(f"Error1 detected on command '{command_string}' return code {returncode}")
|
|
302
|
+
self.stats["errors"] += 1
|
|
303
|
+
return
|
|
304
|
+
parsed = AzureCliCrawler.parse_help(path, help_text)
|
|
305
|
+
self.stats["groups"] += 1
|
|
306
|
+
|
|
307
|
+
#async def process_command(command):
|
|
308
|
+
for command in parsed.get("commands", []):
|
|
309
|
+
command_path = path + [command]
|
|
310
|
+
command_string = ("az "+ " ".join(command_path))
|
|
311
|
+
logger.debug(f"[CMD] {command_string}")
|
|
312
|
+
returncode, command_help = await AzureCliCrawler.run_az_help(command_path)
|
|
313
|
+
# we should never hit this condition if parsing worked properly ! But left in case
|
|
314
|
+
if returncode != 0:
|
|
315
|
+
logger.error(f"Error2 detected on command '{command_string}' return code : {returncode}")
|
|
316
|
+
self.stats["errors"] += 1
|
|
317
|
+
self.commands[" ".join(command_path)] = {
|
|
318
|
+
"path": command_path,
|
|
319
|
+
"command": command_string,
|
|
320
|
+
"error": True,
|
|
321
|
+
"returncode": returncode,
|
|
322
|
+
"raw_help": command_help
|
|
323
|
+
}
|
|
324
|
+
continue
|
|
325
|
+
command_data = AzureCliCrawler.parse_help(command_path, command_help)
|
|
326
|
+
self.commands[" ".join(command_path)] = command_data
|
|
327
|
+
self.stats["commands"] += 1
|
|
328
|
+
# Subgroups
|
|
329
|
+
workers = [ asyncio.create_task(self.crawl(path + [subgroup])) for subgroup in parsed.get("subgroups", []) ]
|
|
330
|
+
await asyncio.gather(*workers)
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
def save(self, filename: Path = OUTPUT_FILE) -> None:
|
|
334
|
+
final_filename = add_suffix_to_filename(path=filename, custom=f"_{self.version}")
|
|
335
|
+
output = {
|
|
336
|
+
"metadata": {
|
|
337
|
+
"command_count": self.stats["commands"],
|
|
338
|
+
"group_count": self.stats["groups"],
|
|
339
|
+
"error_count": self.stats["errors"]
|
|
340
|
+
},
|
|
341
|
+
"commands": self.commands
|
|
342
|
+
}
|
|
343
|
+
with final_filename.open("w", encoding="utf-8") as f:
|
|
344
|
+
json.dump(output, f, indent=2, ensure_ascii=False)
|
|
345
|
+
logger.success(f"File saved inside : {final_filename}")
|
|
346
|
+
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Microsoft doc : https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/managed-identities-status
|
|
5
|
+
Managed identities for Azure resources provide an automatically managed identity in Microsoft Entra ID, enabling secure, credential-free authentication to Azure services
|
|
6
|
+
|
|
7
|
+
Difference between identities types : https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|